[AA] resolve array access expression to corresponding set operator

k1 would suggest `get` as well
 but with current fir structure with fake desugaring
 get is moved to the separate fake psi which doesn't exist
 thus the problem is ignored for now
 ^ KTIJ-24025
This commit is contained in:
Anna Kozlova
2022-12-19 23:18:33 +01:00
committed by teamcity
parent c44993e586
commit b81c210535
14 changed files with 116 additions and 4 deletions
@@ -5,14 +5,14 @@
package org.jetbrains.kotlin.idea.references
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
import org.jetbrains.kotlin.analysis.api.fir.buildSymbol
import org.jetbrains.kotlin.analysis.api.fir.getCandidateSymbols
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirSafe
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFir
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.psi.KtArrayAccessExpression
class KtFirArrayAccessReference(
@@ -20,7 +20,11 @@ class KtFirArrayAccessReference(
) : KtArrayAccessReference(expression), KtFirReference {
override fun KtAnalysisSession.resolveToSymbols(): Collection<KtSymbol> {
check(this is KtFirAnalysisSession)
val fir = element.getOrBuildFirSafe<FirFunctionCall>(firResolveSession) ?: return emptyList()
return fir.getCandidateSymbols().map { it.fir.buildSymbol(firSymbolBuilder) }
val fir = element.getOrBuildFir(firResolveSession) ?: return emptyList()
return when (fir) {
is FirFunctionCall -> fir.getCandidateSymbols().map { it.fir.buildSymbol(firSymbolBuilder) }
is FirResolvedNamedReference -> listOf(fir.resolvedSymbol.buildSymbol(firSymbolBuilder))
else -> emptyList()
}
}
}
@@ -661,6 +661,12 @@ public class FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated ex
runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/setOperator.kt");
}
@Test
@TestMetadata("SetOperatorInc.kt")
public void testSetOperatorInc() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/SetOperatorInc.kt");
}
@Nested
@TestMetadata("analysis/analysis-api/testData/referenceResolve/arrayAccess/withErrors")
@TestDataPath("$PROJECT_ROOT")
@@ -681,6 +687,12 @@ public class FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated ex
public void testSetFunction() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/withErrors/setFunction.kt");
}
@Test
@TestMetadata("SetOperatorInc.kt")
public void testSetOperatorInc() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/withErrors/SetOperatorInc.kt");
}
}
}
@@ -660,6 +660,12 @@ public class FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerate
public void testSetOperator() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/setOperator.kt");
}
@Test
@TestMetadata("SetOperatorInc.kt")
public void testSetOperatorInc() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/SetOperatorInc.kt");
}
}
@Nested
@@ -661,6 +661,12 @@ public class FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated exten
runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/setOperator.kt");
}
@Test
@TestMetadata("SetOperatorInc.kt")
public void testSetOperatorInc() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/SetOperatorInc.kt");
}
@Nested
@TestMetadata("analysis/analysis-api/testData/referenceResolve/arrayAccess/withErrors")
@TestDataPath("$PROJECT_ROOT")
@@ -681,6 +687,12 @@ public class FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated exten
public void testSetFunction() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/withErrors/setFunction.kt");
}
@Test
@TestMetadata("SetOperatorInc.kt")
public void testSetOperatorInc() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/withErrors/SetOperatorInc.kt");
}
}
}