[AA] support psi-resolve for loops labels

required for navigation, rename (KTIJ-25762), find usages.
Resolve through symbols can't work, because loops are not declarations
This commit is contained in:
Anna Kozlova
2023-07-04 13:31:44 +02:00
committed by Space Team
parent 7f3970fb0f
commit 142421da5b
@@ -12,6 +12,9 @@ import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirNamedClassOrObjectSymb
import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirSyntheticJavaPropertySymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtClassKind
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFir
import org.jetbrains.kotlin.fir.expressions.FirLoopJump
import org.jetbrains.kotlin.fir.psi
import org.jetbrains.kotlin.psi.*
internal class KtFirSimpleNameReference(
@@ -45,6 +48,12 @@ internal class KtFirSimpleNameReference(
}
override fun getResolvedToPsi(analysisSession: KtAnalysisSession): Collection<PsiElement> = with(analysisSession) {
if (expression is KtLabelReferenceExpression) {
val fir = expression.getOrBuildFir((analysisSession as KtFirAnalysisSession).firResolveSession)
if (fir is FirLoopJump) {
return listOfNotNull(fir.target.labeledElement.psi)
}
}
val referenceTargetSymbols = resolveToSymbols()
val psiOfReferenceTarget = super.getResolvedToPsi(analysisSession, referenceTargetSymbols)
if (psiOfReferenceTarget.isNotEmpty()) return psiOfReferenceTarget