diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index a8abe5e57f4..fff7fcb39a4 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -1734,6 +1734,7 @@ public class ExpressionCodegen extends JetVisitor implem JvmClassName owner; CallableMethod callableMethod = callableGetter != null ? callableGetter : callableSetter; + propertyDescriptor = unwrapFakeOverride(propertyDescriptor); if (callableMethod == null) { owner = typeMapper.getOwner(propertyDescriptor, contextKind(), isInsideModule); } @@ -1741,7 +1742,7 @@ public class ExpressionCodegen extends JetVisitor implem owner = callableMethod.getOwner(); } - return StackValue.property(propertyDescriptor, owner, asmType(unwrapFakeOverride(propertyDescriptor).getOriginal().getType()), + return StackValue.property(propertyDescriptor, owner, asmType(propertyDescriptor.getOriginal().getType()), isStatic, callableGetter, callableSetter, state); } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java b/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java index ce9c82e9d31..20f812e59f9 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java @@ -889,7 +889,7 @@ public abstract class StackValue { } else { Method method = getter.getSignature().getAsmMethod(); - v.visitMethodInsn(getter.getInvokeOpcode(), methodOwner.getInternalName(), method.getName(), method.getDescriptor()); + v.visitMethodInsn(getter.getInvokeOpcode(), getter.getOwner().getInternalName(), method.getName(), method.getDescriptor()); } coerceTo(type, v); } @@ -902,7 +902,7 @@ public abstract class StackValue { this.type.getDescriptor()); } else { Method method = setter.getSignature().getAsmMethod(); - v.visitMethodInsn(setter.getInvokeOpcode(), methodOwner.getInternalName(), method.getName(), method.getDescriptor()); + v.visitMethodInsn(setter.getInvokeOpcode(), setter.getOwner().getInternalName(), method.getName(), method.getDescriptor()); } } } diff --git a/compiler/testData/codegen/boxWithJava/property/FieldAccess.java b/compiler/testData/codegen/boxWithJava/property/FieldAccess.java new file mode 100644 index 00000000000..ad1724ab1c7 --- /dev/null +++ b/compiler/testData/codegen/boxWithJava/property/FieldAccess.java @@ -0,0 +1,5 @@ +class FieldAccess { + public String fieldO; + + public static String fieldK; +} \ No newline at end of file diff --git a/compiler/testData/codegen/boxWithJava/property/FieldAccess.kt b/compiler/testData/codegen/boxWithJava/property/FieldAccess.kt new file mode 100644 index 00000000000..00e4d816b59 --- /dev/null +++ b/compiler/testData/codegen/boxWithJava/property/FieldAccess.kt @@ -0,0 +1,10 @@ +class MyWrongClass : FieldAccess() { + +} + +fun box() : String { + val clazz = MyWrongClass() + clazz.fieldO = "O" + FieldAccess.fieldK = "K" + return clazz.fieldO!! + FieldAccess.fieldK!! +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithJavaCodegenTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithJavaCodegenTestGenerated.java index 93fe73216dd..200983a5150 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithJavaCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithJavaCodegenTestGenerated.java @@ -31,7 +31,7 @@ import org.jetbrains.jet.codegen.generated.AbstractBlackBoxCodegenTest; /** This class is generated by {@link org.jetbrains.jet.generators.tests.GenerateTests}. DO NOT MODIFY MANUALLY */ @SuppressWarnings("all") @TestMetadata("compiler/testData/codegen/boxWithJava") -@InnerTestClasses({BlackBoxWithJavaCodegenTestGenerated.Enum.class, BlackBoxWithJavaCodegenTestGenerated.Functions.class, BlackBoxWithJavaCodegenTestGenerated.StaticFun.class, BlackBoxWithJavaCodegenTestGenerated.Visibility.class}) +@InnerTestClasses({BlackBoxWithJavaCodegenTestGenerated.Enum.class, BlackBoxWithJavaCodegenTestGenerated.Functions.class, BlackBoxWithJavaCodegenTestGenerated.Property.class, BlackBoxWithJavaCodegenTestGenerated.StaticFun.class, BlackBoxWithJavaCodegenTestGenerated.Visibility.class}) public class BlackBoxWithJavaCodegenTestGenerated extends AbstractBlackBoxCodegenTest { public void testAllFilesPresentInBoxWithJava() throws Exception { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/codegen/boxWithJava"), Pattern.compile("^(.+)\\.kt$"), true); @@ -98,6 +98,19 @@ public class BlackBoxWithJavaCodegenTestGenerated extends AbstractBlackBoxCodege } + @TestMetadata("compiler/testData/codegen/boxWithJava/property") + public static class Property extends AbstractBlackBoxCodegenTest { + public void testAllFilesPresentInProperty() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/codegen/boxWithJava/property"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("FieldAccess.kt") + public void testFieldAccess() throws Exception { + doTestWithJava("compiler/testData/codegen/boxWithJava/property/FieldAccess.kt"); + } + + } + @TestMetadata("compiler/testData/codegen/boxWithJava/staticFun") public static class StaticFun extends AbstractBlackBoxCodegenTest { public void testAllFilesPresentInStaticFun() throws Exception { @@ -257,6 +270,7 @@ public class BlackBoxWithJavaCodegenTestGenerated extends AbstractBlackBoxCodege suite.addTestSuite(BlackBoxWithJavaCodegenTestGenerated.class); suite.addTestSuite(Enum.class); suite.addTestSuite(Functions.class); + suite.addTestSuite(Property.class); suite.addTestSuite(StaticFun.class); suite.addTest(Visibility.innerSuite()); return suite;