[CORDA-2341]: Fixing ABI compatibility for TransactionBuilder vs Corda 3.3. (#4429)

This commit is contained in:
Michele Sollecito 2018-12-18 12:04:18 +00:00 committed by GitHub
parent 43f241cb8b
commit 5a601de584
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -50,15 +50,37 @@ open class TransactionBuilder @JvmOverloads constructor(
protected val outputs: MutableList<TransactionState<ContractState>> = arrayListOf(), protected val outputs: MutableList<TransactionState<ContractState>> = arrayListOf(),
protected val commands: MutableList<Command<*>> = arrayListOf(), protected val commands: MutableList<Command<*>> = arrayListOf(),
protected var window: TimeWindow? = null, protected var window: TimeWindow? = null,
protected var privacySalt: PrivacySalt = PrivacySalt(), protected var privacySalt: PrivacySalt = PrivacySalt()
protected val references: MutableList<StateRef> = arrayListOf(),
protected val serviceHub: ServiceHub? = (Strand.currentStrand() as? FlowStateMachine<*>)?.serviceHub
) { ) {
private companion object { private companion object {
private val log = contextLogger() private val log = contextLogger()
private fun defaultReferencesList(): MutableList<StateRef> = arrayListOf()
private fun defaultServiceHub(): ServiceHub? = (Strand.currentStrand() as? FlowStateMachine<*>)?.serviceHub
} }
constructor(
notary: Party? = null,
lockId: UUID = (Strand.currentStrand() as? FlowStateMachine<*>)?.id?.uuid ?: UUID.randomUUID(),
inputs: MutableList<StateRef> = arrayListOf(),
attachments: MutableList<SecureHash> = arrayListOf(),
outputs: MutableList<TransactionState<ContractState>> = arrayListOf(),
commands: MutableList<Command<*>> = arrayListOf(),
window: TimeWindow? = null,
privacySalt: PrivacySalt = PrivacySalt(),
references: MutableList<StateRef> = defaultReferencesList(),
serviceHub: ServiceHub? = defaultServiceHub()
) : this(notary, lockId, inputs, attachments, outputs, commands, window, privacySalt) {
this.references = references
this.serviceHub = serviceHub
}
protected var references: MutableList<StateRef> = defaultReferencesList()
private set
protected var serviceHub: ServiceHub? = defaultServiceHub()
private set
private val inputsWithTransactionState = arrayListOf<StateAndRef<ContractState>>() private val inputsWithTransactionState = arrayListOf<StateAndRef<ContractState>>()
private val referencesWithTransactionState = arrayListOf<TransactionState<ContractState>>() private val referencesWithTransactionState = arrayListOf<TransactionState<ContractState>>()
@ -469,8 +491,9 @@ open class TransactionBuilder @JvmOverloads constructor(
// Recursively resolve all pointers. // Recursively resolve all pointers.
while (statePointerQueue.isNotEmpty()) { while (statePointerQueue.isNotEmpty()) {
val nextStatePointer = statePointerQueue.pop() val nextStatePointer = statePointerQueue.pop()
if (serviceHub != null) { val hub = serviceHub
val resolvedStateAndRef = nextStatePointer.resolve(serviceHub) if (hub != null) {
val resolvedStateAndRef = nextStatePointer.resolve(hub)
// Don't add dupe reference states because CoreTransaction doesn't allow it. // Don't add dupe reference states because CoreTransaction doesn't allow it.
if (resolvedStateAndRef.ref !in referenceStates()) { if (resolvedStateAndRef.ref !in referenceStates()) {
addReferenceState(resolvedStateAndRef.referenced()) addReferenceState(resolvedStateAndRef.referenced())