| // TARGET_BACKEND: JVM | |
| // WITH_STDLIB | |
| //test for KT-3722 Write correct generic type information for generated fields | |
| package test | |
| import kotlin.properties.Delegates | |
| class Z<T> { | |
| } | |
| class TParam { | |
| } | |
| class Zout<out T> { | |
| } | |
| class Zin<in T> { | |
| } | |
| class Test<T>(val constructorProperty: T) { | |
| val classField1 : Z<T>? = null | |
| val classField2 : Z<String>? = null | |
| val classField3 : Zout<String>? = null | |
| val classField4 : Zin<TParam>? = null | |
| val delegateLazy: Z<TParam>? by lazy {Z<TParam>()} | |
| val delegateNotNull: Z<TParam>? by Delegates.notNull() | |
| } | |
| fun box(): String { | |
| val clz = Test::class.java | |
| val constructorProperty = clz.getDeclaredField("constructorProperty"); | |
| if (constructorProperty.getGenericType().toString() != "T") | |
| return "fail0: " + constructorProperty.getGenericType(); | |
| val classField = clz.getDeclaredField("classField1"); | |
| if (classField.getGenericType().toString() != "test.Z<T>") | |
| return "fail1: " + classField.getGenericType(); | |
| val classField2 = clz.getDeclaredField("classField2"); | |
| if (classField2.getGenericType().toString() != "test.Z<java.lang.String>") | |
| return "fail2: " + classField2.getGenericType(); | |
| val classField3 = clz.getDeclaredField("classField3"); | |
| if (classField3.getGenericType().toString() != "test.Zout<java.lang.String>") | |
| return "fail3: " + classField3.getGenericType(); | |
| val classField4 = clz.getDeclaredField("classField4"); | |
| if (classField4.getGenericType().toString() != "test.Zin<test.TParam>") | |
| return "fail4: " + classField4.getGenericType(); | |
| val classField5 = clz.getDeclaredField("delegateLazy\$delegate"); | |
| if (classField5.getGenericType().toString() != "interface kotlin.Lazy") | |
| return "fail5: " + classField5.getGenericType(); | |
| val classField6 = clz.getDeclaredField("delegateNotNull\$delegate"); | |
| if (classField6.getGenericType().toString() != "interface kotlin.properties.ReadWriteProperty") | |
| return "fail6: " + classField6.getGenericType(); | |
| return "OK" | |
| } |