FIR: Extract AbstractFirBasedSymbol::ensureResolved extension

This commit is contained in:
Denis Zharkov
2020-08-26 14:14:08 +03:00
parent 2529f541ba
commit bf2fc10cd6
@@ -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 <D> AbstractFirBasedSymbol<D>.phasedFir(
requiredPhase: FirResolvePhase = FirResolvePhase.DECLARATIONS
): D where D : FirDeclaration, D : FirSymbolOwner<D> {
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 <D> AbstractFirBasedSymbol<D>.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<D> {
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)
}