mirror of
https://github.com/corda/corda.git
synced 2024-12-24 15:16:45 +00:00
CORDA-2050: Ensure that ArraySerializer.elementType is resolved for GenericArray. (#5512)
This commit is contained in:
parent
f4f46af706
commit
6d467bdbb1
@ -6,6 +6,7 @@ import net.corda.core.utilities.contextLogger
|
|||||||
import net.corda.core.utilities.debug
|
import net.corda.core.utilities.debug
|
||||||
import net.corda.core.utilities.loggerFor
|
import net.corda.core.utilities.loggerFor
|
||||||
import net.corda.core.utilities.trace
|
import net.corda.core.utilities.trace
|
||||||
|
import net.corda.serialization.internal.model.resolveAgainst
|
||||||
import org.apache.qpid.proton.amqp.Symbol
|
import org.apache.qpid.proton.amqp.Symbol
|
||||||
import org.apache.qpid.proton.codec.Data
|
import org.apache.qpid.proton.codec.Data
|
||||||
import java.lang.reflect.Type
|
import java.lang.reflect.Type
|
||||||
@ -37,20 +38,21 @@ open class ArraySerializer(override val type: Type, factory: LocalSerializerFact
|
|||||||
private fun calcTypeName(type: Type, debugOffset : Int = 0): String {
|
private fun calcTypeName(type: Type, debugOffset : Int = 0): String {
|
||||||
logger.trace { "${"".padStart(debugOffset, ' ') } calcTypeName - ${type.typeName}" }
|
logger.trace { "${"".padStart(debugOffset, ' ') } calcTypeName - ${type.typeName}" }
|
||||||
|
|
||||||
return if (type.componentType().isArray()) {
|
val componentType = type.componentType()
|
||||||
|
return if (componentType.isArray()) {
|
||||||
// Special case handler for primitive byte arrays. This is needed because we can silently
|
// Special case handler for primitive byte arrays. This is needed because we can silently
|
||||||
// coerce a byte[] to our own binary type. Normally, if the component type was itself an
|
// coerce a byte[] to our own binary type. Normally, if the component type was itself an
|
||||||
// array we'd keep walking down the chain but for byte[] stop here and use binary instead
|
// array we'd keep walking down the chain but for byte[] stop here and use binary instead
|
||||||
val typeName = if (AMQPTypeIdentifiers.isPrimitive(type.componentType())) {
|
val typeName = if (AMQPTypeIdentifiers.isPrimitive(componentType)) {
|
||||||
AMQPTypeIdentifiers.nameForType(type.componentType())
|
AMQPTypeIdentifiers.nameForType(componentType)
|
||||||
} else {
|
} else {
|
||||||
calcTypeName(type.componentType(), debugOffset + 4)
|
calcTypeName(componentType, debugOffset + 4)
|
||||||
}
|
}
|
||||||
|
|
||||||
"$typeName[]"
|
"$typeName[]"
|
||||||
} else {
|
} else {
|
||||||
val arrayType = if (type.asClass().componentType.isPrimitive) "[p]" else "[]"
|
val arrayType = if (type.asClass().componentType.isPrimitive) "[p]" else "[]"
|
||||||
"${type.componentType().typeName}$arrayType"
|
"${componentType.typeName}$arrayType"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,7 +60,7 @@ open class ArraySerializer(override val type: Type, factory: LocalSerializerFact
|
|||||||
factory.createDescriptor(type)
|
factory.createDescriptor(type)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal val elementType: Type by lazy { type.componentType() }
|
internal val elementType: Type by lazy { type.componentType().resolveAgainst(type) }
|
||||||
internal open val typeName by lazy { calcTypeName(type) }
|
internal open val typeName by lazy { calcTypeName(type) }
|
||||||
|
|
||||||
internal val typeNotation: TypeNotation by lazy {
|
internal val typeNotation: TypeNotation by lazy {
|
||||||
|
Loading…
Reference in New Issue
Block a user