Support reification of arrays containing reified parameters
#KT-10555 Fixed
This commit is contained in:
+22
@@ -0,0 +1,22 @@
|
||||
inline fun <reified T> foo(x: Any?) = Pair(x is T, x is T?)
|
||||
|
||||
fun box(): String {
|
||||
val x1 = foo<Array<String>>(arrayOf(""))
|
||||
if (x1.toString() != "(true, true)") return "fail 1"
|
||||
|
||||
val x2 = foo<Array<String>?>(arrayOf(""))
|
||||
if (x2.toString() != "(true, true)") return "fail 2"
|
||||
|
||||
val x3 = foo<Array<String>>(null)
|
||||
if (x3.toString() != "(false, true)") return "fail 3"
|
||||
|
||||
val x4 = foo<Array<String>?>(null)
|
||||
if (x4.toString() != "(true, true)") return "fail 4"
|
||||
|
||||
val x5 = foo<Array<Double>?>(arrayOf(""))
|
||||
if (x5.toString() != "(false, false)") return "fail 5"
|
||||
|
||||
val x6 = foo<Array<Double>?>(null)
|
||||
if (x6.toString() != "(true, true)") return "fail 6"
|
||||
return "OK"
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
inline fun <reified T> foo(x: Any?) = Pair(x is T, x is T?)
|
||||
inline fun <reified F> bar(y: Any?) = foo<Array<F>>(y)
|
||||
inline fun <reified F> barNullable(y: Any?) = foo<Array<F>?>(y)
|
||||
|
||||
fun box(): String {
|
||||
val x1 = bar<String>(arrayOf(""))
|
||||
if (x1.toString() != "(true, true)") return "fail 1"
|
||||
|
||||
val x3 = bar<String>(null)
|
||||
if (x3.toString() != "(false, true)") return "fail 3"
|
||||
|
||||
val x4 = bar<String?>(null)
|
||||
if (x4.toString() != "(false, true)") return "fail 4"
|
||||
|
||||
val x5 = bar<Double?>(arrayOf(""))
|
||||
if (x5.toString() != "(false, false)") return "fail 5"
|
||||
|
||||
val x6 = bar<Double?>(null)
|
||||
if (x6.toString() != "(false, true)") return "fail 6"
|
||||
|
||||
// barNullable
|
||||
|
||||
val x7 = barNullable<String>(arrayOf(""))
|
||||
if (x7.toString() != "(true, true)") return "fail 7"
|
||||
|
||||
val x9 = barNullable<String>(null)
|
||||
if (x9.toString() != "(true, true)") return "fail 9"
|
||||
|
||||
val x10 = barNullable<Double?>(arrayOf(""))
|
||||
if (x10.toString() != "(false, false)") return "fail 11"
|
||||
|
||||
val x12 = barNullable<Double?>(null)
|
||||
if (x12.toString() != "(true, true)") return "fail 12"
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
inline fun <reified T : Any> jClass() = T::class.java
|
||||
inline fun <reified T : Any> jClassArray() = jClass<Array<T>>()
|
||||
|
||||
fun box(): String {
|
||||
if (jClass<Array<String>>().simpleName != "String[]") return "fail 1"
|
||||
if (jClass<IntArray>().simpleName != "int[]") return "fail 2"
|
||||
|
||||
if (jClassArray<String>().simpleName != "String[]") return "fail 3"
|
||||
if (jClassArray<Array<String>>().simpleName != "String[][]") return "fail 4"
|
||||
if (jClassArray<IntArray>().simpleName != "int[][]") return "fail 5"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
inline fun <reified T> jaggedArray(x: (Int, Int) -> T): Array<Array<T>> = Array(1) { i ->
|
||||
Array(1) { j -> x(i, j) }
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val x1: Array<Array<String>> = jaggedArray<String>() { x, y -> "$x-$y" }
|
||||
if (x1[0][0] != "0-0") return "fail 1"
|
||||
|
||||
val x2: Array<Array<Array<String>>> = jaggedArray() { x, y -> arrayOf("$x-$y") }
|
||||
if (x2[0][0][0] != "0-0") return "fail 2"
|
||||
|
||||
val x3: Array<Array<IntArray>> = jaggedArray() { x, y -> intArrayOf(x + y + 1) }
|
||||
if (x3[0][0][0] != 1) return "fail 3"
|
||||
return "OK"
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
inline fun <reified T> jaggedArrayOfNulls(): Array<Array<T>?> = arrayOfNulls<Array<T>>(1)
|
||||
|
||||
fun box(): String {
|
||||
val x1 = jaggedArrayOfNulls<String>().javaClass.simpleName
|
||||
if (x1 != "String[][]") return "fail1: $x1"
|
||||
|
||||
val x2 = jaggedArrayOfNulls<Array<String>>().javaClass.simpleName
|
||||
if (x2 != "String[][][]") return "fail2: $x2"
|
||||
|
||||
val x3 = jaggedArrayOfNulls<IntArray>().javaClass.simpleName
|
||||
if (x3 != "int[][][]") return "fail3: $x3"
|
||||
return "OK"
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
inline fun <reified T> jaggedArray(x: (Int, Int, Int) -> T): Array<Array<Array<T>>> = Array(1) { i ->
|
||||
Array(1) {
|
||||
j -> Array(1) { k -> x(i, j, k) }
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val x1: Array<Array<Array<String>>> = jaggedArray<String>() { x, y, z -> "$x-$y-$z" }
|
||||
if (x1[0][0][0] != "0-0-0") return "fail 1"
|
||||
|
||||
val x2: Array<Array<Array<Array<String>>>> = jaggedArray() { x, y, z -> arrayOf("$x-$y-$z") }
|
||||
if (x2[0][0][0][0] != "0-0-0") return "fail 2"
|
||||
|
||||
val x3: Array<Array<Array<IntArray>>> = jaggedArray() { x, y, z -> intArrayOf(x + y + z + 1) }
|
||||
if (x3[0][0][0][0] != 1) return "fail 3"
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user