| // TARGET_BACKEND: JVM |
| // WITH_STDLIB |
| |
| import kotlin.test.assertEquals |
| |
| inline fun <reified T : Any, reified R : Any> foo(): Array<String> { |
| val x = object { |
| inline fun <reified T1 : Any, reified T : Any> bar(): Array<String> = arrayOf( |
| T1::class.java.getName(), T::class.java.getName(), R::class.java.getName() |
| ) |
| fun f1() = bar<T, R>() |
| fun f2() = bar<R, T>() |
| fun f3() = bar<Boolean, T>() |
| fun f4() = bar<T, Boolean>() |
| } |
| |
| val x1 = x.f1() |
| val x2 = x.f2() |
| val x3 = x.f3() |
| val x4 = x.f4() |
| |
| return arrayOf( |
| x1[0], x1[1], x1[2], |
| x2[0], x2[1], x2[2], |
| x3[0], x3[1], x3[2], |
| x4[0], x4[1], x4[2] |
| ) |
| } |
| |
| fun box(): String { |
| val result = foo<Double, Int>() |
| |
| val expected = arrayOf( |
| "java.lang.Double", "java.lang.Integer", "java.lang.Integer", |
| "java.lang.Integer", "java.lang.Double", "java.lang.Integer", |
| "java.lang.Boolean", "java.lang.Double", "java.lang.Integer", |
| "java.lang.Double", "java.lang.Boolean", "java.lang.Integer" |
| ) |
| |
| for (i in expected.indices) { |
| assertEquals(expected[i], result[i], "$i-th element") |
| } |
| |
| return "OK" |
| } |