Fix for KT-12127: Undeclared type variable on delegated property backing field
#KT-12127 Fixed
This commit is contained in:
@@ -348,7 +348,7 @@ public class PropertyCodegen {
|
|||||||
|
|
||||||
FieldVisitor fv = builder.newField(
|
FieldVisitor fv = builder.newField(
|
||||||
JvmDeclarationOriginKt.OtherOrigin(element, propertyDescriptor), modifiers, name, type.getDescriptor(),
|
JvmDeclarationOriginKt.OtherOrigin(element, propertyDescriptor), modifiers, name, type.getDescriptor(),
|
||||||
typeMapper.mapFieldSignature(kotlinType, propertyDescriptor), defaultValue
|
isDelegate ? null : typeMapper.mapFieldSignature(kotlinType, propertyDescriptor), defaultValue
|
||||||
);
|
);
|
||||||
|
|
||||||
Annotated fieldAnnotated = new AnnotatedWithFakeAnnotations(propertyDescriptor, annotations);
|
Annotated fieldAnnotated = new AnnotatedWithFakeAnnotations(propertyDescriptor, annotations);
|
||||||
|
|||||||
+8
-8
@@ -48,35 +48,35 @@ fun box(): String {
|
|||||||
val classField = clz.getDeclaredField("classField1");
|
val classField = clz.getDeclaredField("classField1");
|
||||||
|
|
||||||
if (classField.getGenericType().toString() != "Z<T>")
|
if (classField.getGenericType().toString() != "Z<T>")
|
||||||
return "fail1:" + classField.getGenericType();
|
return "fail1: " + classField.getGenericType();
|
||||||
|
|
||||||
|
|
||||||
val classField2 = clz.getDeclaredField("classField2");
|
val classField2 = clz.getDeclaredField("classField2");
|
||||||
|
|
||||||
if (classField2.getGenericType().toString() != "Z<java.lang.String>")
|
if (classField2.getGenericType().toString() != "Z<java.lang.String>")
|
||||||
return "fail2:" + classField2.getGenericType();
|
return "fail2: " + classField2.getGenericType();
|
||||||
|
|
||||||
|
|
||||||
val classField3 = clz.getDeclaredField("classField3");
|
val classField3 = clz.getDeclaredField("classField3");
|
||||||
|
|
||||||
if (classField3.getGenericType().toString() != "Zout<java.lang.String>")
|
if (classField3.getGenericType().toString() != "Zout<java.lang.String>")
|
||||||
return "fail3:" + classField3.getGenericType();
|
return "fail3: " + classField3.getGenericType();
|
||||||
|
|
||||||
|
|
||||||
val classField4 = clz.getDeclaredField("classField4");
|
val classField4 = clz.getDeclaredField("classField4");
|
||||||
|
|
||||||
if (classField4.getGenericType().toString() != "Zin<TParam>")
|
if (classField4.getGenericType().toString() != "Zin<TParam>")
|
||||||
return "fail4:" + classField4.getGenericType();
|
return "fail4: " + classField4.getGenericType();
|
||||||
|
|
||||||
val classField5 = clz.getDeclaredField("delegateLazy\$delegate");
|
val classField5 = clz.getDeclaredField("delegateLazy\$delegate");
|
||||||
|
|
||||||
if (classField5.getGenericType().toString() != "kotlin.Lazy<Z<TParam>>")
|
if (classField5.getGenericType().toString() != "interface kotlin.Lazy")
|
||||||
return "fail5:" + classField5.getGenericType();
|
return "fail5: " + classField5.getGenericType();
|
||||||
|
|
||||||
val classField6 = clz.getDeclaredField("delegateNotNull\$delegate");
|
val classField6 = clz.getDeclaredField("delegateNotNull\$delegate");
|
||||||
|
|
||||||
if (classField6.getGenericType().toString() != "kotlin.properties.ReadWriteProperty<java.lang.Object, Z<TParam>>")
|
if (classField6.getGenericType().toString() != "interface kotlin.properties.ReadWriteProperty")
|
||||||
return "fail6:" + classField6.getGenericType();
|
return "fail6: " + classField6.getGenericType();
|
||||||
|
|
||||||
|
|
||||||
return "OK"
|
return "OK"
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
import kotlin.reflect.KProperty
|
||||||
|
import kotlin.reflect.KProperty1
|
||||||
|
|
||||||
|
class DVal<T, R, P: KProperty1<T, R>>(val kmember: P) {
|
||||||
|
operator fun getValue(t: T, p: KProperty<*>): R {
|
||||||
|
return kmember.get(t)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Value<T>(var text: String? = null)
|
||||||
|
|
||||||
|
class Test {
|
||||||
|
val <T> Value<T>.additionalText by DVal(Value<T>::text)
|
||||||
|
}
|
||||||
|
|
||||||
|
// field: Test::additionalText$delegate
|
||||||
|
// jvm signature: LDVal;
|
||||||
|
// generic signature: null
|
||||||
@@ -47,6 +47,12 @@ public class WriteSignatureTestGenerated extends AbstractWriteSignatureTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("backingFieldForGenericDelegated.kt")
|
||||||
|
public void testBackingFieldForGenericDelegated() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/writeSignature/backingFieldForGenericDelegated.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("Comparable.kt")
|
@TestMetadata("Comparable.kt")
|
||||||
public void testComparable() throws Exception {
|
public void testComparable() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/writeSignature/Comparable.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/writeSignature/Comparable.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user