Render candidate and resulting descriptors in resolved call tests
This commit is contained in:
@@ -21,7 +21,6 @@ import org.jetbrains.jet.JetLiteFixture
|
||||
import org.jetbrains.jet.JetTestUtils
|
||||
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment
|
||||
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall
|
||||
import org.jetbrains.jet.lang.resolve.scopes.receivers.AbstractReceiverValue
|
||||
import org.jetbrains.jet.lang.resolve.scopes.receivers.ExpressionReceiver
|
||||
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue
|
||||
|
||||
@@ -38,6 +37,10 @@ import org.jetbrains.jet.lang.psi.JetExpression
|
||||
import com.intellij.psi.util.PsiTreeUtil
|
||||
import org.jetbrains.jet.lang.resolve.calls.model.VariableAsFunctionResolvedCall
|
||||
import org.jetbrains.jet.lang.resolve.bindingContextUtil.getParentResolvedCall
|
||||
import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor
|
||||
import org.jetbrains.jet.lang.resolve.scopes.receivers.ExtensionReceiver
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.jet.lang.resolve.scopes.receivers.ClassReceiver
|
||||
|
||||
public abstract class AbstractResolvedCallsTest() : JetLiteFixture() {
|
||||
override fun createEnvironment(): JetCoreEnvironment = createEnvironmentWithMockJdk(ConfigurationKind.JDK_ONLY)
|
||||
@@ -63,8 +66,9 @@ public abstract class AbstractResolvedCallsTest() : JetLiteFixture() {
|
||||
}
|
||||
|
||||
private fun ReceiverValue.getText() = when (this) {
|
||||
is ExpressionReceiver -> getExpression().getText()
|
||||
is AbstractReceiverValue -> getType().toString()
|
||||
is ExpressionReceiver -> "${getExpression().getText()} {${getType()}}"
|
||||
is ClassReceiver -> "Class{${getType()}}"
|
||||
is ExtensionReceiver -> "${getType()}Ext{${getDeclarationDescriptor().getText()}}"
|
||||
else -> toString()
|
||||
}
|
||||
|
||||
@@ -78,25 +82,38 @@ private fun ArgumentMapping.getText() = when (this) {
|
||||
else -> "ARGUMENT UNMAPPED: "
|
||||
}
|
||||
|
||||
private fun DeclarationDescriptor.getText(): String = when (this) {
|
||||
is ReceiverParameterDescriptor -> "${getValue().getText()}::this"
|
||||
else -> DescriptorRenderer.COMPACT_WITH_SHORT_TYPES.render(this)
|
||||
}
|
||||
|
||||
private fun ResolvedCall<*>.renderToText(): String {
|
||||
val result = StringBuilder()
|
||||
fun addLine(line: String) = result.append(line).append("\n")
|
||||
return StringBuilder {
|
||||
appendln("Resolved call:")
|
||||
appendln()
|
||||
|
||||
addLine("Resolved call:\n")
|
||||
addLine("Explicit receiver kind = ${getExplicitReceiverKind()}")
|
||||
addLine("This object = ${getThisObject().getText()}")
|
||||
addLine("Receiver argument = ${getReceiverArgument().getText()}")
|
||||
if (getCandidateDescriptor() != getResultingDescriptor()) {
|
||||
appendln("Candidate descriptor: ${getCandidateDescriptor()!!.getText()}")
|
||||
}
|
||||
appendln("Resulting descriptor: ${getResultingDescriptor()!!.getText()}")
|
||||
appendln()
|
||||
|
||||
val valueArguments = getCall().getAllValueArguments()
|
||||
if (valueArguments.isEmpty()) return result.toString()
|
||||
appendln("Explicit receiver kind = ${getExplicitReceiverKind()}")
|
||||
appendln("This object = ${getThisObject().getText()}")
|
||||
appendln("Receiver argument = ${getReceiverArgument().getText()}")
|
||||
|
||||
addLine("\nValue arguments mapping:\n")
|
||||
val valueArguments = getCall().getAllValueArguments()
|
||||
if (!valueArguments.isEmpty()) {
|
||||
appendln()
|
||||
appendln("Value arguments mapping:")
|
||||
appendln()
|
||||
|
||||
for (valueArgument in valueArguments) {
|
||||
val argumentText = valueArgument.getText()
|
||||
val argumentMappingText = getArgumentMapping(valueArgument).getText()
|
||||
for (valueArgument in valueArguments) {
|
||||
val argumentText = valueArgument.getText()
|
||||
val argumentMappingText = getArgumentMapping(valueArgument).getText()
|
||||
|
||||
addLine("$argumentMappingText $argumentText")
|
||||
}
|
||||
return result.toString()
|
||||
appendln("$argumentMappingText $argumentText")
|
||||
}
|
||||
}
|
||||
}.toString()
|
||||
}
|
||||
Reference in New Issue
Block a user