// WITH_REFLECT // FULL_JDK // TARGET_BACKEND: JVM // FILE: 1.kt package test import java.lang.reflect.ParameterizedType import java.lang.reflect.Type open class TypeLiteral { val type: Type get() = (javaClass.genericSuperclass as ParameterizedType).getActualTypeArguments()[0] } // normal inline function works fine inline fun typeLiteral(): TypeLiteral = object : TypeLiteral() {} // nested lambda loses reification of T inline fun brokenTypeLiteral(): TypeLiteral = "".run { typeLiteral() } // FILE: 2.kt import test.* fun box(): String { val type1 = typeLiteral>().type.toString() if (type1 != "java.util.List") return "fail 1: $type1" val type2 = brokenTypeLiteral>().type.toString() if (type2 != "java.util.List") return "fail 2: $type2" return "OK" }