diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrInterpreter.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrInterpreter.kt index 6618b8aa4ca..d9d1711d0db 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrInterpreter.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrInterpreter.kt @@ -604,7 +604,11 @@ class IrInterpreter(internal val environment: IrInterpreterEnvironment, internal fun List.addToFields() { (0 until propertyReference.typeArgumentsCount).forEach { index -> - val kTypeState = KTypeState(propertyReference.getTypeArgument(index)!!, environment.kTypeClass.owner) + // We need nullable check for java case in FIR + // For some reason it is possible that typeArgumentsCount > 0, but all args are null + // TODO report as error after fix KT-52480 + val typeArgument = propertyReference.getTypeArgument(index) ?: return@forEach + val kTypeState = KTypeState(typeArgument, environment.kTypeClass.owner) propertyState.setField(this[index].symbol, kTypeState) } } diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/proxy/reflection/KProperty0Proxy.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/proxy/reflection/KProperty0Proxy.kt index 75c257b72b2..7df7ac0a9e6 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/proxy/reflection/KProperty0Proxy.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/proxy/reflection/KProperty0Proxy.kt @@ -20,7 +20,7 @@ internal open class KProperty0Proxy( state: KPropertyState, callInterceptor: CallInterceptor ) : AbstractKPropertyProxy(state, callInterceptor), KProperty0 { override val getter: KProperty0.Getter - get() = object : Getter(state.property.getter!!), KProperty0.Getter { + get() = object : Getter(state.property.getter!!), KProperty0.Getter { // TODO avoid !!; getter will be null in case of java property override fun invoke(): Any? = call() override fun call(vararg args: Any?): Any? { @@ -54,8 +54,8 @@ internal open class KProperty0Proxy( internal class KMutableProperty0Proxy( state: KPropertyState, callInterceptor: CallInterceptor ) : KProperty0Proxy(state, callInterceptor), KMutableProperty0 { - override val setter: KMutableProperty0.Setter = - object : Setter(state.property.setter!!), KMutableProperty0.Setter { + override val setter: KMutableProperty0.Setter + get() = object : Setter(state.property.setter!!), KMutableProperty0.Setter { override fun invoke(p1: Any?) = call(p1) override fun call(vararg args: Any?) { diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/proxy/reflection/KProperty1Proxy.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/proxy/reflection/KProperty1Proxy.kt index a5b5efdbb3b..b1c373d58b6 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/proxy/reflection/KProperty1Proxy.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/proxy/reflection/KProperty1Proxy.kt @@ -54,8 +54,8 @@ internal open class KProperty1Proxy( internal class KMutableProperty1Proxy( state: KPropertyState, callInterceptor: CallInterceptor ) : KProperty1Proxy(state, callInterceptor), KMutableProperty1 { - override val setter: KMutableProperty1.Setter = - object : Setter(state.property.setter!!), KMutableProperty1.Setter { + override val setter: KMutableProperty1.Setter + get() = object : Setter(state.property.setter!!), KMutableProperty1.Setter { override fun invoke(p1: Any?, p2: Any?) = call(p1, p2) override fun call(vararg args: Any?) { diff --git a/compiler/testData/ir/interpreter/reference/javaPropertyReference.kt b/compiler/testData/ir/interpreter/reference/javaPropertyReference.kt new file mode 100644 index 00000000000..d102a12febf --- /dev/null +++ b/compiler/testData/ir/interpreter/reference/javaPropertyReference.kt @@ -0,0 +1,7 @@ +// FILE: Main.kt +const val name = ClassWithProperty::SOME_PROPERTY.name + +// FILE: ClassWithProperty.java +public class ClassWithProperty { + public boolean SOME_PROPERTY = false; +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/interpreter/IrInterpreterAfterFir2IrTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/interpreter/IrInterpreterAfterFir2IrTestGenerated.java index c31e98c58a7..54deb0493f3 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/interpreter/IrInterpreterAfterFir2IrTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/interpreter/IrInterpreterAfterFir2IrTestGenerated.java @@ -706,6 +706,12 @@ public class IrInterpreterAfterFir2IrTestGenerated extends AbstractIrInterpreter runTest("compiler/testData/ir/interpreter/reference/getClass.kt"); } + @Test + @TestMetadata("javaPropertyReference.kt") + public void testJavaPropertyReference() throws Exception { + runTest("compiler/testData/ir/interpreter/reference/javaPropertyReference.kt"); + } + @Test @TestMetadata("propertyReference.kt") public void testPropertyReference() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/interpreter/IrInterpreterAfterPsi2IrTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/interpreter/IrInterpreterAfterPsi2IrTestGenerated.java index 1a5a5198240..fd2089d6ca9 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/interpreter/IrInterpreterAfterPsi2IrTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/interpreter/IrInterpreterAfterPsi2IrTestGenerated.java @@ -706,6 +706,12 @@ public class IrInterpreterAfterPsi2IrTestGenerated extends AbstractIrInterpreter runTest("compiler/testData/ir/interpreter/reference/getClass.kt"); } + @Test + @TestMetadata("javaPropertyReference.kt") + public void testJavaPropertyReference() throws Exception { + runTest("compiler/testData/ir/interpreter/reference/javaPropertyReference.kt"); + } + @Test @TestMetadata("propertyReference.kt") public void testPropertyReference() throws Exception {