// TARGET_BACKEND: JVM // WITH_REFLECT //test for KT-3722 Write correct generic type information for generated fields package test import kotlin.properties.Delegates class Z { } class TParam { } class Zout { } class Zin { } class Test(val constructorProperty: T) { val classField1 : Z? = null val classField2 : Z? = null val classField3 : Zout? = null val classField4 : Zin? = null val delegateLazy: Z? by lazy {Z()} val delegateNotNull: Z? 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") return "fail1: " + classField.getGenericType(); val classField2 = clz.getDeclaredField("classField2"); if (classField2.getGenericType().toString() != "test.Z") return "fail2: " + classField2.getGenericType(); val classField3 = clz.getDeclaredField("classField3"); if (classField3.getGenericType().toString() != "test.Zout") return "fail3: " + classField3.getGenericType(); val classField4 = clz.getDeclaredField("classField4"); if (classField4.getGenericType().toString() != "test.Zin") 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" }