diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/AsmUtil.java b/compiler/backend/src/org/jetbrains/jet/codegen/AsmUtil.java index ae84c1aaedb..c1757152eee 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/AsmUtil.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/AsmUtil.java @@ -698,12 +698,16 @@ public class AsmUtil { } public static boolean isInstancePropertyWithStaticBackingField(@NotNull PropertyDescriptor propertyDescriptor) { - DeclarationDescriptor containingDeclaration = propertyDescriptor.getContainingDeclaration(); - return isObject(containingDeclaration) || isPropertyWithBackingFieldInOuterClass(propertyDescriptor); + if (propertyDescriptor.getKind() == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) { + return false; + } + + return isObject(propertyDescriptor.getContainingDeclaration()) || isPropertyWithBackingFieldInOuterClass(propertyDescriptor); } public static boolean isPropertyWithBackingFieldInOuterClass(@NotNull PropertyDescriptor propertyDescriptor) { - return isClassObjectWithBackingFieldsInOuter(propertyDescriptor.getContainingDeclaration()); + return propertyDescriptor.getKind() != CallableMemberDescriptor.Kind.FAKE_OVERRIDE && + isClassObjectWithBackingFieldsInOuter(propertyDescriptor.getContainingDeclaration()); } public static int getVisibilityForSpecialPropertyBackingField(@NotNull PropertyDescriptor propertyDescriptor, boolean isDelegate) { diff --git a/compiler/testData/codegen/box/staticFields/inheritedPropertyInClassObject.kt b/compiler/testData/codegen/box/staticFields/inheritedPropertyInClassObject.kt new file mode 100644 index 00000000000..42a9b180160 --- /dev/null +++ b/compiler/testData/codegen/box/staticFields/inheritedPropertyInClassObject.kt @@ -0,0 +1,13 @@ +open class Bar(val prop: String) +class Foo { + class object : Bar("OK") { + val p = Foo.prop + val p2 = prop + val p3 = this.prop + } + + val p4 = Foo.prop + val p5 = prop +} + +fun box(): String = Foo.prop \ No newline at end of file diff --git a/compiler/testData/codegen/box/staticFields/inheritedPropertyInObject.kt b/compiler/testData/codegen/box/staticFields/inheritedPropertyInObject.kt new file mode 100644 index 00000000000..4d00f209f61 --- /dev/null +++ b/compiler/testData/codegen/box/staticFields/inheritedPropertyInObject.kt @@ -0,0 +1,8 @@ +open class Bar(val prop: String) +object Foo : Bar("OK") { + + val p = Foo.prop + val p2 = prop + val p3 = this.prop +} +fun box(): String = Foo.prop \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java index a7929e10fae..d7c98e9657a 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java @@ -6241,6 +6241,18 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest(fileName); } + @TestMetadata("inheritedPropertyInClassObject.kt") + public void testInheritedPropertyInClassObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/staticFields/inheritedPropertyInClassObject.kt"); + doTest(fileName); + } + + @TestMetadata("inheritedPropertyInObject.kt") + public void testInheritedPropertyInObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/staticFields/inheritedPropertyInObject.kt"); + doTest(fileName); + } + @TestMetadata("syntheticAccessor.kt") public void testSyntheticAccessor() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/staticFields/syntheticAccessor.kt");