[Analysis API FIR] fix call resolution of non-resolvable elements
This commit is contained in:
+13
-11
@@ -86,18 +86,20 @@ internal class KtFirCallResolver(
|
||||
result
|
||||
}
|
||||
|
||||
override fun resolveCall(psi: KtElement): KtCallInfo? = wrapError(psi) {
|
||||
val ktCallInfos = getCallInfo(psi) { psiToResolve, resolveCalleeExpressionOfFunctionCall, resolveFragmentOfCall ->
|
||||
listOfNotNull(
|
||||
toKtCallInfo(
|
||||
psiToResolve,
|
||||
resolveCalleeExpressionOfFunctionCall,
|
||||
resolveFragmentOfCall
|
||||
override fun resolveCall(psi: KtElement): KtCallInfo? {
|
||||
return wrapError(psi) {
|
||||
val ktCallInfos = getCallInfo(psi) { psiToResolve, resolveCalleeExpressionOfFunctionCall, resolveFragmentOfCall ->
|
||||
listOfNotNull(
|
||||
toKtCallInfo(
|
||||
psiToResolve,
|
||||
resolveCalleeExpressionOfFunctionCall,
|
||||
resolveFragmentOfCall
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
check(ktCallInfos.size <= 1) { "Should only return 1 KtCallInfo" }
|
||||
ktCallInfos.singleOrNull()
|
||||
}
|
||||
check(ktCallInfos.size <= 1) { "Should only return 1 KtCallInfo" }
|
||||
ktCallInfos.singleOrNull()
|
||||
}
|
||||
|
||||
private inline fun <T> getCallInfo(
|
||||
@@ -108,7 +110,7 @@ internal class KtFirCallResolver(
|
||||
resolveFragmentOfCall: Boolean
|
||||
) -> List<T>
|
||||
): List<T> {
|
||||
if (psi.isNotResolvable()) return emptyList()
|
||||
if (!canBeResolvedAsCall(psi)) return emptyList()
|
||||
|
||||
val containingCallExpressionForCalleeExpression = psi.getContainingCallExpressionForCalleeExpression()
|
||||
val containingBinaryExpressionForLhs = psi.getContainingBinaryExpressionForIncompleteLhs()
|
||||
|
||||
+28
@@ -854,6 +854,34 @@ public class FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated extends Ab
|
||||
}
|
||||
}
|
||||
|
||||
@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")
|
||||
|
||||
Reference in New Issue
Block a user