| // TARGET_BACKEND: JVM |
| // WITH_STDLIB |
| |
| import kotlin.test.assertEquals |
| |
| fun foo(block: () -> String) = block() |
| |
| inline fun <reified T : Any> className(): String = T::class.java.getName() |
| |
| inline fun <reified T : Any> lambdaShouldBeReified(): String = foo { className<T>() } |
| |
| interface A { |
| fun f(): String |
| fun g(): String |
| } |
| inline fun<reified T1 : Any, reified T2 : Any> AFactory(): A = object : A { |
| override fun f(): String = className<T1>() |
| override fun g(): String = foo { className<T2>() } |
| } |
| |
| fun box(): String { |
| assertEquals("java.lang.String", lambdaShouldBeReified<String>()) |
| assertEquals("java.lang.Integer", lambdaShouldBeReified<Int>()) |
| |
| val x: A = AFactory<String, Int>() |
| |
| assertEquals("java.lang.String", x.f()) |
| assertEquals("java.lang.Integer", x.g()) |
| |
| return "OK" |
| } |