diff --git a/libraries/stdlib/wasm/src/kotlin/reflect/KClassImpl.kt b/libraries/stdlib/wasm/src/kotlin/reflect/KClassImpl.kt index d2257a5909c..086d1bf7494 100644 --- a/libraries/stdlib/wasm/src/kotlin/reflect/KClassImpl.kt +++ b/libraries/stdlib/wasm/src/kotlin/reflect/KClassImpl.kt @@ -45,4 +45,6 @@ internal class KClassImpl(private val typeData: TypeInfoData) : KClass< (this === other) || (other is KClassImpl<*> && other.typeData.isInterface == typeData.isInterface && other.typeData.typeId == typeData.typeId) override fun hashCode(): Int = typeData.typeId + + override fun toString(): String = "class $qualifiedName" } \ No newline at end of file diff --git a/libraries/stdlib/wasm/src/kotlin/reflect/KTypeImpl.kt b/libraries/stdlib/wasm/src/kotlin/reflect/KTypeImpl.kt index f2a87702e94..5de75967d4c 100644 --- a/libraries/stdlib/wasm/src/kotlin/reflect/KTypeImpl.kt +++ b/libraries/stdlib/wasm/src/kotlin/reflect/KTypeImpl.kt @@ -11,4 +11,27 @@ internal class KTypeImpl( override val classifier: KClassifier?, override val arguments: List, override val isMarkedNullable: Boolean -) : KType +) : KType { + override fun equals(other: Any?): Boolean = + other is KTypeImpl && + classifier == other.classifier && arguments == other.arguments && isMarkedNullable == other.isMarkedNullable + + override fun hashCode(): Int = + (classifier.hashCode() * 31 + arguments.hashCode()) * 31 + isMarkedNullable.hashCode() + + override fun toString(): String { + val kClass = (classifier as? KClass<*>) + val classifierName = when { + kClass == null -> classifier.toString() + kClass.simpleName != null -> kClass.simpleName + else -> "(non-denotable type)" + } + + val args = + if (arguments.isEmpty()) "" + else arguments.joinToString(", ", "<", ">") + val nullable = if (isMarkedNullable) "?" else "" + + return classifierName + args + nullable + } +} \ No newline at end of file