| // TARGET_BACKEND: JVM |
| |
| // WITH_STDLIB |
| |
| package test |
| |
| import kotlin.test.assertEquals |
| |
| open class A<T1, T2, T3> |
| |
| inline fun <reified T, reified R> foo(): Array<A<*,*,*>> { |
| val x = object { |
| inline fun <reified T1, reified T> bar(): A<*,*,*> = object : A<T1,T,R>() {} |
| fun f1() = bar<T, R>() |
| fun f2() = bar<R, T>() |
| fun f3() = bar<Boolean, T>() |
| fun f4() = bar<T, Boolean>() |
| } |
| |
| return arrayOf(x.f1(), x.f2(), x.f3(), x.f4()) |
| } |
| |
| fun box(): String { |
| val result = foo<Double, Int>() |
| |
| val expected = arrayOf( |
| Triple("java.lang.Double", "java.lang.Integer", "java.lang.Integer"), |
| Triple("java.lang.Integer", "java.lang.Double", "java.lang.Integer"), |
| Triple("java.lang.Boolean", "java.lang.Double", "java.lang.Integer"), |
| Triple("java.lang.Double", "java.lang.Boolean", "java.lang.Integer") |
| ).map { "test.A<${it.first}, ${it.second}, ${it.third}>" } |
| |
| for (i in expected.indices) { |
| assertEquals(expected[i], result[i].javaClass.getGenericSuperclass()?.toString(), "$i-th element") |
| } |
| |
| return "OK" |
| } |