Fix KClassImpl#toString to render Kotlin FQ name, not JVM one

This commit is contained in:
Alexander Udalov
2015-04-01 23:16:24 +03:00
parent 137ee53e85
commit 87ef4ff7c5
2 changed files with 26 additions and 8 deletions
@@ -1,14 +1,26 @@
import kotlin.test.*
import kotlin.reflect.jvm.kotlin
class A
class A {
class Nested
companion object
}
fun box(): String {
val p = javaClass<A>().kotlin
if ("$p" != "class A") return "Fail: $p"
assertEquals("class A", "${A::class}")
assertEquals("class A\$Nested", "${A.Nested::class}")
assertEquals("class A\$Companion", "${A.Companion::class}")
val s = javaClass<String>().kotlin
if ("$s" != "class java.lang.String") return "Fail: $s"
assertEquals("class kotlin.Any", "${Any::class}")
assertEquals("class kotlin.Int", "${Int::class}")
assertEquals("class kotlin.Int\$Companion", "${Int.Companion::class}")
assertEquals("class kotlin.IntArray", "${IntArray::class}")
// TODO
// assertEquals("class kotlin.Array", "${Array<Any>::class}")
assertEquals("class kotlin.String", "${String::class}")
assertEquals("class kotlin.String", "${java.lang.String::class}")
assertEquals("class java.lang.Runnable", "${Runnable::class}")
return "OK"
}
@@ -102,6 +102,12 @@ class KClassImpl<T>(override val jClass: Class<T>) : KCallableContainerImpl(), K
override fun hashCode(): Int =
jClass.hashCode()
override fun toString(): String =
jClass.toString()
override fun toString(): String {
return "class " + classId.let { classId ->
val packageFqName = classId.getPackageFqName()
val packagePrefix = if (packageFqName.isRoot()) "" else packageFqName.asString() + "."
val classSuffix = classId.getRelativeClassName().asString().replace('.', '$')
packagePrefix + classSuffix
}
}
}