diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 33cea859795..9888174ac73 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -1510,9 +1510,11 @@ public class ExpressionCodegen extends JetVisitor implem boolean isStatic = containingDeclaration instanceof NamespaceDescriptor; boolean overridesTrait = isOverrideForTrait(propertyDescriptor); boolean isFakeOverride = propertyDescriptor.getKind() == CallableMemberDescriptor.Kind.FAKE_OVERRIDE; + boolean isDelegate = propertyDescriptor.getKind() == CallableMemberDescriptor.Kind.DELEGATION; PropertyDescriptor initialDescriptor = propertyDescriptor; propertyDescriptor = initialDescriptor.getOriginal(); boolean isInsideClass = !isFakeOverride && + !isDelegate && (((containingDeclaration == null && !context.hasThisDescriptor() || context.hasThisDescriptor() && containingDeclaration == context.getThisDescriptor()) || (context.getParentContext() instanceof NamespaceContext) && diff --git a/compiler/testData/codegen/regressions/kt2786.kt b/compiler/testData/codegen/regressions/kt2786.kt new file mode 100644 index 00000000000..7b813217918 --- /dev/null +++ b/compiler/testData/codegen/regressions/kt2786.kt @@ -0,0 +1,13 @@ +trait FooTrait { + val propertyTest: String +} + +class FooDelegate: FooTrait { + override val propertyTest: String = "OK" +} + +class DelegateTest(): FooTrait by FooDelegate() { + fun test() = propertyTest +} + +fun box() = DelegateTest().test() diff --git a/compiler/tests/org/jetbrains/jet/codegen/PropertyGenTest.java b/compiler/tests/org/jetbrains/jet/codegen/PropertyGenTest.java index 50337f22a69..a353f34a1e8 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/PropertyGenTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/PropertyGenTest.java @@ -280,6 +280,11 @@ public class PropertyGenTest extends CodegenTestCase { blackBoxFile("regressions/kt2509.kt"); } + public void testKt2786() throws Exception { + createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY); + blackBoxFile("regressions/kt2786.kt"); + } + public void testKt1528() throws Exception { createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY); blackBoxMultiFile("regressions/kt1528_1.kt", "regressions/kt1528_3.kt");