KT-8408 Prohibit Array<T>::class for non-reified T
This commit is contained in:
committed by
Alexander Udalov
parent
a0cc313156
commit
9bf0211152
+28
@@ -0,0 +1,28 @@
|
||||
import kotlin.test.*
|
||||
import kotlin.reflect.*
|
||||
import kotlin.reflect.jvm.*
|
||||
|
||||
class Klass
|
||||
|
||||
inline fun <reified T> arrayClass(): KClass<Array<T>> = Array<T>::class
|
||||
|
||||
fun box(): String {
|
||||
assertEquals("Array", arrayClass<Int>().simpleName)
|
||||
assertEquals("Array", arrayClass<Int?>().simpleName)
|
||||
assertEquals("Array", arrayClass<Array<Int>>().simpleName)
|
||||
assertEquals("Array", arrayClass<Klass>().simpleName)
|
||||
assertEquals("Array", arrayClass<Klass?>().simpleName)
|
||||
assertEquals("Array", arrayClass<Array<Klass>>().simpleName)
|
||||
assertEquals("Array", arrayClass<Array<Klass?>>().simpleName)
|
||||
|
||||
// Should not be that way. Fix this test when backend is fixed.
|
||||
assertEquals("[Ljava.lang.Object;", arrayClass<Int>().jvmName)
|
||||
assertEquals("[Ljava.lang.Object;", arrayClass<Int?>().jvmName)
|
||||
assertEquals("[Ljava.lang.Object;", arrayClass<Array<Int>>().jvmName)
|
||||
assertEquals("[Ljava.lang.Object;", arrayClass<Klass>().jvmName)
|
||||
assertEquals("[Ljava.lang.Object;", arrayClass<Klass?>().jvmName)
|
||||
assertEquals("[Ljava.lang.Object;", arrayClass<Array<Klass>>().jvmName)
|
||||
assertEquals("[Ljava.lang.Object;", arrayClass<Array<Klass?>>().jvmName)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
fun f1<T>(): KClass<Array<T>> = <!CLASS_LITERAL_LHS_NOT_A_CLASS!>Array<T>::class<!>
|
||||
fun f2<T>(): KClass<Array<Array<T>>> = <!CLASS_LITERAL_LHS_NOT_A_CLASS!>Array<Array<T>>::class<!>
|
||||
inline fun f3<reified T>() = Array<T>::class
|
||||
inline fun f4<reified T>() = Array<Array<T>>::class
|
||||
fun f5(): KClass<Array<Any>> = <!CLASS_LITERAL_LHS_NOT_A_CLASS!>Array<*>::class<!>
|
||||
fun f6(): KClass<Array<Int?>> = Array<Int?>::class
|
||||
@@ -0,0 +1,8 @@
|
||||
package
|
||||
|
||||
internal fun </*0*/ T> f1(): kotlin.reflect.KClass<kotlin.Array<T>>
|
||||
internal fun </*0*/ T> f2(): kotlin.reflect.KClass<kotlin.Array<kotlin.Array<T>>>
|
||||
kotlin.inline() internal fun </*0*/ reified T> f3(): kotlin.reflect.KClass<kotlin.Array<T>>
|
||||
kotlin.inline() internal fun </*0*/ reified T> f4(): kotlin.reflect.KClass<kotlin.Array<kotlin.Array<T>>>
|
||||
internal fun f5(): kotlin.reflect.KClass<kotlin.Array<kotlin.Any>>
|
||||
internal fun f6(): kotlin.reflect.KClass<kotlin.Array<kotlin.Int?>>
|
||||
Reference in New Issue
Block a user