[AA] support qualified type in incomplete code
^ KTIJ-24373 when resolving selector expr of a dot qualified expression, parent qualified expression is resolved see `KtFirCallResolver.getContainingDotQualifiedExpressionForSelectorExpression`, Fir is filled with the data. Then, during final mapping from Fir -> psi, one need to perform the opposite: take `selectionExpression` to get the initial KtCallExpression
This commit is contained in:
+6
@@ -917,6 +917,12 @@ public class Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated extends A
|
|||||||
runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/invalidCode/incompleteCodeNoParenthesis.kt");
|
runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/invalidCode/incompleteCodeNoParenthesis.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("incompleteCodeNoParenthesisDotQualifier.kt")
|
||||||
|
public void testIncompleteCodeNoParenthesisDotQualifier() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/invalidCode/incompleteCodeNoParenthesisDotQualifier.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("incompleteCodeWithAmbiguity.kt")
|
@TestMetadata("incompleteCodeWithAmbiguity.kt")
|
||||||
public void testIncompleteCodeWithAmbiguity() throws Exception {
|
public void testIncompleteCodeWithAmbiguity() throws Exception {
|
||||||
|
|||||||
+9
-6
@@ -149,12 +149,15 @@ internal class KtFirCallResolver(
|
|||||||
|
|
||||||
createGenericTypeQualifierCallIfApplicable(this, psi)?.let { return it }
|
createGenericTypeQualifierCallIfApplicable(this, psi)?.let { return it }
|
||||||
|
|
||||||
if (this is FirResolvedQualifier && psi is KtCallExpression) {
|
if (this is FirResolvedQualifier) {
|
||||||
val constructors = findQualifierConstructors()
|
val callExpression = (psi as? KtExpression)?.getPossiblyQualifiedCallExpression()
|
||||||
val calls = toKtCalls(constructors)
|
if (callExpression != null) {
|
||||||
return when (calls.size) {
|
val constructors = findQualifierConstructors()
|
||||||
0 -> KtErrorCallInfo(listOf(KtQualifierCall(token, psi)), inapplicableCandidateDiagnostic(), token)
|
val calls = toKtCalls(constructors)
|
||||||
else -> KtErrorCallInfo(calls, inapplicableCandidateDiagnostic(), token)
|
return when (calls.size) {
|
||||||
|
0 -> KtErrorCallInfo(listOf(KtQualifierCall(token, callExpression)), inapplicableCandidateDiagnostic(), token)
|
||||||
|
else -> KtErrorCallInfo(calls, inapplicableCandidateDiagnostic(), token)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+6
@@ -917,6 +917,12 @@ public class FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated extends Ab
|
|||||||
runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/invalidCode/incompleteCodeNoParenthesis.kt");
|
runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/invalidCode/incompleteCodeNoParenthesis.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("incompleteCodeNoParenthesisDotQualifier.kt")
|
||||||
|
public void testIncompleteCodeNoParenthesisDotQualifier() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/invalidCode/incompleteCodeNoParenthesisDotQualifier.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("incompleteCodeWithAmbiguity.kt")
|
@TestMetadata("incompleteCodeWithAmbiguity.kt")
|
||||||
public void testIncompleteCodeWithAmbiguity() throws Exception {
|
public void testIncompleteCodeWithAmbiguity() throws Exception {
|
||||||
|
|||||||
+6
@@ -917,6 +917,12 @@ public class FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated ext
|
|||||||
runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/invalidCode/incompleteCodeNoParenthesis.kt");
|
runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/invalidCode/incompleteCodeNoParenthesis.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("incompleteCodeNoParenthesisDotQualifier.kt")
|
||||||
|
public void testIncompleteCodeNoParenthesisDotQualifier() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/invalidCode/incompleteCodeNoParenthesisDotQualifier.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("incompleteCodeWithAmbiguity.kt")
|
@TestMetadata("incompleteCodeWithAmbiguity.kt")
|
||||||
public void testIncompleteCodeWithAmbiguity() throws Exception {
|
public void testIncompleteCodeWithAmbiguity() throws Exception {
|
||||||
|
|||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
KtSuccessCallInfo:
|
||||||
|
call = KtGenericTypeQualifier:
|
||||||
|
qualifier = kotlin.collections.List<String>
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
fun main() {
|
||||||
|
kotlin.collections.<expr>List<String></expr>
|
||||||
|
}
|
||||||
+6
@@ -0,0 +1,6 @@
|
|||||||
|
KtErrorCallInfo:
|
||||||
|
candidateCalls = [
|
||||||
|
KtQualifierCall:
|
||||||
|
qualifier = List<String>
|
||||||
|
]
|
||||||
|
diagnostic = ERROR<null: Inapplicable candidate>
|
||||||
Reference in New Issue
Block a user