[Analysis API FIR] fix call resolution of non-resolvable elements

This commit is contained in:
Ilya Kirillov
2022-10-01 10:36:02 +02:00
parent ccdb6fc599
commit ab3f916f3f
13 changed files with 124 additions and 24 deletions
@@ -145,7 +145,7 @@ internal class KtFe10CallResolver(
get() = analysisSession.token
override fun resolveCall(psi: KtElement): KtCallInfo? = with(analysisContext.analyze(psi, AnalysisMode.PARTIAL_WITH_DIAGNOSTICS)) {
if (psi.isNotResolvable()) return null
if (!canBeResolvedAsCall(psi)) return null
val parentBinaryExpression = psi.parentOfType<KtBinaryExpression>()
val lhs = KtPsiUtil.deparenthesize(parentBinaryExpression?.left)
@@ -177,7 +177,7 @@ internal class KtFe10CallResolver(
override fun collectCallCandidates(psi: KtElement): List<KtCallCandidateInfo> =
with(analysisContext.analyze(psi, AnalysisMode.PARTIAL_WITH_DIAGNOSTICS)) {
if (psi.isNotResolvable()) return emptyList()
if (!canBeResolvedAsCall(psi)) return emptyList()
val resolvedKtCallInfo = resolveCall(psi)
val bestCandidateDescriptors =
@@ -854,6 +854,34 @@ public class Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated extends A
}
}
@Nested
@TestMetadata("analysis/analysis-api/testData/components/callResolver/resolveCall/nonCalls")
@TestDataPath("$PROJECT_ROOT")
public class NonCalls {
@Test
public void testAllFilesPresentInNonCalls() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/callResolver/resolveCall/nonCalls"), Pattern.compile("^(.+)\\.kt$"), null, true);
}
@Test
@TestMetadata("ifExpression.kt")
public void testIfExpression() throws Exception {
runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/nonCalls/ifExpression.kt");
}
@Test
@TestMetadata("literalExpression.kt")
public void testLiteralExpression() throws Exception {
runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/nonCalls/literalExpression.kt");
}
@Test
@TestMetadata("whenExpression.kt")
public void testWhenExpression() throws Exception {
runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/nonCalls/whenExpression.kt");
}
}
@Nested
@TestMetadata("analysis/analysis-api/testData/components/callResolver/resolveCall/withTestCompilerPluginEnabled")
@TestDataPath("$PROJECT_ROOT")