Fix reference to IrField when serializing superclass' properties

This commit is contained in:
Leonid Startsev
2019-04-23 16:22:26 +03:00
parent 6bec6e6905
commit 90bf36ea7a
@@ -216,10 +216,19 @@ class SerializerIrGenerator(val irClass: IrClass, override val compilerContext:
}
// can it be done in more concise way? e.g. additional builder function?
call.dispatchReceiver = irGet(saveFunc.valueParameters[0])
val serialObjectSymbol = saveFunc.valueParameters[1]
val objectToSerialize = saveFunc.valueParameters[1]
val localOutput = irTemporary(call, "output")
fun SerializableProperty.irGet(): IrGetField = irGetField(irGet(serialObjectSymbol), irField)
fun SerializableProperty.irGet(): IrGetField {
val ownerType = (descriptor.containingDeclaration as? ClassDescriptor)?.defaultType?.toIrType() ?:
throw IllegalStateException("Serializable property must be contained in class")
return irGetField(
irGet(
type = ownerType,
variable = objectToSerialize.symbol
), irField
)
}
// internal serialization via virtual calls?
for ((index, property) in serializableProperties.filter { !it.transient }.withIndex()) {