KT-12417: add support of RTTI against K(Mutable)Property* types

This commit is contained in:
Alexey Andreev
2016-06-14 16:38:17 +03:00
parent 048b6b60e9
commit 2e6a48576d
13 changed files with 256 additions and 36 deletions
@@ -0,0 +1,21 @@
package foo
import kotlin.reflect.KProperty1
import kotlin.reflect.KMutableProperty1
class A
var A.x: Int
get() = 23
set(value) { }
fun box(): String {
assertEquals(true, (A::x as Any) is KProperty1<*, *>)
assertEquals(true, (A::x as Any) is KMutableProperty1<*, *>)
assertEquals(23, ((A::x as Any) as KProperty1<A, Any>)(A()))
assertEquals(23, ((A::x as Any) as KMutableProperty1<A, Any>)(A()))
assertEquals(false, (23 as Any) is KMutableProperty1<*, *>)
assertEquals(false, ({ A().x } as Any) is KMutableProperty1<*, *>)
return "OK"
}
@@ -0,0 +1,17 @@
package foo
import kotlin.reflect.KProperty1
class A
val A.x: Int
get() = 23
fun box(): String {
assertEquals(true, (A::x as Any) is KProperty1<*, *>)
assertEquals(23, ((A::x as Any) as KProperty1<A, Any>)(A()))
assertEquals(false, (23 as Any) is KProperty1<*, *>)
assertEquals(false, ({ A().x } as Any) is KProperty1<*, *>)
return "OK"
}
@@ -0,0 +1,17 @@
package foo
import kotlin.reflect.KProperty0
import kotlin.reflect.KMutableProperty0
var x = 23
fun box(): String {
assertEquals(true, (::x as Any) is KProperty0<*>)
assertEquals(true, (::x as Any) is KMutableProperty0<*>)
assertEquals(23, ((::x as Any) as KProperty0<Any>)())
assertEquals(23, ((::x as Any) as KMutableProperty0<Any>)())
assertEquals(false, (23 as Any) is KMutableProperty0<*>)
assertEquals(false, ({ x } as Any) is KMutableProperty0<*>)
return "OK"
}
@@ -0,0 +1,20 @@
package foo
import kotlin.reflect.KProperty1
import kotlin.reflect.KMutableProperty1
class A {
var x = 23
}
fun box(): String {
assertEquals(true, (A::x as Any) is KProperty1<*, *>)
assertEquals(true, (A::x as Any) is KMutableProperty1<*, *>)
assertEquals(23, ((A::x as Any) as KProperty1<A, Any>)(A()))
assertEquals(23, ((A::x as Any) as KMutableProperty1<A, Any>)(A()))
assertEquals(false, (23 as Any) is KProperty1<*, *>)
assertEquals(false, (23 as Any) is KMutableProperty1<*, *>)
assertEquals(false, ({ A().x } as Any) is KMutableProperty1<*, *>)
return "OK"
}
@@ -0,0 +1,14 @@
package foo
import kotlin.reflect.KProperty0
val x = 23
fun box(): String {
assertEquals(true, (::x as Any) is KProperty0<*>)
assertEquals(23, ((::x as Any) as KProperty0<Any>)())
assertEquals(false, (23 as Any) is KProperty0<*>)
assertEquals(false, ({ x } as Any) is KProperty0<*>)
return "OK"
}
@@ -0,0 +1,16 @@
package foo
import kotlin.reflect.KProperty1
class A {
val x = 23
}
fun box(): String {
assertEquals(true, (A::x as Any) is KProperty1<*, *>)
assertEquals(23, ((A::x as Any) as KProperty1<A, Any>)(A()))
assertEquals(false, (23 as Any) is KProperty1<*, *>)
assertEquals(false, ({ A().x } as Any) is KProperty1<*, *>)
return "OK"
}
@@ -0,0 +1,19 @@
package foo
interface A
class B
fun box(): String {
assertEquals(false, (23 as Any) is A)
assertEquals(false, (23 as Any) is B)
assertEquals(false, (23L as Any) is A)
assertEquals(false, (23L as Any) is B)
assertEquals(false, ("qwe" as Any) is A)
assertEquals(false, ("qwe" as Any) is B)
assertEquals(false, ({ 23 } as Any) is A)
assertEquals(false, ({ 23 } as Any) is B)
assertEquals(false, (true as Any) is A)
assertEquals(false, (true as Any) is B)
return "OK"
}