Prohibit Array::class, require type arguments for reified parameters

This commit is contained in:
Alexander Udalov
2015-04-08 16:35:39 +03:00
parent a0d2b00287
commit 6182b3ff5c
17 changed files with 137 additions and 39 deletions
@@ -0,0 +1,6 @@
val Array<String>.firstElement: String get() = get(0)
fun box(): String {
val p = Array<String>::firstElement
return p.get(array("OK", "Fail"))
}
@@ -0,0 +1,12 @@
import kotlin.test.*
import kotlin.reflect.jvm.*
fun box(): String {
val any = Array<Any>::class
val string = Array<String>::class
assertNotEquals(any, string)
assertNotEquals(any.java, string.java)
return "OK"
}
@@ -8,6 +8,9 @@ fun box(): String {
assertEquals("Int", Int::class.simpleName)
assertEquals("Long", Long::class.simpleName)
assertEquals("Array", Array<Any>::class.simpleName)
assertEquals("Array", Array<IntArray>::class.simpleName)
assertEquals("Companion", Int.Companion::class.simpleName)
assertEquals("Companion", Double.Companion::class.simpleName)
assertEquals("Companion", Char.Companion::class.simpleName)
@@ -15,11 +15,13 @@ fun box(): String {
assertEquals("class kotlin.Int", "${Int::class}")
assertEquals("class kotlin.Int\$Companion", "${Int.Companion::class}")
assertEquals("class kotlin.IntArray", "${IntArray::class}")
// TODO
// assertEquals("class kotlin.Array", "${Array<Any>::class}")
assertEquals("class kotlin.String", "${String::class}")
assertEquals("class kotlin.String", "${java.lang.String::class}")
assertEquals("class kotlin.Array", "${Array<Any>::class}")
assertEquals("class kotlin.Array", "${Array<Int>::class}")
assertEquals("class kotlin.Array", "${Array<Array<String>>::class}")
assertEquals("class java.lang.Runnable", "${Runnable::class}")
return "OK"
@@ -0,0 +1,5 @@
val a01 = <!ARRAY_CLASS_LITERAL_REQUIRES_ARGUMENT!>Array::class<!>
val a02 = Array<<!WRONG_NUMBER_OF_TYPE_ARGUMENTS!>Array<!>>::class
val a03 = Array<Any?>::class
val a04 = Array<Array<Any?>?>::class
val a05 = Array<IntArray?>::class
@@ -0,0 +1,7 @@
package
internal val a01: [ERROR : Unresolved class]
internal val a02: kotlin.reflect.KClass<kotlin.Array<[ERROR : Array]>>
internal val a03: kotlin.reflect.KClass<kotlin.Array<kotlin.Any?>>
internal val a04: kotlin.reflect.KClass<kotlin.Array<kotlin.Array<kotlin.Any?>?>>
internal val a05: kotlin.reflect.KClass<kotlin.Array<kotlin.IntArray?>>
@@ -12,3 +12,5 @@ fun foo<T : Any>() {
val t1 = <!CLASS_LITERAL_LHS_NOT_A_CLASS!>T::class<!>
val t2 = <!CLASS_LITERAL_LHS_NOT_A_CLASS!>T?::class<!>
}
val m = <!CLASS_LITERAL_LHS_NOT_A_CLASS!>Map<!WRONG_NUMBER_OF_TYPE_ARGUMENTS!><String><!>::class<!>
@@ -4,6 +4,7 @@ internal val a1: [ERROR : Unresolved class]
internal val a2: [ERROR : Unresolved class]
internal val l1: [ERROR : Unresolved class]
internal val l2: [ERROR : Unresolved class]
internal val m: [ERROR : Unresolved class]
internal fun </*0*/ T : kotlin.Any> foo(): kotlin.Unit
internal final class A {