Improve toString() for lambdas and function expressions
#KT-9952 Fixed
This commit is contained in:
@@ -18,6 +18,8 @@ package kotlin.reflect.jvm.internal;
|
||||
|
||||
import kotlin.jvm.internal.*;
|
||||
import kotlin.reflect.*;
|
||||
import kotlin.reflect.jvm.ReflectLambdaKt;
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor;
|
||||
|
||||
/**
|
||||
* @suppress
|
||||
@@ -49,6 +51,18 @@ public class ReflectionFactoryImpl extends ReflectionFactory {
|
||||
return KClassCacheKt.getOrCreateKotlinClass(javaClass);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String renderLambdaToString(Lambda lambda) {
|
||||
KFunction kFunction = ReflectLambdaKt.reflect(lambda);
|
||||
if (kFunction != null) {
|
||||
KFunctionImpl impl = UtilKt.asKFunctionImpl(kFunction);
|
||||
if (impl != null) {
|
||||
return ReflectionObjectRenderer.INSTANCE.renderLambda(impl.getDescriptor());
|
||||
}
|
||||
}
|
||||
return super.renderLambdaToString(lambda);
|
||||
}
|
||||
|
||||
// Functions
|
||||
|
||||
@Override
|
||||
|
||||
@@ -34,7 +34,7 @@ internal object ReflectionObjectRenderer {
|
||||
}
|
||||
}
|
||||
|
||||
private fun StringBuilder.appendReceiversAndName(callable: CallableDescriptor) {
|
||||
private fun StringBuilder.appendReceivers(callable: CallableDescriptor) {
|
||||
val dispatchReceiver = callable.dispatchReceiverParameter
|
||||
val extensionReceiver = callable.extensionReceiverParameter
|
||||
|
||||
@@ -44,8 +44,6 @@ internal object ReflectionObjectRenderer {
|
||||
if (addParentheses) append("(")
|
||||
appendReceiverType(extensionReceiver)
|
||||
if (addParentheses) append(")")
|
||||
|
||||
append(renderer.renderName(callable.name))
|
||||
}
|
||||
|
||||
fun renderCallable(descriptor: CallableDescriptor): String {
|
||||
@@ -60,7 +58,8 @@ internal object ReflectionObjectRenderer {
|
||||
fun renderProperty(descriptor: PropertyDescriptor): String {
|
||||
return buildString {
|
||||
append(if (descriptor.isVar) "var " else "val ")
|
||||
appendReceiversAndName(descriptor)
|
||||
appendReceivers(descriptor)
|
||||
append(renderer.renderName(descriptor.name))
|
||||
|
||||
append(": ")
|
||||
append(renderType(descriptor.type))
|
||||
@@ -70,7 +69,8 @@ internal object ReflectionObjectRenderer {
|
||||
fun renderFunction(descriptor: FunctionDescriptor): String {
|
||||
return buildString {
|
||||
append("fun ")
|
||||
appendReceiversAndName(descriptor)
|
||||
appendReceivers(descriptor)
|
||||
append(renderer.renderName(descriptor.name))
|
||||
|
||||
descriptor.valueParameters.joinTo(this, separator = ", ", prefix = "(", postfix = ")") {
|
||||
renderType(it.type) // TODO: vararg
|
||||
@@ -81,6 +81,19 @@ internal object ReflectionObjectRenderer {
|
||||
}
|
||||
}
|
||||
|
||||
fun renderLambda(invoke: FunctionDescriptor): String {
|
||||
return buildString {
|
||||
appendReceivers(invoke)
|
||||
|
||||
invoke.valueParameters.joinTo(this, separator = ", ", prefix = "(", postfix = ")") {
|
||||
renderType(it.type)
|
||||
}
|
||||
|
||||
append(" -> ")
|
||||
append(renderType(invoke.returnType!!))
|
||||
}
|
||||
}
|
||||
|
||||
fun renderParameter(parameter: KParameterImpl): String {
|
||||
return buildString {
|
||||
when (parameter.kind) {
|
||||
|
||||
Reference in New Issue
Block a user