Fix VerifyError with @JvmStatic annotated getter

The problem was that for property getter 'context.getContextDescriptor()'
references the containing property, while 'context.getFunctionDescriptor()'
the accessor itself

 #KT-15594 Fixed
This commit is contained in:
Denis Zharkov
2017-02-08 14:17:58 +03:00
parent dd275eda78
commit b989bfce59
5 changed files with 37 additions and 1 deletions
@@ -3192,7 +3192,7 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
boolean isSingleton = calleeContainingClass.getKind().isSingleton();
if (isSingleton) {
if (calleeContainingClass.equals(context.getThisDescriptor()) &&
!CodegenUtilKt.isJvmStaticInObjectOrClass(context.getContextDescriptor())) {
!CodegenUtilKt.isJvmStaticInObjectOrClass(context.getFunctionDescriptor())) {
return StackValue.local(0, typeMapper.mapType(calleeContainingClass));
}
else if (isEnumEntry(calleeContainingClass)) {
@@ -0,0 +1,12 @@
// WITH_RUNTIME
// TARGET_BACKEND: JVM
object ObjectThisTest {
val testValue: String
@JvmStatic get() = this.testValue2
val testValue2: String
get() = "OK"
}
fun box() = ObjectThisTest.testValue
@@ -0,0 +1,12 @@
@kotlin.Metadata
public final class ObjectThisTest {
public final static field INSTANCE: ObjectThisTest
private method <init>(): void
public final static @kotlin.jvm.JvmStatic @org.jetbrains.annotations.NotNull method getTestValue(): java.lang.String
public final @org.jetbrains.annotations.NotNull method getTestValue2(): java.lang.String
}
@kotlin.Metadata
public final class PropertyGetterDelegatesToAnotherKt {
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
}
@@ -9740,6 +9740,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
doTest(fileName);
}
@TestMetadata("propertyGetterDelegatesToAnother.kt")
public void testPropertyGetterDelegatesToAnother() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/jvmStatic/propertyGetterDelegatesToAnother.kt");
doTest(fileName);
}
@TestMetadata("simple.kt")
public void testSimple() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/jvmStatic/simple.kt");
@@ -9740,6 +9740,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
doTest(fileName);
}
@TestMetadata("propertyGetterDelegatesToAnother.kt")
public void testPropertyGetterDelegatesToAnother() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/jvmStatic/propertyGetterDelegatesToAnother.kt");
doTest(fileName);
}
@TestMetadata("simple.kt")
public void testSimple() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/jvmStatic/simple.kt");