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
*/