From 760e43d4f1c1ec89cf6a4e0b106363c970c3d797 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 21 Apr 2017 20:04:27 +0200 Subject: [PATCH] Include in MethodInfo only names of arguments actually in the call Needed to apply blacklist for e.g. startsWith more correctly. --- .../KotlinInlayParameterHintsProvider.kt | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinInlayParameterHintsProvider.kt b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinInlayParameterHintsProvider.kt index 14cc5f7cdc4..337ad188be9 100644 --- a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinInlayParameterHintsProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinInlayParameterHintsProvider.kt @@ -38,6 +38,7 @@ import org.jetbrains.kotlin.psi.psiUtil.startOffset import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.renderer.RenderingFormat import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall +import org.jetbrains.kotlin.resolve.calls.model.DefaultValueArgument import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode @@ -210,10 +211,16 @@ class KotlinInlayParameterHintsProvider : InlayParameterHintsProvider { private fun getMethodInfo(elem: KtCallExpression): HintInfo.MethodInfo? { val ctx = elem.analyze(BodyResolveMode.PARTIAL) - val resolvedCall = elem.getResolvedCall(ctx)?.candidateDescriptor - if (resolvedCall is FunctionDescriptor) { - val fqName = resolvedCall.fqNameOrNull()?.asString() ?: return null - val paramNames = resolvedCall.valueParameters.map { it.name }.filter { !it.isSpecial }.map(Name::asString) + val resolvedCall = elem.getResolvedCall(ctx) + val resolvedCallee = resolvedCall?.candidateDescriptor + if (resolvedCallee is FunctionDescriptor) { + val fqName = resolvedCallee.fqNameOrNull()?.asString() ?: return null + val paramNames = resolvedCall.valueArguments + .mapNotNull { (valueParameterDescriptor, resolvedValueArgument) -> + if (resolvedValueArgument !is DefaultValueArgument) valueParameterDescriptor.name else null + } + .filter { !it.isSpecial } + .map(Name::asString) return HintInfo.MethodInfo(fqName, paramNames) } return null