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 =
|
||||
this.constructors.single { it.descriptor.isSerializationCtor() }.symbol
|
||||
fun ReferenceSymbolTable.serializableSyntheticConstructor(forClass: ClassDescriptor): IrConstructorSymbol =
|
||||
referenceConstructor(forClass.constructors.single { it.isSerializationCtor() })
|
||||
}
|
||||
|
||||
+1
-1
@@ -127,7 +127,7 @@ class SerializableIrGenerator(
|
||||
propertiesStart: Int
|
||||
): Int {
|
||||
check(superClass.isInternalSerializable)
|
||||
val superCtorRef = compilerContext.externalSymbols.referenceClass(superClass).owner.serializableSyntheticConstructor()
|
||||
val superCtorRef = compilerContext.externalSymbols.serializableSyntheticConstructor(superClass)
|
||||
val superProperties = SerializableProperties(superClass, bindingContext).serializableProperties
|
||||
val superSlots = superProperties.bitMaskSlotCount()
|
||||
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 ctor: IrConstructorSymbol = if (serializableDescriptor.isInternalSerializable) {
|
||||
args = bitMasks.map { irGet(it) } + args + irNull()
|
||||
serializableIrClass.serializableSyntheticConstructor()
|
||||
compilerContext.externalSymbols.serializableSyntheticConstructor(serializableDescriptor)
|
||||
} else {
|
||||
compilerContext.externalSymbols.referenceConstructor(serializableDescriptor.unsubstitutedPrimaryConstructor!!)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user