KT-22063 Add intrinsics for javaObjectType and javaPrimitiveType

Fix of https://youtrack.jetbrains.com/issue/KT-22063
This commit is contained in:
Mikaël Peltier
2018-03-19 10:47:12 +01:00
committed by Alexander Udalov
parent d79a4fd9a0
commit 3a50d0d78f
13 changed files with 527 additions and 0 deletions
@@ -0,0 +1,69 @@
// WITH_RUNTIME
class A {
}
fun m() {
}
fun getJavaObjectType1():Class<*> {
// LDC Ljava/lang/Integer;.class
return Int::class.javaObjectType
}
fun getJavaObjectType2():Class<*> {
// LDC Ljava/lang/Integer;.class
return Integer::class.javaObjectType
}
fun getJavaObjectType3():Class<*> {
// LDC Ljava/lang/Void;.class
return Void::class.javaObjectType
}
fun getJavaObjectType4():Class<*> {
// LDC Ljava/lang/Boolean;.class
return Boolean::class.javaObjectType
}
fun getJavaObjectType5():Class<*>? {
// LDC LA;.class
return A::class.javaObjectType
}
inline fun <reified T : Any> getJavaObjectType6(): Class<*> {
// INVOKESTATIC kotlin/jvm/internal/Intrinsics.reifiedOperationMarker
// LDC Ljava/lang/Object;.class
return T::class.javaObjectType
}
fun getJavaObjectType7():Class<*> {
// INVOKEVIRTUAL java/lang/Object.getClass
return A()::class.javaObjectType
}
fun getJavaObjectType8():Class<*> {
val i: Int? = 1
// LDC Ljava/lang/Integer;.class
return i!!::class.javaObjectType
}
fun getJavaObjectType9():Class<*> {
val i: Int = 1
// LDC Ljava/lang/Integer;.class
return i::class.javaObjectType
}
fun getJavaObjectType10():Class<*> {
// GETSTATIC kotlin/Unit.INSTANCE
// INVOKEVIRTUAL java/lang/Object.getClass
return m()::class.javaObjectType
}
// 4 LDC Ljava/lang/Integer;.class
// 1 LDC Ljava/lang/Object;.class
// 1 LDC Ljava/lang/Void;.class
// 1 LDC Ljava/lang/Boolean;.class
// 1 INVOKESTATIC kotlin/jvm/internal/Intrinsics.reifiedOperationMarker
// 0 INVOKESTATIC kotlin/jvm/internal/Reflection.getOrCreateKotlinClass
// 0 INVOKESTATIC kotlin/jvm/JvmClassMappingKt.getJavaObjectType
@@ -0,0 +1,77 @@
// WITH_RUNTIME
class A {
}
fun m() {
}
fun getJavaPrimitiveType1():Class<*>? {
// GETSTATIC java/lang/Integer.TYPE
return Int::class.javaPrimitiveType
}
fun getJavaPrimitiveType2():Class<*>? {
// GETSTATIC java/lang/Integer.TYPE
return Integer::class.javaPrimitiveType
}
fun getJavaPrimitiveType3():Class<*>? {
// GETSTATIC java/lang/Void.TYPE
return Void::class.javaPrimitiveType
}
fun getJavaPrimitiveType4():Class<*>? {
// GETSTATIC java/lang/Boolean.TYPE
return Boolean::class.javaPrimitiveType
}
fun getJavaPrimitiveType5():Class<*>? {
// ACONST_NULL
return A::class.javaPrimitiveType
}
inline fun <reified T : Any> getJavaPrimitiveType6():Class<*>? {
// INVOKESTATIC kotlin/jvm/internal/Intrinsics.reifiedOperationMarker
// LDC Ljava/lang/Object;.class
// INVOKESTATIC kotlin/jvm/internal/Reflection.getOrCreateKotlinClass
// INVOKESTATIC kotlin/jvm/JvmClassMappingKt.getJavaPrimitiveType
return T::class.javaPrimitiveType
}
fun getJavaPrimitiveType7():Class<*>? {
// INVOKEVIRTUAL java/lang/Object.getClass
// INVOKESTATIC kotlin/jvm/internal/Reflection.getOrCreateKotlinClass
// INVOKESTATIC kotlin/jvm/JvmClassMappingKt.getJavaPrimitiveType
return A()::class.javaPrimitiveType
}
fun getJavaPrimitiveType8():Class<*>? {
val i:Int? = 1
// GETSTATIC java/lang/Integer.TYPE
return i!!::class.javaPrimitiveType
}
fun getJavaPrimitiveType9():Class<*>? {
val i:Int = 1
// GETSTATIC java/lang/Integer.TYPE
return i::class.javaPrimitiveType
}
fun getJavaPrimitiveType10():Class<*>? {
// INVOKEVIRTUAL java/lang/Object.getClass
// INVOKESTATIC kotlin/jvm/internal/Reflection.getOrCreateKotlinClass
// INVOKESTATIC kotlin/jvm/JvmClassMappingKt.getJavaPrimitiveType
return m()::class.javaPrimitiveType
}
// 1 ACONST_NULL
// 4 GETSTATIC java/lang/Integer.TYPE
// 1 GETSTATIC java/lang/Void.TYPE
// 1 GETSTATIC java/lang/Boolean.TYPE
// 1 LDC Ljava/lang/Object;.class
// 1 INVOKESTATIC kotlin/jvm/internal/Intrinsics.reifiedOperationMarker
// 2 INVOKEVIRTUAL java/lang/Object.getClass
// 3 INVOKESTATIC kotlin/jvm/internal/Reflection.getOrCreateKotlinClass
// 3 INVOKESTATIC kotlin/jvm/JvmClassMappingKt.getJavaPrimitiveType