From ace826c570fdeaecdd49cc347988f7f7b172cab2 Mon Sep 17 00:00:00 2001 From: Mark Punzalan Date: Mon, 31 Jan 2022 17:58:28 +0000 Subject: [PATCH] Analysis API: Get argument mapping from candidate and type parameters from candidate symbol. --- .../Fe10ResolveCallTestGenerated.java | 18 ++++ .../api/fir/components/KtFirCallResolver.kt | 33 ++++--- .../FirResolveCallTestGenerated.java | 18 ++++ .../FirResolveCandidatesTestGenerated.java | 28 ++++++ .../resolveCall/ambiguous.descriptors.txt | 76 ++++++++++++++++ .../callResolver/resolveCall/ambiguous.kt | 7 ++ .../callResolver/resolveCall/ambiguous.txt | 73 +++++++++++++++ ...WithExplicitTypeParameters.descriptors.txt | 91 +++++++++++++++++++ .../ambiguousWithExplicitTypeParameters.kt | 7 ++ .../ambiguousWithExplicitTypeParameters.txt | 88 ++++++++++++++++++ ...WithInferredTypeParameters.descriptors.txt | 91 +++++++++++++++++++ .../ambiguousWithInferredTypeParameters.kt | 7 ++ .../ambiguousWithInferredTypeParameters.txt | 88 ++++++++++++++++++ .../multipleCandidates/ambiguous.kt | 7 ++ .../multipleCandidates/ambiguous.txt | 77 ++++++++++++++++ .../ambiguousWithExplicitTypeParameters.kt | 7 ++ .../ambiguousWithExplicitTypeParameters.txt | 89 ++++++++++++++++++ .../ambiguousWithInferredTypeParameters.kt | 7 ++ .../ambiguousWithInferredTypeParameters.txt | 89 ++++++++++++++++++ 19 files changed, 887 insertions(+), 14 deletions(-) create mode 100644 analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguous.descriptors.txt create mode 100644 analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguous.kt create mode 100644 analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguous.txt create mode 100644 analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithExplicitTypeParameters.descriptors.txt create mode 100644 analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithExplicitTypeParameters.kt create mode 100644 analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithExplicitTypeParameters.txt create mode 100644 analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithInferredTypeParameters.descriptors.txt create mode 100644 analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithInferredTypeParameters.kt create mode 100644 analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithInferredTypeParameters.txt create mode 100644 analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguous.kt create mode 100644 analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguous.txt create mode 100644 analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguousWithExplicitTypeParameters.kt create mode 100644 analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguousWithExplicitTypeParameters.txt create mode 100644 analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguousWithInferredTypeParameters.kt create mode 100644 analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguousWithInferredTypeParameters.txt diff --git a/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/fe10/components/Fe10ResolveCallTestGenerated.java b/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/fe10/components/Fe10ResolveCallTestGenerated.java index 96d3e11d4a3..04a4d2b3ce3 100644 --- a/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/fe10/components/Fe10ResolveCallTestGenerated.java +++ b/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/fe10/components/Fe10ResolveCallTestGenerated.java @@ -34,6 +34,24 @@ public class Fe10ResolveCallTestGenerated extends AbstractResolveCallTest { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/callResolver/resolveCall"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @Test + @TestMetadata("ambiguous.kt") + public void testAmbiguous() throws Exception { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguous.kt"); + } + + @Test + @TestMetadata("ambiguousWithExplicitTypeParameters.kt") + public void testAmbiguousWithExplicitTypeParameters() throws Exception { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithExplicitTypeParameters.kt"); + } + + @Test + @TestMetadata("ambiguousWithInferredTypeParameters.kt") + public void testAmbiguousWithInferredTypeParameters() throws Exception { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithInferredTypeParameters.kt"); + } + @Test @TestMetadata("annotationEntry.kt") public void testAnnotationEntry() throws Exception { diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt index 239b8f77e78..8bf6e2ff259 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt @@ -250,7 +250,7 @@ internal class KtFirCallResolver( ?: return null if (targetSymbol !is FirCallableSymbol<*>) return null if (targetSymbol is FirErrorFunctionSymbol || targetSymbol is FirErrorPropertySymbol) return null - val unsbustitutedKtSignature = targetSymbol.toKtSignature() + val unsubstitutedKtSignature = targetSymbol.toKtSignature() handleCompoundAccessCall(psi, fir, resolveFragmentOfCall)?.let { return it } @@ -261,9 +261,9 @@ internal class KtFirCallResolver( // candidate, `Candidate.substitutor` is not complete. maybe we can carry over the final substitutor if it's available from // body resolve phase? val substitutor = - (fir as? FirQualifiedAccess)?.createConeSubstitutorFromTypeArguments()?.toKtSubstitutor() ?: KtSubstitutor.Empty(token) + (fir as? FirQualifiedAccess)?.createSubstitutorFromTypeArguments(targetSymbol) ?: KtSubstitutor.Empty(token) KtPartiallyAppliedSymbol( - unsbustitutedKtSignature.substitute(substitutor), + unsubstitutedKtSignature.substitute(substitutor), candidate.dispatchReceiverValue?.receiverExpression?.toKtReceiverValue(), candidate.extensionReceiverValue?.receiverExpression?.toKtReceiverValue(), ) @@ -304,17 +304,17 @@ internal class KtFirCallResolver( } val substitutor = fir.createConeSubstitutorFromTypeArguments() ?: return null KtPartiallyAppliedSymbol( - unsbustitutedKtSignature.substitute(substitutor.toKtSubstitutor()), + unsubstitutedKtSignature.substitute(substitutor.toKtSubstitutor()), dispatchReceiver, extensionReceiver, ) } else { - KtPartiallyAppliedSymbol(unsbustitutedKtSignature, null, null) + KtPartiallyAppliedSymbol(unsubstitutedKtSignature, _dispatchReceiver = null, _extensionReceiver = null) } return when (fir) { is FirAnnotationCall -> { - if (unsbustitutedKtSignature.symbol !is KtConstructorSymbol) return null + if (unsubstitutedKtSignature.symbol !is KtConstructorSymbol) return null @Suppress("UNCHECKED_CAST") // safe because of the above check on targetKtSymbol KtAnnotationCall( partiallyAppliedSymbol as KtPartiallyAppliedFunctionSymbol, @@ -322,7 +322,7 @@ internal class KtFirCallResolver( ) } is FirDelegatedConstructorCall -> { - if (unsbustitutedKtSignature.symbol !is KtConstructorSymbol) return null + if (unsubstitutedKtSignature.symbol !is KtConstructorSymbol) return null @Suppress("UNCHECKED_CAST") // safe because of the above check on targetKtSymbol KtDelegatedConstructorCall( partiallyAppliedSymbol as KtPartiallyAppliedFunctionSymbol, @@ -331,7 +331,7 @@ internal class KtFirCallResolver( ) } is FirVariableAssignment -> { - if (unsbustitutedKtSignature.symbol !is KtVariableLikeSymbol) return null + if (unsubstitutedKtSignature.symbol !is KtVariableLikeSymbol) return null val rhs = fir.rValue.psi as? KtExpression @Suppress("UNCHECKED_CAST") // safe because of the above check on targetKtSymbol KtSimpleVariableAccessCall( @@ -340,7 +340,7 @@ internal class KtFirCallResolver( ) } is FirPropertyAccessExpression -> { - if (unsbustitutedKtSignature.symbol !is KtVariableLikeSymbol) return null + if (unsubstitutedKtSignature.symbol !is KtVariableLikeSymbol) return null @Suppress("UNCHECKED_CAST") // safe because of the above check on targetKtSymbol KtSimpleVariableAccessCall( partiallyAppliedSymbol as KtPartiallyAppliedVariableSymbol, @@ -348,17 +348,22 @@ internal class KtFirCallResolver( ) } is FirFunctionCall -> { - if (unsbustitutedKtSignature.symbol !is KtFunctionLikeSymbol) return null - val argumentMapping = + if (unsubstitutedKtSignature.symbol !is KtFunctionLikeSymbol) return null + val argumentMapping = if (candidate is Candidate) { + candidate.argumentMapping + } else { + fir.argumentMapping + } + val argumentMappingWithoutExtensionReceiver = if (firstArgIsExtensionReceiver) { - fir.argumentMapping?.entries?.drop(1) + argumentMapping?.entries?.drop(1) } else { - fir.argumentMapping?.entries + argumentMapping?.entries } @Suppress("UNCHECKED_CAST") // safe because of the above check on targetKtSymbol KtSimpleFunctionCall( partiallyAppliedSymbol as KtPartiallyAppliedFunctionSymbol, - argumentMapping + argumentMappingWithoutExtensionReceiver ?.createArgumentMapping(partiallyAppliedSymbol.signature as KtFunctionLikeSignature<*>) ?: LinkedHashMap(), fir is FirImplicitInvokeCall diff --git a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/FirResolveCallTestGenerated.java b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/FirResolveCallTestGenerated.java index 477c8df3b5d..0d3d417a16d 100644 --- a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/FirResolveCallTestGenerated.java +++ b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/FirResolveCallTestGenerated.java @@ -34,6 +34,24 @@ public class FirResolveCallTestGenerated extends AbstractResolveCallTest { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/callResolver/resolveCall"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @Test + @TestMetadata("ambiguous.kt") + public void testAmbiguous() throws Exception { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguous.kt"); + } + + @Test + @TestMetadata("ambiguousWithExplicitTypeParameters.kt") + public void testAmbiguousWithExplicitTypeParameters() throws Exception { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithExplicitTypeParameters.kt"); + } + + @Test + @TestMetadata("ambiguousWithInferredTypeParameters.kt") + public void testAmbiguousWithInferredTypeParameters() throws Exception { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithInferredTypeParameters.kt"); + } + @Test @TestMetadata("annotationEntry.kt") public void testAnnotationEntry() throws Exception { diff --git a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/FirResolveCandidatesTestGenerated.java b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/FirResolveCandidatesTestGenerated.java index a8825004fe7..beecad97ffe 100644 --- a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/FirResolveCandidatesTestGenerated.java +++ b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/FirResolveCandidatesTestGenerated.java @@ -40,6 +40,34 @@ public class FirResolveCandidatesTestGenerated extends AbstractResolveCandidates runTest("analysis/analysis-api/testData/components/callResolver/resolveCandidates/noCandidates.kt"); } + @Nested + @TestMetadata("analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates") + @TestDataPath("$PROJECT_ROOT") + public class MultipleCandidates { + @Test + public void testAllFilesPresentInMultipleCandidates() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("ambiguous.kt") + public void testAmbiguous() throws Exception { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguous.kt"); + } + + @Test + @TestMetadata("ambiguousWithExplicitTypeParameters.kt") + public void testAmbiguousWithExplicitTypeParameters() throws Exception { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguousWithExplicitTypeParameters.kt"); + } + + @Test + @TestMetadata("ambiguousWithInferredTypeParameters.kt") + public void testAmbiguousWithInferredTypeParameters() throws Exception { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguousWithInferredTypeParameters.kt"); + } + } + @Nested @TestMetadata("analysis/analysis-api/testData/components/callResolver/resolveCandidates/singleCandidate") @TestDataPath("$PROJECT_ROOT") diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguous.descriptors.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguous.descriptors.txt new file mode 100644 index 00000000000..cd4902b1cd2 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguous.descriptors.txt @@ -0,0 +1,76 @@ +KtErrorCallInfo: + candidateCalls = [ + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(a: kotlin.Char): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = a + receiverType = null + returnType = kotlin.Char + symbol = a: kotlin.Char + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + name = a + receiverType = null + returnType = kotlin.Char + symbol = a: kotlin.Char) + }, + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(b: kotlin.Boolean): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = b + receiverType = null + returnType = kotlin.Boolean + symbol = b: kotlin.Boolean + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + name = b + receiverType = null + returnType = kotlin.Boolean + symbol = b: kotlin.Boolean) + }, + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(c: kotlin.String): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = c + receiverType = null + returnType = kotlin.String + symbol = c: kotlin.String + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + name = c + receiverType = null + returnType = kotlin.String + symbol = c: kotlin.String) + } + ] + diagnostic = ERROR \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguous.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguous.kt new file mode 100644 index 00000000000..306989fb1a1 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguous.kt @@ -0,0 +1,7 @@ +fun function(a: Char) {} +fun function(b: Boolean) {} +fun function(c: String) {} + +fun call() { + function(1) +} diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguous.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguous.txt new file mode 100644 index 00000000000..3a6ef49f34f --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguous.txt @@ -0,0 +1,73 @@ +KtErrorCallInfo: + candidateCalls = [ + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(a: kotlin.Char): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = a + receiverType = null + returnType = kotlin.Char + symbol = a: kotlin.Char + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + name = a + receiverType = null + returnType = kotlin.Char + symbol = a: kotlin.Char) + }, + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(b: kotlin.Boolean): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = b + receiverType = null + returnType = kotlin.Boolean + symbol = b: kotlin.Boolean + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + name = b + receiverType = null + returnType = kotlin.Boolean + symbol = b: kotlin.Boolean) + }, + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(c: kotlin.String): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = c + receiverType = null + returnType = kotlin.String + symbol = c: kotlin.String + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + name = c + receiverType = null + returnType = kotlin.String + symbol = c: kotlin.String) + } + ] + diagnostic = ERROR diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithExplicitTypeParameters.descriptors.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithExplicitTypeParameters.descriptors.txt new file mode 100644 index 00000000000..1bb3b114833 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithExplicitTypeParameters.descriptors.txt @@ -0,0 +1,91 @@ +KtErrorCallInfo: + candidateCalls = [ + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(t: T, a: kotlin.Char): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = t + receiverType = null + returnType = TypeVariable(T) + symbol = t: T, + KtVariableLikeSignature: + name = a + receiverType = null + returnType = kotlin.Char + symbol = a: kotlin.Char + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + name = t + receiverType = null + returnType = TypeVariable(T) + symbol = t: T) + }, + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(u: U, b: kotlin.Boolean): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = u + receiverType = null + returnType = TypeVariable(U) + symbol = u: U, + KtVariableLikeSignature: + name = b + receiverType = null + returnType = kotlin.Boolean + symbol = b: kotlin.Boolean + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + name = u + receiverType = null + returnType = TypeVariable(U) + symbol = u: U) + }, + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(v: V, c: kotlin.String): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = v + receiverType = null + returnType = TypeVariable(V) + symbol = v: V, + KtVariableLikeSignature: + name = c + receiverType = null + returnType = kotlin.String + symbol = c: kotlin.String + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + name = v + receiverType = null + returnType = TypeVariable(V) + symbol = v: V) + } + ] + diagnostic = ERROR function(t: TypeVariable(T), a: Char): Unit defined in root package in file ambiguousWithExplicitTypeParameters.kt + public fun function(u: TypeVariable(U), b: Boolean): Unit defined in root package in file ambiguousWithExplicitTypeParameters.kt + public fun function(v: TypeVariable(V), c: String): Unit defined in root package in file ambiguousWithExplicitTypeParameters.kt> \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithExplicitTypeParameters.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithExplicitTypeParameters.kt new file mode 100644 index 00000000000..25e5b92fbca --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithExplicitTypeParameters.kt @@ -0,0 +1,7 @@ +fun function(t: T, a: Char) {} +fun function(u: U, b: Boolean) {} +fun function(v: V, c: String) {} + +fun call() { + function(1) +} diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithExplicitTypeParameters.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithExplicitTypeParameters.txt new file mode 100644 index 00000000000..7f16f5d2264 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithExplicitTypeParameters.txt @@ -0,0 +1,88 @@ +KtErrorCallInfo: + candidateCalls = [ + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(t: T, a: kotlin.Char): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = t + receiverType = null + returnType = kotlin.Int + symbol = t: T, + KtVariableLikeSignature: + name = a + receiverType = null + returnType = kotlin.Char + symbol = a: kotlin.Char + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + name = t + receiverType = null + returnType = kotlin.Int + symbol = t: T) + }, + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(u: U, b: kotlin.Boolean): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = u + receiverType = null + returnType = kotlin.Int + symbol = u: U, + KtVariableLikeSignature: + name = b + receiverType = null + returnType = kotlin.Boolean + symbol = b: kotlin.Boolean + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + name = u + receiverType = null + returnType = kotlin.Int + symbol = u: U) + }, + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(v: V, c: kotlin.String): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = v + receiverType = null + returnType = kotlin.Int + symbol = v: V, + KtVariableLikeSignature: + name = c + receiverType = null + returnType = kotlin.String + symbol = c: kotlin.String + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + name = v + receiverType = null + returnType = kotlin.Int + symbol = v: V) + } + ] + diagnostic = ERROR \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithInferredTypeParameters.descriptors.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithInferredTypeParameters.descriptors.txt new file mode 100644 index 00000000000..6fb4dd5567c --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithInferredTypeParameters.descriptors.txt @@ -0,0 +1,91 @@ +KtErrorCallInfo: + candidateCalls = [ + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(t: T, a: kotlin.Char): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = t + receiverType = null + returnType = TypeVariable(T) + symbol = t: T, + KtVariableLikeSignature: + name = a + receiverType = null + returnType = kotlin.Char + symbol = a: kotlin.Char + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + name = t + receiverType = null + returnType = TypeVariable(T) + symbol = t: T) + }, + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(u: U, b: kotlin.Boolean): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = u + receiverType = null + returnType = TypeVariable(U) + symbol = u: U, + KtVariableLikeSignature: + name = b + receiverType = null + returnType = kotlin.Boolean + symbol = b: kotlin.Boolean + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + name = u + receiverType = null + returnType = TypeVariable(U) + symbol = u: U) + }, + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(v: V, c: kotlin.String): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = v + receiverType = null + returnType = TypeVariable(V) + symbol = v: V, + KtVariableLikeSignature: + name = c + receiverType = null + returnType = kotlin.String + symbol = c: kotlin.String + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + name = v + receiverType = null + returnType = TypeVariable(V) + symbol = v: V) + } + ] + diagnostic = ERROR function(t: TypeVariable(T), a: Char): Unit defined in root package in file ambiguousWithInferredTypeParameters.kt + public fun function(u: TypeVariable(U), b: Boolean): Unit defined in root package in file ambiguousWithInferredTypeParameters.kt + public fun function(v: TypeVariable(V), c: String): Unit defined in root package in file ambiguousWithInferredTypeParameters.kt> \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithInferredTypeParameters.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithInferredTypeParameters.kt new file mode 100644 index 00000000000..af951a48baf --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithInferredTypeParameters.kt @@ -0,0 +1,7 @@ +fun function(t: T, a: Char) {} +fun function(u: U, b: Boolean) {} +fun function(v: V, c: String) {} + +fun call() { + function(1) +} diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithInferredTypeParameters.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithInferredTypeParameters.txt new file mode 100644 index 00000000000..9455042beb7 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/ambiguousWithInferredTypeParameters.txt @@ -0,0 +1,88 @@ +KtErrorCallInfo: + candidateCalls = [ + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(t: T, a: kotlin.Char): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = t + receiverType = null + returnType = T + symbol = t: T, + KtVariableLikeSignature: + name = a + receiverType = null + returnType = kotlin.Char + symbol = a: kotlin.Char + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + name = t + receiverType = null + returnType = T + symbol = t: T) + }, + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(u: U, b: kotlin.Boolean): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = u + receiverType = null + returnType = U + symbol = u: U, + KtVariableLikeSignature: + name = b + receiverType = null + returnType = kotlin.Boolean + symbol = b: kotlin.Boolean + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + name = u + receiverType = null + returnType = U + symbol = u: U) + }, + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(v: V, c: kotlin.String): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = v + receiverType = null + returnType = V + symbol = v: V, + KtVariableLikeSignature: + name = c + receiverType = null + returnType = kotlin.String + symbol = c: kotlin.String + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + name = v + receiverType = null + returnType = V + symbol = v: V) + } + ] + diagnostic = ERROR diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguous.kt b/analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguous.kt new file mode 100644 index 00000000000..306989fb1a1 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguous.kt @@ -0,0 +1,7 @@ +fun function(a: Char) {} +fun function(b: Boolean) {} +fun function(c: String) {} + +fun call() { + function(1) +} diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguous.txt b/analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguous.txt new file mode 100644 index 00000000000..d42bc7ece8f --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguous.txt @@ -0,0 +1,77 @@ +KtErrorCallInfo: + candidateCalls = [ + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(a: kotlin.Char): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + receiverType = null + returnType = kotlin.Char + symbol = a: kotlin.Char + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + receiverType = null + returnType = kotlin.Char + symbol = a: kotlin.Char) + } + ] + diagnostic = ERROR + +KtErrorCallInfo: + candidateCalls = [ + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(b: kotlin.Boolean): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + receiverType = null + returnType = kotlin.Boolean + symbol = b: kotlin.Boolean + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + receiverType = null + returnType = kotlin.Boolean + symbol = b: kotlin.Boolean) + } + ] + diagnostic = ERROR + +KtErrorCallInfo: + candidateCalls = [ + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(c: kotlin.String): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + receiverType = null + returnType = kotlin.String + symbol = c: kotlin.String + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + receiverType = null + returnType = kotlin.String + symbol = c: kotlin.String) + } + ] + diagnostic = ERROR diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguousWithExplicitTypeParameters.kt b/analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguousWithExplicitTypeParameters.kt new file mode 100644 index 00000000000..25e5b92fbca --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguousWithExplicitTypeParameters.kt @@ -0,0 +1,7 @@ +fun function(t: T, a: Char) {} +fun function(u: U, b: Boolean) {} +fun function(v: V, c: String) {} + +fun call() { + function(1) +} diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguousWithExplicitTypeParameters.txt b/analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguousWithExplicitTypeParameters.txt new file mode 100644 index 00000000000..0a86d9af2a3 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguousWithExplicitTypeParameters.txt @@ -0,0 +1,89 @@ +KtErrorCallInfo: + candidateCalls = [ + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(t: T, a: kotlin.Char): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + receiverType = null + returnType = kotlin.Int + symbol = t: T, + KtVariableLikeSignature: + receiverType = null + returnType = kotlin.Char + symbol = a: kotlin.Char + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + receiverType = null + returnType = kotlin.Int + symbol = t: T) + } + ] + diagnostic = ERROR + +KtErrorCallInfo: + candidateCalls = [ + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(u: U, b: kotlin.Boolean): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + receiverType = null + returnType = kotlin.Int + symbol = u: U, + KtVariableLikeSignature: + receiverType = null + returnType = kotlin.Boolean + symbol = b: kotlin.Boolean + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + receiverType = null + returnType = kotlin.Int + symbol = u: U) + } + ] + diagnostic = ERROR + +KtErrorCallInfo: + candidateCalls = [ + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(v: V, c: kotlin.String): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + receiverType = null + returnType = kotlin.Int + symbol = v: V, + KtVariableLikeSignature: + receiverType = null + returnType = kotlin.String + symbol = c: kotlin.String + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + receiverType = null + returnType = kotlin.Int + symbol = v: V) + } + ] + diagnostic = ERROR diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguousWithInferredTypeParameters.kt b/analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguousWithInferredTypeParameters.kt new file mode 100644 index 00000000000..af951a48baf --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguousWithInferredTypeParameters.kt @@ -0,0 +1,7 @@ +fun function(t: T, a: Char) {} +fun function(u: U, b: Boolean) {} +fun function(v: V, c: String) {} + +fun call() { + function(1) +} diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguousWithInferredTypeParameters.txt b/analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguousWithInferredTypeParameters.txt new file mode 100644 index 00000000000..59e3940faaf --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCandidates/multipleCandidates/ambiguousWithInferredTypeParameters.txt @@ -0,0 +1,89 @@ +KtErrorCallInfo: + candidateCalls = [ + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(t: T, a: kotlin.Char): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + receiverType = null + returnType = T + symbol = t: T, + KtVariableLikeSignature: + receiverType = null + returnType = kotlin.Char + symbol = a: kotlin.Char + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + receiverType = null + returnType = T + symbol = t: T) + } + ] + diagnostic = ERROR + +KtErrorCallInfo: + candidateCalls = [ + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(u: U, b: kotlin.Boolean): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + receiverType = null + returnType = U + symbol = u: U, + KtVariableLikeSignature: + receiverType = null + returnType = kotlin.Boolean + symbol = b: kotlin.Boolean + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + receiverType = null + returnType = U + symbol = u: U) + } + ] + diagnostic = ERROR + +KtErrorCallInfo: + candidateCalls = [ + KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /function(v: V, c: kotlin.String): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + receiverType = null + returnType = V + symbol = v: V, + KtVariableLikeSignature: + receiverType = null + returnType = kotlin.String + symbol = c: kotlin.String + ] + argumentMapping = { + 1 -> (KtVariableLikeSignature: + receiverType = null + returnType = V + symbol = v: V) + } + ] + diagnostic = ERROR