Files
kotlin-fork/compiler/testData/codegen/box/reified/reifiedInlineFunOfObjectWithinReified.kt
T
vladislav.grechko cfcdc6f0ae [JVM_IR] Box primitive types in class literals of reified type arguments
Bytecode inliner boxes primitive types in class literals of reified type
arguments. This is by design, and we should backport this behaviour to
IR inliner.

^KT-60144: Fixed
2023-08-02 10:48:22 +00:00

32 lines
819 B
Kotlin
Vendored

// 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"
}