diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/PhaseUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/PhaseUtils.kt index 9c358c72f88..38ab45f9ee4 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/PhaseUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/PhaseUtils.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.fir.resolve.transformers +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirResolvePhase @@ -13,12 +14,22 @@ import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol fun AbstractFirBasedSymbol.phasedFir( requiredPhase: FirResolvePhase = FirResolvePhase.DECLARATIONS ): D where D : FirDeclaration, D : FirSymbolOwner { - val result = this.fir - val resolver = fir.session.phaseManager - ?: error("phasedFirFileResolver should be defined when working with FIR in phased mode") - resolver.ensureResolved(this, requiredPhase) + ensureResolved(requiredPhase, fir.session) - return result + return fir } +fun AbstractFirBasedSymbol.ensureResolved( + requiredPhase: FirResolvePhase, + // TODO: Currently, the parameter is unused but it's needed to guarantee that all call-sites are able to supply use-site session + // TODO: Decide which one session should be used and probably get rid of the parameter if use-site session is not needed + useSiteSession: FirSession, +) where D : FirDeclaration, D : FirSymbolOwner { + val availablePhase = fir.resolvePhase + if (availablePhase >= requiredPhase) return + val resolver = fir.session.phaseManager + ?: error("phaseManager should be defined when working with FIR in phased mode") + + resolver.ensureResolved(this, requiredPhase) +}