From ae827bfd800ca5875950a68c2361b1221714195d Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 16 Dec 2019 13:52:11 +0300 Subject: [PATCH] Use declaration-site session in phased FIR instead of use-site session This allows us to successfully find containing file for another module declaration --- .../resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt | 3 +-- .../src/org/jetbrains/kotlin/fir/resolve/SessionHolder.kt | 2 +- .../fir/resolve/transformers/FirAbstractPhaseTransformer.kt | 2 +- .../jetbrains/kotlin/fir/resolve/transformers/PhaseUtils.kt | 5 ++--- .../body/resolve/FirAbstractBodyResolveTransformer.kt | 2 +- 5 files changed, 6 insertions(+), 8 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt index 208d8f6f1ce..a0b3aade537 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt @@ -37,7 +37,6 @@ import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.symbols.invoke import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl -import org.jetbrains.kotlin.fir.visitors.compose import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystemBuilder import org.jetbrains.kotlin.resolve.calls.results.TypeSpecificityComparator @@ -439,7 +438,7 @@ class FirCallResolver( coneSymbol is FirBackingFieldSymbol -> FirBackingFieldReferenceImpl(source, null, coneSymbol) coneSymbol is FirVariableSymbol && ( coneSymbol !is FirPropertySymbol || - (coneSymbol.phasedFir(session) as FirMemberDeclaration).typeParameters.isEmpty() + (coneSymbol.phasedFir() as FirMemberDeclaration).typeParameters.isEmpty() ) -> FirResolvedNamedReferenceImpl(source, name, coneSymbol) else -> FirNamedReferenceWithCandidate(source, name, candidate) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SessionHolder.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SessionHolder.kt index cab3b1d0324..62b8e56ece1 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SessionHolder.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SessionHolder.kt @@ -41,5 +41,5 @@ interface BodyResolveComponents : SessionHolder { val integerOperatorsTypeUpdater: IntegerOperatorsTypeUpdater val AbstractFirBasedSymbol.phasedFir: D where D : FirDeclaration, D : FirSymbolOwner - get() = phasedFir(session, FirResolvePhase.DECLARATIONS) + get() = phasedFir(FirResolvePhase.DECLARATIONS) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAbstractPhaseTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAbstractPhaseTransformer.kt index 3330138fa2a..86448381517 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAbstractPhaseTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAbstractPhaseTransformer.kt @@ -29,7 +29,7 @@ abstract class FirAbstractPhaseTransformer( open val AbstractFirBasedSymbol.phasedFir: D where D : FirDeclaration, D : FirSymbolOwner get() { val requiredPhase = transformerPhase.requiredToLaunch - return phasedFir(session, requiredPhase) + return phasedFir(requiredPhase) } override fun transformFile(file: FirFile, data: D): CompositeTransformResult { 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 0c9e79679e7..d2a24af117a 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,7 +5,6 @@ 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 @@ -16,13 +15,13 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol fun AbstractFirBasedSymbol.phasedFir( - session: FirSession, requiredPhase: FirResolvePhase = FirResolvePhase.DECLARATIONS ): D where D : FirDeclaration, D : FirSymbolOwner { val result = this.fir val availablePhase = result.resolvePhase if (availablePhase < requiredPhase) { - val provider = FirProvider.getInstance(session) + // NB: we should use session from symbol here, not transformer session (important for IDE) + val provider = FirProvider.getInstance(fir.session) val containingFile = when (this) { is FirCallableSymbol<*> -> provider.getFirCallableContainerFile(this) is FirClassLikeSymbol<*> -> provider.getFirClassifierContainerFile(this) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirAbstractBodyResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirAbstractBodyResolveTransformer.kt index 065630fb6f4..056474f5046 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirAbstractBodyResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirAbstractBodyResolveTransformer.kt @@ -36,7 +36,7 @@ abstract class FirAbstractBodyResolveTransformer(phase: FirResolvePhase) : FirAb final override val AbstractFirBasedSymbol.phasedFir: D where D : FirDeclaration, D : FirSymbolOwner get() { val requiredPhase = transformerPhase.requiredToLaunch - return phasedFir(session, requiredPhase) + return phasedFir(requiredPhase) } protected inline fun withScopeCleanup(scopes: MutableList<*>, crossinline l: () -> T): T {