[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:
+9
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user