From 16c8a092ca0f288f3dfe9c73803059f8be043f89 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Wed, 21 Jun 2017 15:12:46 +0200 Subject: [PATCH] Correctly show parameter name hints for non-ambiguous overloads --- .../kotlin/idea/parameterInfo/ArgumentNameHints.kt | 5 +++++ .../idea/parameterInfo/InlayParameterHintsTest.kt | 11 +++++++++++ 2 files changed, 16 insertions(+) diff --git a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/ArgumentNameHints.kt b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/ArgumentNameHints.kt index 6c9e9466bd5..76f40054519 100644 --- a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/ArgumentNameHints.kt +++ b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/ArgumentNameHints.kt @@ -26,12 +26,17 @@ import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.startOffset import org.jetbrains.kotlin.resolve.calls.callUtil.getCall +import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode fun provideArgumentNameHints(element: KtCallExpression): List { val ctx = element.analyze(BodyResolveMode.PARTIAL) val call = element.getCall(ctx) ?: return emptyList() + val resolvedCall = call.getResolvedCall(ctx) + if (resolvedCall != null) { + return getParameterInfoForCallCandidate(resolvedCall) + } val candidates = call.resolveCandidates(ctx, element.getResolutionFacade()) if (candidates.isEmpty()) return emptyList() candidates.singleOrNull()?.let { return getParameterInfoForCallCandidate(it) } diff --git a/idea/tests/org/jetbrains/kotlin/idea/parameterInfo/InlayParameterHintsTest.kt b/idea/tests/org/jetbrains/kotlin/idea/parameterInfo/InlayParameterHintsTest.kt index dd9deb3de5f..dcfc3d28aed 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/parameterInfo/InlayParameterHintsTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/parameterInfo/InlayParameterHintsTest.kt @@ -115,6 +115,17 @@ class InlayParameterHintsTest : KotlinLightCodeInsightFixtureTestCase() { """) } + fun `test show non-ambiguous overload`() { + check(""" + fun main() { + test(10, 15); + } + fun test() {} + fun test(a: Int, bS: String) {} + fun test(a: Int, bI: Int) {} +""") + } + fun `test show ambiguous constructor`() { check(""" fun main() {