Support class reference expression for reified type parameters

Also make KClass::java an intrinsic property.

Based on the work by @dnpetrov

 #KT-6976 Fixed
This commit is contained in:
Alexander Udalov
2015-07-29 23:43:11 +03:00
parent 628bb774fd
commit a0cc313156
13 changed files with 283 additions and 41 deletions
@@ -0,0 +1,29 @@
import kotlin.test.*
import kotlin.reflect.jvm.java
class Klass
class Other
inline fun <reified T> simpleName(): String =
T::class.simpleName!!
inline fun <reified T1, reified T2> twoReifiedParams(): String =
"${T1::class.simpleName!!}, ${T2::class.simpleName!!}"
inline fun <reified T> myJavaClass(): Class<T> =
T::class.java
fun box(): String {
assertEquals("Klass", simpleName<Klass>())
assertEquals("Int", simpleName<Int>())
assertEquals("Array", simpleName<Array<Int>>())
assertEquals("Error", simpleName<Error>())
assertEquals("Klass, Other", twoReifiedParams<Klass, Other>())
assertEquals(javaClass<String>(), myJavaClass<String>())
assertEquals(javaClass<IntArray>(), myJavaClass<IntArray>())
assertEquals(javaClass<Klass>(), myJavaClass<Klass>())
assertEquals(javaClass<Error>(), myJavaClass<Error>())
return "OK"
}