add test for generating annotations on the setter of a delegated property; (KT-4169); properly generate backing field for delegated property with a setter
This commit is contained in:
committed by
Andrey Breslav
parent
b4eb3e0f43
commit
c029fa2ed0
@@ -189,12 +189,12 @@ public class PropertyCodegen {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Boolean.TRUE.equals(bindingContext.get(BindingContext.BACKING_FIELD_REQUIRED, descriptor))) {
|
if (p instanceof JetProperty && ((JetProperty) p).hasDelegate()) {
|
||||||
generateBackingFieldAccess(p, descriptor);
|
|
||||||
}
|
|
||||||
else if (p instanceof JetProperty && ((JetProperty) p).hasDelegate()) {
|
|
||||||
generatePropertyDelegateAccess((JetProperty) p, descriptor);
|
generatePropertyDelegateAccess((JetProperty) p, descriptor);
|
||||||
}
|
}
|
||||||
|
else if (Boolean.TRUE.equals(bindingContext.get(BindingContext.BACKING_FIELD_REQUIRED, descriptor))) {
|
||||||
|
generateBackingFieldAccess(p, descriptor);
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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<MyClass>()
|
||||||
|
|
||||||
|
val e1 = e.getDeclaredMethod("setX", javaClass<String>()).getAnnotations()
|
||||||
|
if (e1.size() != 1) return "Fail E1 size: ${e1.toList()}"
|
||||||
|
if (e1[0].annotationType() != javaClass<First>()) return "Fail: ${e1.toList()}"
|
||||||
|
|
||||||
|
return MyClass().x
|
||||||
|
}
|
||||||
+6
@@ -93,6 +93,12 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode
|
|||||||
doTestWithStdlib(fileName);
|
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")
|
@TestMetadata("jvmFlags.kt")
|
||||||
public void testJvmFlags() throws Exception {
|
public void testJvmFlags() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/annotations/jvmFlags.kt");
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/annotations/jvmFlags.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user