Provide equals/hashCode/toString for KParameter implementation
Two KParameter instances are equal iff their backing descriptors are equal and their callables are equal
This commit is contained in:
@@ -41,4 +41,13 @@ class KParameterImpl(
|
||||
|
||||
override val type: KType
|
||||
get() = KTypeImpl(descriptor.type) { callable.caller.parameterTypes[index] }
|
||||
|
||||
override fun equals(other: Any?) =
|
||||
other is KParameterImpl && callable == other.callable && descriptor == other.descriptor
|
||||
|
||||
override fun hashCode() =
|
||||
(callable.hashCode() * 31) + descriptor.hashCode()
|
||||
|
||||
override fun toString() =
|
||||
ReflectionObjectRenderer.renderParameter(this)
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor
|
||||
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
||||
import org.jetbrains.kotlin.types.JetType
|
||||
import kotlin.reflect.KParameter
|
||||
|
||||
object ReflectionObjectRenderer {
|
||||
private val renderer = DescriptorRenderer.FQ_NAMES_IN_TYPES
|
||||
@@ -47,6 +48,14 @@ object ReflectionObjectRenderer {
|
||||
append(renderer.renderName(callable.name))
|
||||
}
|
||||
|
||||
fun renderCallable(descriptor: CallableDescriptor): String {
|
||||
return when (descriptor) {
|
||||
is PropertyDescriptor -> renderProperty(descriptor)
|
||||
is FunctionDescriptor -> renderFunction(descriptor)
|
||||
else -> error("Illegal callable: $descriptor")
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: include visibility, return type
|
||||
fun renderProperty(descriptor: PropertyDescriptor): String {
|
||||
return StringBuilder {
|
||||
@@ -69,6 +78,19 @@ object ReflectionObjectRenderer {
|
||||
}.toString()
|
||||
}
|
||||
|
||||
fun renderParameter(parameter: KParameterImpl): String {
|
||||
return StringBuilder {
|
||||
when (parameter.kind) {
|
||||
KParameter.Kind.EXTENSION_RECEIVER -> append("extension receiver")
|
||||
KParameter.Kind.INSTANCE -> append("instance")
|
||||
KParameter.Kind.VALUE -> append("parameter #${parameter.index} ${parameter.name}")
|
||||
}
|
||||
|
||||
append(" of ")
|
||||
append(renderCallable(parameter.callable.descriptor))
|
||||
}.toString()
|
||||
}
|
||||
|
||||
fun renderType(type: JetType): String {
|
||||
return renderer.renderType(type)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user