// TARGET_BACKEND: JVM // WITH_RUNTIME import kotlin.test.assertEquals interface A { fun f1(): String fun f2(): String fun f3(): String } fun doWork(block: () -> String) = block() inline fun doWorkInline(block: () -> String) = block() fun box(): String { val x = object { inline fun bar1(): A = object : A { override fun f1(): String = T::class.java.getName() override fun f2(): String = doWork { T::class.java.getName() } override fun f3(): String = doWorkInline { T::class.java.getName() } } inline fun bar2() = T::class.java.getName() inline fun bar3() = doWork { T::class.java.getName() } inline fun bar4() = doWorkInline { T::class.java.getName() } } val y: A = x.bar1() assertEquals("java.lang.String", y.f1()) assertEquals("java.lang.String", y.f2()) assertEquals("java.lang.String", y.f3()) assertEquals("java.lang.Integer", x.bar2()) assertEquals("java.lang.Double", x.bar3()) assertEquals("java.lang.Long", x.bar4()) return "OK" }