From bf2fc10cd6303f9d2ea4f437cfd8f72aa594a10f Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Wed, 26 Aug 2020 14:14:08 +0300 Subject: [PATCH] FIR: Extract AbstractFirBasedSymbol::ensureResolved extension --- .../fir/resolve/transformers/PhaseUtils.kt | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) 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) +}