KT-86909 [kotlin] Cleanup: pass KaSession as context parameter instead of extension receiver

GitOrigin-RevId: c2871483af3df855532aa6b7902f556e760330c2
This commit is contained in:
Roman Golyshev
2026-07-20 16:51:40 +00:00
committed by intellij-monorepo-bot
parent 65a0e1ddc5
commit da7d48a0e1
2 changed files with 14 additions and 10 deletions
@@ -29,7 +29,7 @@ internal class KaBaseKDocReference(element: KDocName) : KDocReference(element),
referenceTargetSymbols.flatMap { symbol ->
when (symbol) {
is KaSyntheticJavaPropertySymbol -> listOfNotNull(symbol.javaGetterSymbol.psi, symbol.javaSetterSymbol?.psi)
is KaSymbol -> getPsiDeclarations(symbol)
is KaSymbol -> symbol.getPsiDeclarations()
}
}
}
@@ -10,6 +10,8 @@ import org.jetbrains.kotlin.analysis.api.symbols.KaBackingFieldSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KaCallableSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KaSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KaSymbolOrigin
import org.jetbrains.kotlin.analysis.api.symbols.containingSymbol
import org.jetbrains.kotlin.analysis.api.symbols.intersectionOverriddenSymbols
import org.jetbrains.kotlin.idea.references.KtReference
import org.jetbrains.kotlin.idea.references.isConstructorOf
import org.jetbrains.kotlin.idea.references.mainReference
@@ -29,7 +31,7 @@ internal sealed interface KaBaseReference : KtReference, KaResolvableReferenceBr
fun getResolvedToPsi(analysisSession: KaSession, referenceTargetSymbols: Collection<KaSymbol>): Collection<PsiElement> =
with(analysisSession) {
referenceTargetSymbols.flatMap { symbol ->
getPsiDeclarations(symbol)
symbol.getPsiDeclarations()
}
}
@@ -68,22 +70,24 @@ internal sealed interface KaBaseReference : KtReference, KaResolvableReferenceBr
}
}
internal fun KaSession.getPsiDeclarations(symbol: KaSymbol): Collection<PsiElement> {
context(_: KaSession)
internal fun KaSymbol.getPsiDeclarations(): Collection<PsiElement> {
val intersectionOverriddenSymbolsOrSingle = when {
symbol.origin == KaSymbolOrigin.INTERSECTION_OVERRIDE && symbol is KaCallableSymbol -> symbol.intersectionOverriddenSymbols
else -> listOf(symbol)
this.origin == KaSymbolOrigin.INTERSECTION_OVERRIDE && this is KaCallableSymbol -> this.intersectionOverriddenSymbols
else -> listOf(this)
}
return intersectionOverriddenSymbolsOrSingle.mapNotNull { unwrapPsi(it) }
return intersectionOverriddenSymbolsOrSingle.mapNotNull { it.unwrapPsi() }
}
private fun KaSession.unwrapPsi(symbol: KaSymbol): PsiElement? = when {
symbol is KaBackingFieldSymbol -> unwrapPsi(symbol.owningProperty)
context(_: KaSession)
private fun KaSymbol.unwrapPsi(): PsiElement? = when {
this is KaBackingFieldSymbol -> this.owningProperty.unwrapPsi()
// For declarations generated by compiler plugins, `symbol.psi` is undefined and most probably is `null`.
// To make the navigation work reasonably for the plugins which generate declarations inside existing
// user-defined declarations, we use `containingSymbol` to navigate to the containing declaration.
symbol.origin == KaSymbolOrigin.PLUGIN && symbol.psi == null -> symbol.containingSymbol?.let { unwrapPsi(it) }
this.origin == KaSymbolOrigin.PLUGIN && this.psi == null -> this.containingSymbol?.unwrapPsi()
else -> symbol.psi
else -> this.psi
}