From 778e2f6f0b633db1ca7061506da7178bcd37977a Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Mon, 5 Oct 2015 21:33:26 +0300 Subject: [PATCH] More simple and correct overload to highlight detection --- .../KotlinFunctionParameterInfoHandler.kt | 16 ++++++---------- .../functionParameterInfo/FunctionalValue1.kt | 2 +- .../functionParameterInfo/FunctionalValue2.kt | 2 +- .../functionParameterInfo/Invoke.kt | 2 +- 4 files changed, 9 insertions(+), 13 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinFunctionParameterInfoHandler.kt b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinFunctionParameterInfoHandler.kt index 608648929ab..67121ae884c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinFunctionParameterInfoHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinFunctionParameterInfoHandler.kt @@ -42,6 +42,7 @@ import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfo import org.jetbrains.kotlin.resolve.calls.CallResolver import org.jetbrains.kotlin.resolve.calls.callUtil.getCall +import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.checkers.CallChecker import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext import org.jetbrains.kotlin.resolve.calls.context.CheckArgumentTypesMode @@ -198,7 +199,7 @@ class KotlinFunctionParameterInfoHandler : ParameterInfoHandlerWithTabActionSupp }.toString() - val color = if (isResolvedToDescriptor(argumentList, itemToShow, bindingContext)) + val color = if (isResolvedToDescriptor(call, itemToShow, bindingContext)) GREEN_BACKGROUND else context.defaultParameterColor @@ -221,7 +222,7 @@ class KotlinFunctionParameterInfoHandler : ParameterInfoHandlerWithTabActionSupp } append(parameter.name) append(": ") - append(DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(getActualParameterType(parameter))) + append(DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(parameterTypeToRender(parameter))) if (parameter.hasDefaultValue()) { val parameterDeclaration = DescriptorToSourceUtils.descriptorToDeclaration(parameter) append(" = ") @@ -253,7 +254,7 @@ class KotlinFunctionParameterInfoHandler : ParameterInfoHandlerWithTabActionSupp return "..." } - private fun getActualParameterType(descriptor: ValueParameterDescriptor): JetType { + private fun parameterTypeToRender(descriptor: ValueParameterDescriptor): JetType { var type = descriptor.varargElementType ?: descriptor.type if (type.containsError()) { val original = descriptor.original @@ -263,19 +264,14 @@ class KotlinFunctionParameterInfoHandler : ParameterInfoHandlerWithTabActionSupp } private fun isResolvedToDescriptor( - argumentList: JetValueArgumentList, + call: Call, functionDescriptor: FunctionDescriptor, bindingContext: BindingContext ): Boolean { - val callNameExpression = getCallNameExpression(argumentList) ?: return false - val target = bindingContext[BindingContext.REFERENCE_TARGET, callNameExpression] as? FunctionDescriptor + val target = call.getResolvedCall(bindingContext)?.resultingDescriptor as? FunctionDescriptor return target != null && descriptorsEqual(target, functionDescriptor) } - private fun getCallNameExpression(argumentList: JetValueArgumentList): JetSimpleNameExpression? { - return (argumentList.parent as? JetCallElement)?.getCallNameExpression() - } - private data class SignatureInfo( val substitutedDescriptor: FunctionDescriptor, val argumentToParameter: (ValueArgument) -> ValueParameterDescriptor?, diff --git a/idea/testData/parameterInfo/functionParameterInfo/FunctionalValue1.kt b/idea/testData/parameterInfo/functionParameterInfo/FunctionalValue1.kt index f3ea2368b80..8e9bafc5438 100644 --- a/idea/testData/parameterInfo/functionParameterInfo/FunctionalValue1.kt +++ b/idea/testData/parameterInfo/functionParameterInfo/FunctionalValue1.kt @@ -4,5 +4,5 @@ fun x(name: String, next: (name: String) -> String): String { //TODO: use parameter names from functional type /* -Text: (p1: String), Disabled: false, Strikeout: false, Green: false +Text: (p1: String), Disabled: false, Strikeout: false, Green: true */ diff --git a/idea/testData/parameterInfo/functionParameterInfo/FunctionalValue2.kt b/idea/testData/parameterInfo/functionParameterInfo/FunctionalValue2.kt index b745c5ebaa1..5bac95ac4d4 100644 --- a/idea/testData/parameterInfo/functionParameterInfo/FunctionalValue2.kt +++ b/idea/testData/parameterInfo/functionParameterInfo/FunctionalValue2.kt @@ -8,5 +8,5 @@ fun call() { //TODO: use parameter names from functional type /* Text: (name: String, value: Int), Disabled: false, Strikeout: false, Green: false -Text: (p1: String, p2: String), Disabled: false, Strikeout: false, Green: false +Text: (p1: String, p2: String), Disabled: false, Strikeout: false, Green: true */ diff --git a/idea/testData/parameterInfo/functionParameterInfo/Invoke.kt b/idea/testData/parameterInfo/functionParameterInfo/Invoke.kt index 8d6c8fc2748..b483a0356f7 100644 --- a/idea/testData/parameterInfo/functionParameterInfo/Invoke.kt +++ b/idea/testData/parameterInfo/functionParameterInfo/Invoke.kt @@ -11,5 +11,5 @@ fun main(args: Array) { } /* -Text: (i: Int), Disabled: false, Strikeout: false, Green: false +Text: (i: Int), Disabled: false, Strikeout: false, Green: true */