From 41c42a50160882b76ae196dfdbb86c2416d5ce82 Mon Sep 17 00:00:00 2001 From: Igor Yakovlev Date: Mon, 14 Jun 2021 17:40:09 +0200 Subject: [PATCH] [FIR IDE] Remove session scope default parameter from lazy resolve interface --- .../idea/fir/low/level/api/FirModuleResolveStateImpl.kt | 4 ++++ .../kotlin/idea/fir/low/level/api/IdeFirPhaseManager.kt | 2 ++ .../level/api/api/LowLevelFirApiFacadeForResolveOnAir.kt | 1 + .../idea/fir/low/level/api/file/structure/FileStructure.kt | 1 + .../low/level/api/file/structure/FileStructureElement.kt | 7 +++++-- .../low/level/api/lazy/resolve/FirLazyBodiesCalculator.kt | 6 +++--- .../api/lazy/resolve/FirLazyDeclarationResolveToType.kt | 2 +- .../level/api/lazy/resolve/FirLazyDeclarationResolver.kt | 4 ++-- .../api/lazy/resolve/RawFirNonLocalDeclarationBuilder.kt | 2 +- .../transformers/FirFileAnnotationsResolveTransformer.kt | 2 ++ .../low/level/api/transformers/FirLazyTransformerForIDE.kt | 3 ++- .../low/level/api/transformers/LazyTransformerFactory.kt | 2 +- .../level/api/compiler/based/AbstractCompilerBasedTest.kt | 2 +- 13 files changed, 26 insertions(+), 12 deletions(-) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveStateImpl.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveStateImpl.kt index 66f08e30e2b..c28a34dab9e 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveStateImpl.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveStateImpl.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirPsiDiagnostic import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.realPsi import org.jetbrains.kotlin.fir.resolve.symbolProvider +import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.idea.caches.project.IdeaModuleInfo import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo import org.jetbrains.kotlin.idea.caches.project.getModuleInfo @@ -108,6 +109,7 @@ internal class FirModuleResolveStateImpl( firLazyDeclarationResolver.lazyResolveDeclaration( firDeclarationToResolve = nonLocalFirForNamedDeclaration, + scopeSession = ScopeSession(), moduleFileCache = (nonLocalFirForNamedDeclaration.moduleData.session as FirIdeSourcesSession).cache, toPhase = FirResolvePhase.BODY_RESOLVE, checkPCE = false, /*TODO*/ @@ -150,6 +152,7 @@ internal class FirModuleResolveStateImpl( firLazyDeclarationResolver.lazyResolveDeclaration( firDeclarationToResolve = declaration, moduleFileCache = fileCache, + scopeSession = ScopeSession(), toPhase = toPhase, checkPCE = true, ) @@ -165,6 +168,7 @@ internal class FirModuleResolveStateImpl( firLazyDeclarationResolver.lazyResolveDeclaration( firDeclaration = declaration, moduleFileCache = fileCache, + scopeSession = ScopeSession(), toResolveType = type, checkPCE = true, ) 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 6a91d464daf..d418ef69074 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 @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.idea.fir.low.level.api import org.jetbrains.kotlin.fir.ThreadSafeMutableState import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirResolvePhase +import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.transformers.FirPhaseManager import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.ModuleFileCache @@ -30,6 +31,7 @@ internal class IdeFirPhaseManager( lazyDeclarationResolver.lazyResolveDeclaration( firDeclarationToResolve = fir, moduleFileCache = cache, + scopeSession = ScopeSession(), toPhase = requiredPhase, checkPCE = true ) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacadeForResolveOnAir.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacadeForResolveOnAir.kt index 53f060f95df..7faaa43f600 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacadeForResolveOnAir.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacadeForResolveOnAir.kt @@ -138,6 +138,7 @@ object LowLevelFirApiFacadeForResolveOnAir { state.firLazyDeclarationResolver.lazyResolveFileDeclaration( firFile = firFile, moduleFileCache = session.cache, + scopeSession = ScopeSession(), toPhase = FirResolvePhase.IMPORTS ) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructure.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructure.kt index 6f46e476c4c..dfbd771e21a 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructure.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructure.kt @@ -119,6 +119,7 @@ internal class FileStructure private constructor( firLazyDeclarationResolver.lazyResolveDeclaration( firDeclarationToResolve = firDeclaration, moduleFileCache = moduleFileCache, + scopeSession = ScopeSession(), toPhase = FirResolvePhase.BODY_RESOLVE, checkPCE = true, ) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructureElement.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructureElement.kt index b763ec65781..720cdcaf2d5 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructureElement.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructureElement.kt @@ -9,6 +9,7 @@ import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.psi +import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol @@ -120,7 +121,7 @@ internal class ReanalyzableFunctionStructureElement( val originalFunction = firSymbol.fir as FirSimpleFunction val designation = originalFunction.collectDesignation() - val temporaryFunction = RawFirNonLocalDeclarationBuilder.buildWithRebind( + val temporaryFunction = RawFirNonLocalDeclarationBuilder.buildWithFunctionSymbolRebind( session = originalFunction.moduleData.session, scopeProvider = originalFunction.moduleData.session.firIdeProvider.kotlinScopeProvider, designation = designation, @@ -142,6 +143,7 @@ internal class ReanalyzableFunctionStructureElement( firLazyDeclarationResolver.lazyResolveDeclaration( firDeclarationToResolve = originalFunction, moduleFileCache = cache, + scopeSession = ScopeSession(), toPhase = FirResolvePhase.BODY_RESOLVE, checkPCE = true, declarationPhaseDowngraded = true, @@ -176,7 +178,7 @@ internal class ReanalyzablePropertyStructureElement( val originalProperty = firSymbol.fir val designation = originalProperty.collectDesignation() - val temporaryProperty = RawFirNonLocalDeclarationBuilder.buildWithRebind( + val temporaryProperty = RawFirNonLocalDeclarationBuilder.buildWithFunctionSymbolRebind( session = originalProperty.moduleData.session, scopeProvider = originalProperty.moduleData.session.firIdeProvider.kotlinScopeProvider, designation = designation, @@ -201,6 +203,7 @@ internal class ReanalyzablePropertyStructureElement( firLazyDeclarationResolver.lazyResolveDeclaration( firDeclarationToResolve = originalProperty, moduleFileCache = cache, + scopeSession = ScopeSession(), toPhase = FirResolvePhase.BODY_RESOLVE, checkPCE = true, declarationPhaseDowngraded = true, diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyBodiesCalculator.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyBodiesCalculator.kt index f90917804f5..f5bd1a1ac2f 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyBodiesCalculator.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyBodiesCalculator.kt @@ -34,7 +34,7 @@ internal object FirLazyBodiesCalculator { fun calculateLazyBodiesForFunction(designation: FirDeclarationDesignation) { val simpleFunction = designation.declaration as FirSimpleFunction if (simpleFunction.body !is FirLazyBlock) return - val newFunction = RawFirNonLocalDeclarationBuilder.buildWithRebind( + val newFunction = RawFirNonLocalDeclarationBuilder.buildWithFunctionSymbolRebind( session = simpleFunction.moduleData.session, scopeProvider = simpleFunction.moduleData.session.firIdeProvider.kotlinScopeProvider, designation = designation, @@ -51,7 +51,7 @@ internal object FirLazyBodiesCalculator { require(!secondaryConstructor.isPrimary) if (secondaryConstructor.body !is FirLazyBlock) return - val newFunction = RawFirNonLocalDeclarationBuilder.buildWithRebind( + val newFunction = RawFirNonLocalDeclarationBuilder.buildWithFunctionSymbolRebind( session = secondaryConstructor.moduleData.session, scopeProvider = secondaryConstructor.moduleData.session.firIdeProvider.kotlinScopeProvider, designation = designation, @@ -67,7 +67,7 @@ internal object FirLazyBodiesCalculator { val firProperty = designation.declaration as FirProperty if (!needCalculatingLazyBodyForProperty(firProperty)) return - val newProperty = RawFirNonLocalDeclarationBuilder.buildWithRebind( + val newProperty = RawFirNonLocalDeclarationBuilder.buildWithFunctionSymbolRebind( session = firProperty.moduleData.session, scopeProvider = firProperty.moduleData.session.firIdeProvider.kotlinScopeProvider, designation = designation, diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolveToType.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolveToType.kt index 129c44a452c..87de98c4757 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolveToType.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolveToType.kt @@ -37,7 +37,7 @@ internal fun FirLazyDeclarationResolver.lazyResolveDeclaration( firDeclaration: FirDeclaration, moduleFileCache: ModuleFileCache, toResolveType: ResolveType, - scopeSession: ScopeSession = ScopeSession(), + scopeSession: ScopeSession, checkPCE: Boolean = false, ) { when (toResolveType) { diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolver.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolver.kt index 1f90a2a7224..96b206ac1a3 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolver.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolver.kt @@ -108,7 +108,7 @@ internal class FirLazyDeclarationResolver(private val firFileBuilder: FirFileBui firFile: FirFile, moduleFileCache: ModuleFileCache, toPhase: FirResolvePhase, - scopeSession: ScopeSession = ScopeSession(), + scopeSession: ScopeSession, checkPCE: Boolean = false, ) { moduleFileCache.firFileLockProvider.runCustomResolveUnderLock(firFile, checkPCE) { @@ -186,7 +186,7 @@ internal class FirLazyDeclarationResolver(private val firFileBuilder: FirFileBui fun lazyResolveDeclaration( firDeclarationToResolve: FirDeclaration, moduleFileCache: ModuleFileCache, - scopeSession: ScopeSession = ScopeSession(), + scopeSession: ScopeSession, toPhase: FirResolvePhase, checkPCE: Boolean, declarationPhaseDowngraded: Boolean = false, diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/RawFirNonLocalDeclarationBuilder.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/RawFirNonLocalDeclarationBuilder.kt index b84328063b8..12df8fe4d67 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/RawFirNonLocalDeclarationBuilder.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/RawFirNonLocalDeclarationBuilder.kt @@ -46,7 +46,7 @@ internal class RawFirNonLocalDeclarationBuilder private constructor( } } - fun buildWithRebind( + fun buildWithFunctionSymbolRebind( session: FirSession, scopeProvider: FirScopeProvider, designation: FirDeclarationDesignation, diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirFileAnnotationsResolveTransformer.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirFileAnnotationsResolveTransformer.kt index eb48fd45e35..85cc6d593ef 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirFileAnnotationsResolveTransformer.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirFileAnnotationsResolveTransformer.kt @@ -54,5 +54,7 @@ internal class FirFileAnnotationsResolveTransformer( check(annotations.all { it.resolveStatus == FirAnnotationResolveStatus.Resolved }) { "Annotation was not resolved" } } + override fun ensureResolved(declaration: FirDeclaration) = error("Not implemented") + override fun needReplacePhase(firDeclaration: FirDeclaration): Boolean = false } \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirLazyTransformerForIDE.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirLazyTransformerForIDE.kt index 1d6d8c86983..3f25fe15893 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirLazyTransformerForIDE.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirLazyTransformerForIDE.kt @@ -13,7 +13,7 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation internal interface FirLazyTransformerForIDE { fun transformDeclaration(phaseRunner: FirPhaseRunner) - fun ensureResolved(declaration: FirDeclaration): Unit = error("Not implemented") + fun ensureResolved(declaration: FirDeclaration) fun ensureResolvedDeep(declaration: FirDeclaration) { if (!enableDeepEnsure) return ensureResolved(declaration) @@ -68,6 +68,7 @@ internal interface FirLazyTransformerForIDE { val DUMMY = object : FirLazyTransformerForIDE { override fun transformDeclaration(phaseRunner: FirPhaseRunner) = Unit + override fun ensureResolved(declaration: FirDeclaration) = error("Not implemented") } } } \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/LazyTransformerFactory.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/LazyTransformerFactory.kt index 92732848515..903208dacf3 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/LazyTransformerFactory.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/LazyTransformerFactory.kt @@ -69,6 +69,6 @@ internal object LazyTransformerFactory { towerDataContextCollector, firProviderInterceptor, ) - else -> error("Non-lazy phase $this") + else -> error("Non-lazy phase $phase") } } \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/compiler/based/AbstractCompilerBasedTest.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/compiler/based/AbstractCompilerBasedTest.kt index 56d4c51f763..d3aa07de657 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/compiler/based/AbstractCompilerBasedTest.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/compiler/based/AbstractCompilerBasedTest.kt @@ -162,7 +162,7 @@ abstract class AbstractCompilerBasedTest : KotlinLightCodeInsightFixtureTestCase try { FirLazyTransformerForIDE.enableDeepEnsure = true TestRunner(configuration).runTest(path) - } catch (_: Exception) { + } finally { FirLazyTransformerForIDE.enableDeepEnsure = oldEnableDeepEnsure } }