Correctly show parameter name hints for non-ambiguous overloads

This commit is contained in:
Dmitry Jemerov
2017-06-21 15:12:46 +02:00
parent ad6c84924b
commit 16c8a092ca
2 changed files with 16 additions and 0 deletions
@@ -26,12 +26,17 @@ import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.startOffset import org.jetbrains.kotlin.psi.psiUtil.startOffset
import org.jetbrains.kotlin.resolve.calls.callUtil.getCall 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.calls.model.ResolvedCall
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
fun provideArgumentNameHints(element: KtCallExpression): List<InlayInfo> { fun provideArgumentNameHints(element: KtCallExpression): List<InlayInfo> {
val ctx = element.analyze(BodyResolveMode.PARTIAL) val ctx = element.analyze(BodyResolveMode.PARTIAL)
val call = element.getCall(ctx) ?: return emptyList() 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()) val candidates = call.resolveCandidates(ctx, element.getResolutionFacade())
if (candidates.isEmpty()) return emptyList() if (candidates.isEmpty()) return emptyList()
candidates.singleOrNull()?.let { return getParameterInfoForCallCandidate(it) } candidates.singleOrNull()?.let { return getParameterInfoForCallCandidate(it) }
@@ -115,6 +115,17 @@ class InlayParameterHintsTest : KotlinLightCodeInsightFixtureTestCase() {
""") """)
} }
fun `test show non-ambiguous overload`() {
check("""
fun main() {
test(<hint text="a:"/>10, <hint text="bI:"/>15);
}
fun test() {}
fun test(a: Int, bS: String) {}
fun test(a: Int, bI: Int) {}
""")
}
fun `test show ambiguous constructor`() { fun `test show ambiguous constructor`() {
check(""" check("""
fun main() { fun main() {