| // TARGET_BACKEND: JVM | |
| // WITH_STDLIB | |
| package test | |
| import kotlin.test.assertEquals | |
| abstract class A<R> { | |
| abstract fun f(): String | |
| override fun toString() = f() | |
| } | |
| abstract class G { | |
| abstract fun bar(): Any | |
| } | |
| inline fun<reified T> baz(): G { | |
| return object : G() { | |
| override fun bar(): Any { | |
| return object : A<T>() { | |
| override fun f(): String = "OK" | |
| } | |
| } | |
| } | |
| } | |
| inline fun<T1, T2, T3, T4, T5, T6, reified R1, reified R2> foo(): Pair<G, G> { | |
| return Pair(baz<R1>(), baz<R2>()) | |
| } | |
| fun box(): String { | |
| val res = foo<Int, Int, Int, Int, Int, Int, Int, String>(); | |
| val x1 = res.first.bar() | |
| val x2 = res.second.bar() | |
| assertEquals("OK", x1.toString()) | |
| assertEquals("OK", x2.toString()) | |
| assertEquals("test.A<java.lang.Integer>", x1.javaClass.getGenericSuperclass()?.toString()) | |
| assertEquals("test.A<java.lang.String>", x2.javaClass.getGenericSuperclass()?.toString()) | |
| return "OK" | |
| } |