diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyCodegen.java index 56e8c4fcb71..fc07ab30938 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyCodegen.java @@ -189,12 +189,12 @@ public class PropertyCodegen { return false; } - if (Boolean.TRUE.equals(bindingContext.get(BindingContext.BACKING_FIELD_REQUIRED, descriptor))) { - generateBackingFieldAccess(p, descriptor); - } - else if (p instanceof JetProperty && ((JetProperty) p).hasDelegate()) { + if (p instanceof JetProperty && ((JetProperty) p).hasDelegate()) { generatePropertyDelegateAccess((JetProperty) p, descriptor); } + else if (Boolean.TRUE.equals(bindingContext.get(BindingContext.BACKING_FIELD_REQUIRED, descriptor))) { + generateBackingFieldAccess(p, descriptor); + } else { return false; } diff --git a/compiler/testData/codegen/boxWithStdlib/annotations/delegatedPropertySetter.kt b/compiler/testData/codegen/boxWithStdlib/annotations/delegatedPropertySetter.kt new file mode 100644 index 00000000000..c1fb80a3367 --- /dev/null +++ b/compiler/testData/codegen/boxWithStdlib/annotations/delegatedPropertySetter.kt @@ -0,0 +1,27 @@ +import java.lang.annotation.* + +Retention(RetentionPolicy.RUNTIME) +annotation class First + +class MyClass() { + public var x: String by Delegate() + [First] set +} + +class Delegate { + fun get(t: Any?, p: PropertyMetadata): String { + return "OK" + } + + fun set(t: Any?, p: PropertyMetadata, i: String) {} +} + +fun box(): String { + val e = javaClass() + + val e1 = e.getDeclaredMethod("setX", javaClass()).getAnnotations() + if (e1.size() != 1) return "Fail E1 size: ${e1.toList()}" + if (e1[0].annotationType() != javaClass()) return "Fail: ${e1.toList()}" + + return MyClass().x +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java index 3254ed26a82..0312ccbc5ce 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java @@ -93,6 +93,12 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode doTestWithStdlib(fileName); } + @TestMetadata("delegatedPropertySetter.kt") + public void testDelegatedPropertySetter() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/annotations/delegatedPropertySetter.kt"); + doTestWithStdlib(fileName); + } + @TestMetadata("jvmFlags.kt") public void testJvmFlags() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/annotations/jvmFlags.kt");