Provide "toString" for reflection objects
This commit is contained in:
@@ -62,4 +62,7 @@ class KClassImpl<out T>(val jClass: Class<T>) : KClass<T> {
|
||||
|
||||
override fun hashCode(): Int =
|
||||
jClass.hashCode()
|
||||
|
||||
override fun toString(): String =
|
||||
jClass.toString()
|
||||
}
|
||||
|
||||
@@ -36,6 +36,10 @@ open class KForeignMemberProperty<T : Any, out R>(
|
||||
|
||||
override fun hashCode(): Int =
|
||||
name.hashCode() * 31 + owner.hashCode()
|
||||
|
||||
// TODO: include visibility, return type
|
||||
override fun toString(): String =
|
||||
"val ${owner.jClass.getName()}.$name"
|
||||
}
|
||||
|
||||
class KMutableForeignMemberProperty<T : Any, out R>(
|
||||
@@ -47,4 +51,7 @@ class KMutableForeignMemberProperty<T : Any, out R>(
|
||||
override fun set(receiver: T, value: R) {
|
||||
field.set(receiver, value)
|
||||
}
|
||||
|
||||
override fun toString(): String =
|
||||
"var ${owner.jClass.getName()}.$name"
|
||||
}
|
||||
|
||||
@@ -45,6 +45,10 @@ open class KMemberPropertyImpl<T : Any, out R>(
|
||||
|
||||
override fun hashCode(): Int =
|
||||
name.hashCode() * 31 + owner.hashCode()
|
||||
|
||||
// TODO: include visibility, return type
|
||||
override fun toString(): String =
|
||||
"val ${owner.jClass.getName()}.$name"
|
||||
}
|
||||
|
||||
class KMutableMemberPropertyImpl<T : Any, R>(
|
||||
@@ -56,4 +60,7 @@ class KMutableMemberPropertyImpl<T : Any, R>(
|
||||
override fun set(receiver: T, value: R) {
|
||||
setter(receiver, value)
|
||||
}
|
||||
|
||||
override fun toString(): String =
|
||||
"var ${owner.jClass.getName()}.$name"
|
||||
}
|
||||
|
||||
@@ -17,6 +17,9 @@
|
||||
package kotlin.reflect.jvm.internal
|
||||
|
||||
import kotlin.reflect.KPackage
|
||||
import kotlin.jvm.internal.KotlinPackage
|
||||
|
||||
private val KOTLIN_PACKAGE_ANNOTATION_CLASS = javaClass<KotlinPackage>()
|
||||
|
||||
class KPackageImpl(val jClass: Class<*>) : KPackage {
|
||||
override fun equals(other: Any?): Boolean =
|
||||
@@ -24,4 +27,23 @@ class KPackageImpl(val jClass: Class<*>) : KPackage {
|
||||
|
||||
override fun hashCode(): Int =
|
||||
jClass.hashCode()
|
||||
|
||||
suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN")
|
||||
override fun toString(): String {
|
||||
val name = jClass.getName() as java.lang.String
|
||||
return if (jClass.isAnnotationPresent(KOTLIN_PACKAGE_ANNOTATION_CLASS)) {
|
||||
// Cast to Any is needed to suppress the error: "Operator '==' cannot be applied to 'java.lang.String' and 'kotlin.String'"
|
||||
if ((name : Any) == "_DefaultPackage") {
|
||||
"package <default>"
|
||||
}
|
||||
else {
|
||||
val lastDot = name.lastIndexOf(".")
|
||||
if (lastDot >= 0) {
|
||||
"package ${name.substring(0, lastDot)}"
|
||||
}
|
||||
else "package $name"
|
||||
}
|
||||
}
|
||||
else "package $name"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,6 +38,10 @@ open class KTopLevelExtensionPropertyImpl<T, out R>(
|
||||
|
||||
override fun hashCode(): Int =
|
||||
(name.hashCode() * 31 + owner.hashCode()) * 31 + receiverClass.hashCode()
|
||||
|
||||
// TODO: include visibility, return type, maybe package
|
||||
override fun toString(): String =
|
||||
"val ${mapJavaClassToKotlin(receiverClass.getName())}.$name"
|
||||
}
|
||||
|
||||
class KMutableTopLevelExtensionPropertyImpl<T, R>(
|
||||
@@ -50,4 +54,40 @@ class KMutableTopLevelExtensionPropertyImpl<T, R>(
|
||||
override fun set(receiver: T, value: R) {
|
||||
setter.invoke(null, receiver, value)
|
||||
}
|
||||
|
||||
override fun toString(): String =
|
||||
"var ${mapJavaClassToKotlin(receiverClass.getName())}.$name"
|
||||
}
|
||||
|
||||
suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN")
|
||||
private fun mapJavaClassToKotlin(name: String): String {
|
||||
if (Character.isLowerCase(name[0])) {
|
||||
return when (name) {
|
||||
"boolean" -> "kotlin.Boolean"
|
||||
"char" -> "kotlin.Char"
|
||||
"byte" -> "kotlin.Byte"
|
||||
"short" -> "kotlin.Short"
|
||||
"int" -> "kotlin.Int"
|
||||
"float" -> "kotlin.Float"
|
||||
"long" -> "kotlin.Long"
|
||||
"double" -> "kotlin.Double"
|
||||
else -> name
|
||||
}
|
||||
}
|
||||
if (name[0] == '[') {
|
||||
val element = (name as java.lang.String).substring(1)
|
||||
return when (element[0]) {
|
||||
'Z' -> "kotlin.BooleanArray"
|
||||
'C' -> "kotlin.CharArray"
|
||||
'B' -> "kotlin.ByteArray"
|
||||
'S' -> "kotlin.ShortArray"
|
||||
'I' -> "kotlin.IntArray"
|
||||
'F' -> "kotlin.FloatArray"
|
||||
'J' -> "kotlin.LongArray"
|
||||
'D' -> "kotlin.DoubleArray"
|
||||
'L' -> "kotlin.Array<${mapJavaClassToKotlin((element as java.lang.String).substring(1, element.length() - 1))}>"
|
||||
else -> "kotlin.Array<${mapJavaClassToKotlin(element)}>"
|
||||
}
|
||||
}
|
||||
return name
|
||||
}
|
||||
|
||||
@@ -38,6 +38,10 @@ open class KTopLevelVariableImpl<out R>(
|
||||
|
||||
override fun hashCode(): Int =
|
||||
name.hashCode() * 31 + owner.hashCode()
|
||||
|
||||
// TODO: include visibility, return type, maybe package
|
||||
override fun toString(): String =
|
||||
"val $name"
|
||||
}
|
||||
|
||||
class KMutableTopLevelVariableImpl<R>(
|
||||
@@ -49,4 +53,7 @@ class KMutableTopLevelVariableImpl<R>(
|
||||
override fun set(value: R) {
|
||||
setter.invoke(null, value)
|
||||
}
|
||||
|
||||
override fun toString(): String =
|
||||
"var $name"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user