From 87ef4ff7c5a4347eff4aa2094e4c7adc5b5b45ea Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 1 Apr 2015 23:16:24 +0300 Subject: [PATCH] Fix KClassImpl#toString to render Kotlin FQ name, not JVM one --- .../methodsFromAny/classToString.kt | 24 ++++++++++++++----- .../kotlin/reflect/jvm/internal/KClassImpl.kt | 10 ++++++-- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/classToString.kt b/compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/classToString.kt index 6692de70e1f..5302d7d8470 100644 --- a/compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/classToString.kt +++ b/compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/classToString.kt @@ -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().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().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::class}") + assertEquals("class kotlin.String", "${String::class}") + assertEquals("class kotlin.String", "${java.lang.String::class}") + + assertEquals("class java.lang.Runnable", "${Runnable::class}") return "OK" } diff --git a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt index e562fdd3cf6..43fa0cc67ca 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt @@ -102,6 +102,12 @@ class KClassImpl(override val jClass: Class) : 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 + } + } }