Correctly reference deserialization constructor added by plugin
Fixes https://github.com/Kotlin/kotlinx.serialization/issues/472
This commit is contained in:
+2
-2
@@ -579,6 +579,6 @@ interface IrBuilderExtension {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun IrClass.serializableSyntheticConstructor(): IrConstructorSymbol =
|
fun ReferenceSymbolTable.serializableSyntheticConstructor(forClass: ClassDescriptor): IrConstructorSymbol =
|
||||||
this.constructors.single { it.descriptor.isSerializationCtor() }.symbol
|
referenceConstructor(forClass.constructors.single { it.isSerializationCtor() })
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -127,7 +127,7 @@ class SerializableIrGenerator(
|
|||||||
propertiesStart: Int
|
propertiesStart: Int
|
||||||
): Int {
|
): Int {
|
||||||
check(superClass.isInternalSerializable)
|
check(superClass.isInternalSerializable)
|
||||||
val superCtorRef = compilerContext.externalSymbols.referenceClass(superClass).owner.serializableSyntheticConstructor()
|
val superCtorRef = compilerContext.externalSymbols.serializableSyntheticConstructor(superClass)
|
||||||
val superProperties = SerializableProperties(superClass, bindingContext).serializableProperties
|
val superProperties = SerializableProperties(superClass, bindingContext).serializableProperties
|
||||||
val superSlots = superProperties.bitMaskSlotCount()
|
val superSlots = superProperties.bitMaskSlotCount()
|
||||||
val arguments = allValueParameters.subList(0, superSlots) +
|
val arguments = allValueParameters.subList(0, superSlots) +
|
||||||
|
|||||||
+1
-1
@@ -431,7 +431,7 @@ class SerializerIrGenerator(val irClass: IrClass, override val compilerContext:
|
|||||||
val typeArgs = (loadFunc.returnType as IrSimpleType).arguments.map { (it as IrTypeProjection).type }
|
val typeArgs = (loadFunc.returnType as IrSimpleType).arguments.map { (it as IrTypeProjection).type }
|
||||||
val ctor: IrConstructorSymbol = if (serializableDescriptor.isInternalSerializable) {
|
val ctor: IrConstructorSymbol = if (serializableDescriptor.isInternalSerializable) {
|
||||||
args = bitMasks.map { irGet(it) } + args + irNull()
|
args = bitMasks.map { irGet(it) } + args + irNull()
|
||||||
serializableIrClass.serializableSyntheticConstructor()
|
compilerContext.externalSymbols.serializableSyntheticConstructor(serializableDescriptor)
|
||||||
} else {
|
} else {
|
||||||
compilerContext.externalSymbols.referenceConstructor(serializableDescriptor.unsubstitutedPrimaryConstructor!!)
|
compilerContext.externalSymbols.referenceConstructor(serializableDescriptor.unsubstitutedPrimaryConstructor!!)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user