Support KClass.simpleName in stdlib-only reflection implementation

#KT-33646 Fixed
This commit is contained in:
Alexander Udalov
2019-10-24 18:33:46 +02:00
parent e146d308db
commit c164745301
15 changed files with 138 additions and 77 deletions
@@ -1,8 +1,5 @@
// IGNORE_BACKEND: JS_IR
// TODO: muted automatically, investigate should it be ran for JS or not
// IGNORE_BACKEND: JS, NATIVE
// WITH_REFLECT
// TARGET_BACKEND: JVM
// WITH_RUNTIME
import kotlin.test.assertEquals
@@ -16,6 +13,10 @@ fun box(): String {
assertEquals("Array", Array<Any>::class.simpleName)
assertEquals("Array", Array<IntArray>::class.simpleName)
assertEquals("Array", Array<Array<String>>::class.simpleName)
assertEquals("IntArray", IntArray::class.simpleName)
assertEquals("DoubleArray", DoubleArray::class.simpleName)
assertEquals("Companion", Int.Companion::class.simpleName)
assertEquals("Companion", Double.Companion::class.simpleName)
@@ -24,9 +25,16 @@ fun box(): String {
assertEquals("IntRange", IntRange::class.simpleName)
assertEquals("List", List::class.simpleName)
assertEquals("Entry", Map.Entry::class.simpleName)
// TODO: this is wrong but should be fixed
// TODO: KT-11754
assertEquals("List", MutableList::class.simpleName)
assertEquals("Entry", MutableMap.MutableEntry::class.simpleName)
assertEquals("Function0", Function0::class.simpleName)
assertEquals("Function1", Function1::class.simpleName)
assertEquals("Function5", Function5::class.simpleName)
assertEquals("FunctionN", Function42::class.simpleName)
return "OK"
}
@@ -1,6 +1,5 @@
// TARGET_BACKEND: JVM
// WITH_REFLECT
// WITH_RUNTIME
import kotlin.test.assertEquals
@@ -10,7 +9,6 @@ fun box(): String {
assertEquals("Klass", Klass::class.simpleName)
assertEquals("Date", java.util.Date::class.simpleName)
assertEquals("ObjectRef", kotlin.jvm.internal.Ref.ObjectRef::class.simpleName)
assertEquals("Void", java.lang.Void::class.simpleName)
return "OK"
}
@@ -13,5 +13,7 @@ fun box(): String {
assertEquals(Void.TYPE, Void.TYPE.kotlin.javaPrimitiveType)
assertEquals(Void::class.java, Void.TYPE.kotlin.javaObjectType)
assertEquals("Void", Void::class.simpleName)
return "OK"
}
@@ -1,6 +1,6 @@
// IGNORE_BACKEND: JVM_IR
// IGNORE_BACKEND: NATIVE
// WITH_REFLECT
// WITH_RUNTIME
import kotlin.reflect.KClass
import kotlin.test.assertEquals
@@ -15,11 +15,11 @@ fun box(): String {
assertEquals("Klass", jClass.getSimpleName())
assertEquals("Klass", kjClass.getSimpleName())
assertEquals("Klass", kkClass.java.simpleName)
assertEquals("Klass", kClass.simpleName)
assertEquals(kjClass, jjClass)
try { kClass.simpleName; return "Fail 1" } catch (e: Error) {}
try { kClass.qualifiedName; return "Fail 2" } catch (e: Error) {}
try { kClass.members; return "Fail 3" } catch (e: Error) {}
try { kClass.qualifiedName; return "Fail qualifiedName" } catch (e: Error) {}
try { kClass.members; return "Fail members" } catch (e: Error) {}
val jlError = Error::class.java
val kljError = Error::class
@@ -29,6 +29,7 @@ fun box(): String {
assertEquals("Error", jlError.getSimpleName())
assertEquals("Error", jljError.getSimpleName())
assertEquals("Error", jlkError.java.simpleName)
assertEquals("Error", kljError.simpleName)
return "OK"
}
@@ -13,5 +13,7 @@ fun box(): String {
assertEquals(Void.TYPE, Void.TYPE.kotlin.javaPrimitiveType)
assertEquals(Void::class.java, Void.TYPE.kotlin.javaObjectType)
assertEquals("Void", Void::class.simpleName)
return "OK"
}