Support @Transient properties initializers and init blocks in IR plugin
This commit is contained in:
+16
-7
@@ -8,8 +8,10 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.ParameterDescriptor
|
import org.jetbrains.kotlin.descriptors.ParameterDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
||||||
import org.jetbrains.kotlin.ir.builders.*
|
import org.jetbrains.kotlin.ir.builders.*
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrAnonymousInitializer
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrField
|
import org.jetbrains.kotlin.ir.declarations.IrField
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrProperty
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
|
||||||
@@ -90,13 +92,20 @@ class SerializableIrGenerator(
|
|||||||
|
|
||||||
// todo: transient initializers and init blocks
|
// todo: transient initializers and init blocks
|
||||||
// remaining initalizers of variables
|
// remaining initalizers of variables
|
||||||
// val serialDescs = properties.serializableProperties.map { it.descriptor }.toSet()
|
val serialDescs = properties.serializableProperties.map { it.descriptor }.toSet()
|
||||||
// irClass.declarations.asSequence()
|
irClass.declarations.asSequence()
|
||||||
// .filterIsInstance<IrProperty>()
|
.filterIsInstance<IrProperty>()
|
||||||
// .filter { it.descriptor !in serialDescs }
|
.filter { it.descriptor !in serialDescs }
|
||||||
// .filter { it.backingField != null }
|
.filter { it.backingField != null }
|
||||||
// .mapNotNull { prop -> prop.backingField!!.initializer?.let { prop to it.expression } }
|
.mapNotNull { prop -> transformFieldInitializer(prop.backingField!!)?.let { prop to it } }
|
||||||
// .forEach { (prop, expr) -> +irSetField(irGet(thiz), prop.backingField!!, expr) }
|
.forEach { (prop, expr) -> +irSetField(irGet(thiz), prop.backingField!!, expr) }
|
||||||
|
|
||||||
|
// init blocks
|
||||||
|
irClass.declarations.asSequence()
|
||||||
|
.filterIsInstance<IrAnonymousInitializer>()
|
||||||
|
.forEach { initializer ->
|
||||||
|
initializer.body.statements.forEach { +it }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun generateWriteSelfMethod(methodDescriptor: FunctionDescriptor) {
|
override fun generateWriteSelfMethod(methodDescriptor: FunctionDescriptor) {
|
||||||
|
|||||||
Reference in New Issue
Block a user