JVM IR: transform fake override properties in SAM adapters
Replace every property with its getter and setter. This is needed because later on, JVM backend assumes that all properties have been lowered (by JvmPropertiesLowering) to this state. #KT-64116 Fixed
This commit is contained in:
committed by
Space Team
parent
d5b59c48c2
commit
d08c9ba222
+11
-4
@@ -18,14 +18,12 @@ import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.IrFunctionBuilder
|
||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.IrTypeOperatorCall
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.types.getClass
|
||||
import org.jetbrains.kotlin.load.java.JavaDescriptorVisibilities
|
||||
import org.jetbrains.kotlin.utils.filterIsInstanceAnd
|
||||
|
||||
internal val singleAbstractMethodPhase = makeIrFilePhase(
|
||||
::JvmSingleAbstractMethodLowering,
|
||||
@@ -67,4 +65,13 @@ private class JvmSingleAbstractMethodLowering(context: JvmBackendContext) : Sing
|
||||
|
||||
override val IrType.needEqualsHashCodeMethods
|
||||
get() = isKotlinFunInterface || isJavaSamConversionWithEqualsHashCode
|
||||
|
||||
override fun postprocessCreatedObjectProxy(klass: IrClass) {
|
||||
val fakeOverrideProperties = klass.declarations.filterIsInstanceAnd(IrProperty::isFakeOverride)
|
||||
klass.declarations.removeAll(fakeOverrideProperties)
|
||||
for (property in fakeOverrideProperties) {
|
||||
property.getter?.let(klass.declarations::add)
|
||||
property.setter?.let(klass.declarations::add)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user