diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirPhaseManager.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirPhaseManager.kt index 9d2d14135a0..e7509d09a7a 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirPhaseManager.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirPhaseManager.kt @@ -7,16 +7,14 @@ package org.jetbrains.kotlin.fir.resolve.transformers import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSessionComponent -import org.jetbrains.kotlin.fir.FirSymbolOwner -import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol abstract class FirPhaseManager : FirSessionComponent { - abstract fun ensureResolved( - symbol: AbstractFirBasedSymbol, + abstract fun ensureResolved( + symbol: AbstractFirBasedSymbol<*>, requiredPhase: FirResolvePhase = FirResolvePhase.DECLARATIONS - ) where D : FirDeclaration, D : FirSymbolOwner + ) } internal val FirSession.phaseManager: FirPhaseManager? by FirSession.nullableSessionComponentAccessor() 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 53da148d916..70d43c7f909 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 @@ -6,19 +6,19 @@ 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.FirFunction import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol -fun AbstractFirBasedSymbol.ensureResolved( +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 fir = fir as FirDeclaration val availablePhase = fir.resolvePhase if (availablePhase >= requiredPhase) return val resolver = fir.session.phaseManager @@ -27,9 +27,9 @@ fun AbstractFirBasedSymbol.ensureResolved( resolver.ensureResolved(this, requiredPhase) } -fun AbstractFirBasedSymbol.ensureResolvedForCalls( +fun AbstractFirBasedSymbol<*>.ensureResolvedForCalls( useSiteSession: FirSession, -) where D : FirDeclaration, D : FirSymbolOwner { +) { val requiredPhase = when (this.fir) { is FirFunction<*>, is FirProperty -> FirResolvePhase.CONTRACTS else -> FirResolvePhase.STATUS diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/IdeFirPhaseManager.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/IdeFirPhaseManager.kt index 93292439e31..7d9b033b482 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/IdeFirPhaseManager.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/IdeFirPhaseManager.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.idea.fir.low.level.api -import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.render @@ -19,15 +18,15 @@ internal class IdeFirPhaseManager( private val lazyDeclarationResolver: FirLazyDeclarationResolver, private val cache: ModuleFileCache ) : FirPhaseManager() { - override fun ensureResolved( - symbol: AbstractFirBasedSymbol, + override fun ensureResolved( + symbol: AbstractFirBasedSymbol<*>, requiredPhase: FirResolvePhase - ) where D : FirDeclaration, D : FirSymbolOwner { - val result = symbol.fir + ) { + val result = symbol.fir as FirDeclaration val availablePhase = result.resolvePhase if (availablePhase >= requiredPhase) return // NB: we should use session from symbol here, not transformer session (important for IDE) - val provider = symbol.fir.session.firProvider + val provider = result.session.firProvider require(provider.isPhasedFirAllowed) { "Incorrect resolvePhase: actual: $availablePhase, expected: $requiredPhase\n For: ${symbol.fir.render()}"