FIR: Simplify API for ensureResolved
Additional `as` casts look redundant, but it's a design issue (see KT-41421)
This commit is contained in:
+3
-5
@@ -7,16 +7,14 @@ package org.jetbrains.kotlin.fir.resolve.transformers
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.FirSessionComponent
|
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.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
||||||
|
|
||||||
abstract class FirPhaseManager : FirSessionComponent {
|
abstract class FirPhaseManager : FirSessionComponent {
|
||||||
abstract fun <D> ensureResolved(
|
abstract fun ensureResolved(
|
||||||
symbol: AbstractFirBasedSymbol<D>,
|
symbol: AbstractFirBasedSymbol<*>,
|
||||||
requiredPhase: FirResolvePhase = FirResolvePhase.DECLARATIONS
|
requiredPhase: FirResolvePhase = FirResolvePhase.DECLARATIONS
|
||||||
) where D : FirDeclaration, D : FirSymbolOwner<D>
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal val FirSession.phaseManager: FirPhaseManager? by FirSession.nullableSessionComponentAccessor()
|
internal val FirSession.phaseManager: FirPhaseManager? by FirSession.nullableSessionComponentAccessor()
|
||||||
|
|||||||
+5
-5
@@ -6,19 +6,19 @@
|
|||||||
package org.jetbrains.kotlin.fir.resolve.transformers
|
package org.jetbrains.kotlin.fir.resolve.transformers
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
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.FirDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
||||||
|
|
||||||
fun <D> AbstractFirBasedSymbol<D>.ensureResolved(
|
fun AbstractFirBasedSymbol<*>.ensureResolved(
|
||||||
requiredPhase: FirResolvePhase,
|
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: 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
|
// TODO: Decide which one session should be used and probably get rid of the parameter if use-site session is not needed
|
||||||
useSiteSession: FirSession,
|
useSiteSession: FirSession,
|
||||||
) where D : FirDeclaration, D : FirSymbolOwner<D> {
|
) {
|
||||||
|
val fir = fir as FirDeclaration
|
||||||
val availablePhase = fir.resolvePhase
|
val availablePhase = fir.resolvePhase
|
||||||
if (availablePhase >= requiredPhase) return
|
if (availablePhase >= requiredPhase) return
|
||||||
val resolver = fir.session.phaseManager
|
val resolver = fir.session.phaseManager
|
||||||
@@ -27,9 +27,9 @@ fun <D> AbstractFirBasedSymbol<D>.ensureResolved(
|
|||||||
resolver.ensureResolved(this, requiredPhase)
|
resolver.ensureResolved(this, requiredPhase)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <D> AbstractFirBasedSymbol<D>.ensureResolvedForCalls(
|
fun AbstractFirBasedSymbol<*>.ensureResolvedForCalls(
|
||||||
useSiteSession: FirSession,
|
useSiteSession: FirSession,
|
||||||
) where D : FirDeclaration, D : FirSymbolOwner<D> {
|
) {
|
||||||
val requiredPhase = when (this.fir) {
|
val requiredPhase = when (this.fir) {
|
||||||
is FirFunction<*>, is FirProperty -> FirResolvePhase.CONTRACTS
|
is FirFunction<*>, is FirProperty -> FirResolvePhase.CONTRACTS
|
||||||
else -> FirResolvePhase.STATUS
|
else -> FirResolvePhase.STATUS
|
||||||
|
|||||||
+5
-6
@@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.fir.low.level.api
|
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.FirDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.fir.render
|
import org.jetbrains.kotlin.fir.render
|
||||||
@@ -19,15 +18,15 @@ internal class IdeFirPhaseManager(
|
|||||||
private val lazyDeclarationResolver: FirLazyDeclarationResolver,
|
private val lazyDeclarationResolver: FirLazyDeclarationResolver,
|
||||||
private val cache: ModuleFileCache
|
private val cache: ModuleFileCache
|
||||||
) : FirPhaseManager() {
|
) : FirPhaseManager() {
|
||||||
override fun <D> ensureResolved(
|
override fun ensureResolved(
|
||||||
symbol: AbstractFirBasedSymbol<D>,
|
symbol: AbstractFirBasedSymbol<*>,
|
||||||
requiredPhase: FirResolvePhase
|
requiredPhase: FirResolvePhase
|
||||||
) where D : FirDeclaration, D : FirSymbolOwner<D> {
|
) {
|
||||||
val result = symbol.fir
|
val result = symbol.fir as FirDeclaration
|
||||||
val availablePhase = result.resolvePhase
|
val availablePhase = result.resolvePhase
|
||||||
if (availablePhase >= requiredPhase) return
|
if (availablePhase >= requiredPhase) return
|
||||||
// NB: we should use session from symbol here, not transformer session (important for IDE)
|
// 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) {
|
require(provider.isPhasedFirAllowed) {
|
||||||
"Incorrect resolvePhase: actual: $availablePhase, expected: $requiredPhase\n For: ${symbol.fir.render()}"
|
"Incorrect resolvePhase: actual: $availablePhase, expected: $requiredPhase\n For: ${symbol.fir.render()}"
|
||||||
|
|||||||
Reference in New Issue
Block a user