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:
Vendored
+29
@@ -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"
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
import kotlin.reflect.jvm.java
|
||||
|
||||
class Klass
|
||||
|
||||
fun foo() {
|
||||
val c0 = (Klass::class).java // prevent intrinsic .java for class literal
|
||||
val c1 = Klass::class.java
|
||||
val c2 = Int::class.java
|
||||
val c3 = Integer::class.java
|
||||
|
||||
}
|
||||
|
||||
// 2 LDC LKlass;.class
|
||||
// 1 GETSTATIC java/lang/Integer.TYPE : Ljava/lang/Class;
|
||||
// 1 INVOKESTATIC kotlin/reflect/jvm.*\.getJava
|
||||
// 1 LDC Ljava/lang/Integer;.class
|
||||
Reference in New Issue
Block a user