KT-64988 [AA] Unwrap safe call when resolving named arguments in FirReferenceResolveHelper

^KT-64988 Fixed
This commit is contained in:
Roman Golyshev
2024-01-15 23:26:01 +01:00
committed by teamcity
parent 80cf88c9b9
commit 72a0f2023d
8 changed files with 40 additions and 2 deletions
@@ -424,6 +424,12 @@ public class Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated exte
runTest("analysis/analysis-api/testData/referenceResolve/parameterByName.kt");
}
@Test
@TestMetadata("parameterByNameInSafeCall.kt")
public void testParameterByNameInSafeCall() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/parameterByNameInSafeCall.kt");
}
@Test
@TestMetadata("PlusAssignByHand.kt")
public void testPlusAssignByHand() throws Exception {
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirPackageSymbol
import org.jetbrains.kotlin.analysis.api.fir.unwrapSafeCall
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFir
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirSafe
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.throwUnexpectedFirElementError
import org.jetbrains.kotlin.analysis.utils.errors.unexpectedElementError
import org.jetbrains.kotlin.fir.FirPackageDirective
@@ -371,7 +370,7 @@ internal object FirReferenceResolveHelper {
val ktValueArgumentList = ktValueArgument.parent as? KtValueArgumentList ?: return emptyList()
val ktCallExpression = ktValueArgumentList.parent as? KtCallElement ?: return emptyList()
val firCall = ktCallExpression.getOrBuildFirSafe<FirCall>(analysisSession.firResolveSession) ?: return emptyList()
val firCall = ktCallExpression.getOrBuildFir(analysisSession.firResolveSession)?.unwrapSafeCall() as? FirCall ?: return emptyList()
val parameter = firCall.findCorrespondingParameter(ktValueArgument) ?: return emptyList()
return listOfNotNull(parameter.buildSymbol(symbolBuilder))
}
@@ -424,6 +424,12 @@ public class FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated ex
runTest("analysis/analysis-api/testData/referenceResolve/parameterByName.kt");
}
@Test
@TestMetadata("parameterByNameInSafeCall.kt")
public void testParameterByNameInSafeCall() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/parameterByNameInSafeCall.kt");
}
@Test
@TestMetadata("PlusAssignByHand.kt")
public void testPlusAssignByHand() throws Exception {
@@ -424,6 +424,12 @@ public class FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerate
runTest("analysis/analysis-api/testData/referenceResolve/parameterByName.kt");
}
@Test
@TestMetadata("parameterByNameInSafeCall.kt")
public void testParameterByNameInSafeCall() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/parameterByNameInSafeCall.kt");
}
@Test
@TestMetadata("PlusAssignByHand.kt")
public void testPlusAssignByHand() throws Exception {
@@ -424,6 +424,12 @@ public class FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated exten
runTest("analysis/analysis-api/testData/referenceResolve/parameterByName.kt");
}
@Test
@TestMetadata("parameterByNameInSafeCall.kt")
public void testParameterByNameInSafeCall() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/parameterByNameInSafeCall.kt");
}
@Test
@TestMetadata("PlusAssignByHand.kt")
public void testPlusAssignByHand() throws Exception {
@@ -424,6 +424,12 @@ public class FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerate
runTest("analysis/analysis-api/testData/referenceResolve/parameterByName.kt");
}
@Test
@TestMetadata("parameterByNameInSafeCall.kt")
public void testParameterByNameInSafeCall() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/parameterByNameInSafeCall.kt");
}
@Test
@TestMetadata("PlusAssignByHand.kt")
public void testPlusAssignByHand() throws Exception {
@@ -0,0 +1,7 @@
class Foo {
fun bar(name: Int) {}
}
fun usage(foo: Foo) {
foo?.bar(na<caret>me = 10)
}
@@ -0,0 +1,2 @@
Resolved to:
0: name: kotlin.Int