diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtAnalysisSession.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtAnalysisSession.kt index 6542dda006f..f40e3887b4a 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtAnalysisSession.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtAnalysisSession.kt @@ -47,7 +47,7 @@ abstract class KtAnalysisSession(final override val token: ValidityToken) : Vali override val analysisSession: KtAnalysisSession get() = this - abstract fun createContextDependentCopy(originalKtFile: KtFile, dependencyKtElement: KtElement): KtAnalysisSession + abstract fun createContextDependentCopy(originalKtFile: KtFile, elementToReanalyze: KtElement): KtAnalysisSession internal val smartCastProvider: KtSmartCastProvider get() = smartCastProviderImpl protected abstract val smartCastProviderImpl: KtSmartCastProvider diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtAnalysisSessionProvider.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtAnalysisSessionProvider.kt index 97847cb52f2..9bda94f1358 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtAnalysisSessionProvider.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtAnalysisSessionProvider.kt @@ -38,11 +38,11 @@ abstract class KtAnalysisSessionProvider : Disposable { @InvalidWayOfUsingAnalysisSession inline fun analyseInDependedAnalysisSession( originalFile: KtFile, - dependencyExpression: KtElement, + elementToReanalyze: KtElement, action: KtAnalysisSession.() -> R ): R { val dependedAnalysisSession = getAnalysisSession(originalFile, ReadActionConfinementValidityTokenFactory) - .createContextDependentCopy(originalFile, dependencyExpression) + .createContextDependentCopy(originalFile, elementToReanalyze) return analyse(dependedAnalysisSession, ReadActionConfinementValidityTokenFactory, action) } @@ -95,10 +95,10 @@ inline fun analyseWithCustomToken( @OptIn(InvalidWayOfUsingAnalysisSession::class) inline fun analyseInDependedAnalysisSession( originalFile: KtFile, - dependencyExpression: KtElement, + elementToReanalyze: KtElement, action: KtAnalysisSession.() -> R ): R = - originalFile.project.service().analyseInDependedAnalysisSession(originalFile, dependencyExpression, action) + originalFile.project.service().analyseInDependedAnalysisSession(originalFile, elementToReanalyze, action) /** * Execute given [action] in [KtAnalysisSession] context like [analyse] does but execute it in read action 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 eb0ebd1f0f5..d89d6171cfd 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 @@ -69,7 +69,6 @@ internal class FirModuleResolveStateImpl( override fun collectDiagnosticsForFile(ktFile: KtFile, filter: DiagnosticCheckerFilter): Collection> = diagnosticsCollector.collectDiagnosticsForFile(ktFile, filter) - @TestOnly internal fun getBuiltFirFileOrNull(ktFile: KtFile): FirFile? { val cache = sessionProvider.getModuleCache(ktFile.getModuleInfo() as ModuleSourceInfo) return firFileBuilder.getBuiltFirFileOrNull(ktFile, cache) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirPhaseRunner.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirPhaseRunner.kt index fcaad980a84..aafc37209d2 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirPhaseRunner.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirPhaseRunner.kt @@ -36,7 +36,6 @@ internal class FirPhaseRunner { FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE -> implicitTypesResolveLock.withLock { runPhaseWithoutLock(firFile, phase, scopeSession) } - //TODO: Make correct sync for TYPES else -> { runPhaseWithoutLock(firFile, phase, scopeSession) } @@ -52,7 +51,6 @@ internal class FirPhaseRunner { FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE -> implicitTypesResolveLock.withLock { runPhaseWithCustomResolveWithoutLock(resolve) } - //TODO: Make correct sync for TYPES else -> { runPhaseWithCustomResolveWithoutLock(resolve) } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/DeclarationCopyBuilder.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/DeclarationCopyBuilder.kt index 20d8b8f9f95..6e2a8c9e7f6 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/DeclarationCopyBuilder.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/DeclarationCopyBuilder.kt @@ -20,12 +20,10 @@ import org.jetbrains.kotlin.psi.* object DeclarationCopyBuilder { fun createDeclarationCopy( state: FirModuleResolveState, + nonLocalDeclaration: KtDeclaration, replacement: RawFirReplacement ): FirDeclaration { - val nonLocalDeclaration = LowLevelFirApiFacadeForDependentCopy.findEnclosingNonLocalDeclaration(replacement.from) - ?: error("Cannot find enclosing declaration for ${replacement.from.getElementTextInContext()}") - return when (nonLocalDeclaration) { is KtNamedFunction -> createFunctionCopy( nonLocalDeclaration, diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacadeForDependentCopy.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacadeForResolveOnAir.kt similarity index 76% rename from idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacadeForDependentCopy.kt rename to idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacadeForResolveOnAir.kt index d61d0a2b3c1..90b251658ff 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacadeForDependentCopy.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacadeForResolveOnAir.kt @@ -11,26 +11,26 @@ import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.builder.RawFirReplacement import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.realPsi -import org.jetbrains.kotlin.fir.resolve.FirTowerDataContext -import org.jetbrains.kotlin.fir.resolve.ResolutionMode -import org.jetbrains.kotlin.fir.resolve.ScopeSession -import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer +import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirTowerDataContextCollector +import org.jetbrains.kotlin.fir.scopes.createImportingScopes import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid +import org.jetbrains.kotlin.idea.caches.project.getModuleInfo import org.jetbrains.kotlin.idea.fir.low.level.api.FirModuleResolveStateDepended import org.jetbrains.kotlin.idea.fir.low.level.api.FirModuleResolveStateImpl import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.FirTowerContextProvider import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.FirTowerDataContextAllElementsCollector -import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.SingleElementTowerProvider +import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.FileTowerProvider import org.jetbrains.kotlin.idea.fir.low.level.api.file.structure.FirElementsRecorder import org.jetbrains.kotlin.idea.fir.low.level.api.providers.firIdeProvider -import org.jetbrains.kotlin.idea.fir.low.level.api.trasformers.FirProviderInterceptorForIDE +import org.jetbrains.kotlin.idea.fir.low.level.api.sessions.FirIdeSourcesSession +import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirProviderInterceptorForIDE import org.jetbrains.kotlin.idea.fir.low.level.api.util.originalDeclaration import org.jetbrains.kotlin.idea.util.getElementTextInContext import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject -object LowLevelFirApiFacadeForDependentCopy { +object LowLevelFirApiFacadeForResolveOnAir { private fun KtDeclaration.canBeEnclosingDeclaration(): Boolean = when (this) { is KtNamedFunction -> isTopLevel || containingClassOrObject?.isLocal == false @@ -40,7 +40,7 @@ object LowLevelFirApiFacadeForDependentCopy { else -> false } - fun findEnclosingNonLocalDeclaration(position: KtElement): KtNamedDeclaration? = + private fun findEnclosingNonLocalDeclaration(position: KtElement): KtNamedDeclaration? = position.parentsOfType().firstOrNull { ktDeclaration -> ktDeclaration.canBeEnclosingDeclaration() } @@ -71,7 +71,7 @@ object LowLevelFirApiFacadeForDependentCopy { require(!elementToResolve.isPhysical) val collector = FirTowerDataContextAllElementsCollector() - val declaration = runBodyResolve( + val declaration = runResolveBodyResolveOnAir( state = state, replacement = RawFirReplacement(place, elementToResolve), collector = null, @@ -102,10 +102,10 @@ object LowLevelFirApiFacadeForDependentCopy { require(place.isPhysical) return if (place is KtFile) { - onAirGetTowerContextForFile(state, place) + FileTowerProvider(place, onAirGetTowerContextForFile(state, place)) } else { FirTowerDataContextAllElementsCollector().also { - runBodyResolve(state, collector = it, replacement = RawFirReplacement(place, place)) + runResolveBodyResolveOnAir(state, collector = it, replacement = RawFirReplacement(place, place)) } } } @@ -113,44 +113,38 @@ object LowLevelFirApiFacadeForDependentCopy { private fun onAirGetTowerContextForFile( state: FirModuleResolveState, file: KtFile, - ): FirTowerContextProvider { + ): FirTowerDataContext { + require(file.isPhysical) + val session = state.getSessionFor(file.getModuleInfo()) as FirIdeSourcesSession + val firFile = session.firFileBuilder.getFirFileResolvedToPhaseWithCaching( + file, + session.cache, + FirResolvePhase.IMPORTS, + ScopeSession(), + checkPCE = false + ) - val firFile = state.getOrBuildFirFor(file) as FirFile - - val fileTransformer = object : FirBodyResolveTransformer( - session = firFile.declarationSiteSession, - phase = FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE, - implicitTypeOnly = true, - scopeSession = ScopeSession() - ) { - var result: FirTowerDataContext? = null - private set - - override fun transformDeclarationContent(declaration: FirDeclaration, data: ResolutionMode): FirDeclaration { - check(declaration is FirFile) - result = context.towerDataContext - return declaration - } - } - firFile.transform(fileTransformer, ResolutionMode.ContextDependent) - - val fileContext = fileTransformer.result - check(fileContext != null) { "File context not found for physical file" } - - return SingleElementTowerProvider(file, fileContext) + val importingScopes = createImportingScopes(firFile, firFile.declarationSiteSession, ScopeSession(), useCaching = false) + val fileScopeElements = importingScopes.map { it.asTowerDataElement(isLocal = false) } + return FirTowerDataContext().addNonLocalTowerDataElements(fileScopeElements) } - fun getResolveStateForDependedCopy( + fun getResolveStateForDependentCopy( originalState: FirModuleResolveState, originalKtFile: KtFile, - dependencyKtElement: KtElement + elementToAnalyze: KtElement ): FirModuleResolveState { require(originalState is FirModuleResolveStateImpl) - require(dependencyKtElement !is KtFile) { "KtFile for dependency element not supported" } - require(!dependencyKtElement.isPhysical) { "Depended state should be build only for non-physical elements" } + require(elementToAnalyze !is KtFile) { "KtFile for dependency element not supported" } + require(!elementToAnalyze.isPhysical) { "Depended state should be build only for non-physical elements" } + + val dependencyNonLocalDeclaration = findEnclosingNonLocalDeclaration(elementToAnalyze) + ?: return FirModuleResolveStateDepended( + originalState, + FileTowerProvider(elementToAnalyze.containingKtFile, onAirGetTowerContextForFile(originalState, originalKtFile)), + emptyMap() + ) - val dependencyNonLocalDeclaration = findEnclosingNonLocalDeclaration(dependencyKtElement) - ?: error("Cannot find enclosing declaration for ${dependencyKtElement.getElementTextInContext()}") val sameDeclarationInOriginalFile = locateDeclarationInFileByOffset(dependencyNonLocalDeclaration, originalKtFile) ?: error("Cannot find original function matching to ${dependencyNonLocalDeclaration.getElementTextInContext()} in $originalKtFile") @@ -161,7 +155,7 @@ object LowLevelFirApiFacadeForDependentCopy { ) val collector = FirTowerDataContextAllElementsCollector() - val copiedFirDeclaration = runBodyResolve( + val copiedFirDeclaration = runResolveBodyResolveOnAir( originalState, collector = collector, replacement = RawFirReplacement(sameDeclarationInOriginalFile, dependencyNonLocalDeclaration), @@ -172,18 +166,24 @@ object LowLevelFirApiFacadeForDependentCopy { return FirModuleResolveStateDepended(originalState, collector, recordedMap) } - private fun runBodyResolve( + private fun runResolveBodyResolveOnAir( state: FirModuleResolveStateImpl, replacement: RawFirReplacement, collector: FirTowerDataContextCollector? = null, useFirProviderInterceptor: Boolean = false ): FirDeclaration { + + val nonLocalDeclaration = findEnclosingNonLocalDeclaration(replacement.from) + ?: error("Cannot find enclosing declaration for ${replacement.from.getElementTextInContext()}") + val copiedFirDeclaration = DeclarationCopyBuilder.createDeclarationCopy( state = state, + nonLocalDeclaration = nonLocalDeclaration, replacement = replacement, ) - val originalFirFile = state.getOrBuildFirFor(replacement.from.containingKtFile) as FirFile + val originalFirFile = state.getBuiltFirFileOrNull(replacement.from.containingKtFile) + ?: error("Original fir file should be already built") val firProviderInterceptor = if (useFirProviderInterceptor) FirProviderInterceptorForIDE.createForFirElement( diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirTowerDataContextCollector.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirTowerDataContextCollector.kt index a792711d98d..8e03e643271 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirTowerDataContextCollector.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirTowerDataContextCollector.kt @@ -19,12 +19,12 @@ interface FirTowerContextProvider { fun getClosestAvailableParentContext(ktElement: KtElement): FirTowerDataContext? } -internal class SingleElementTowerProvider( - private val element: KtElement, +internal class FileTowerProvider( + private val file: KtFile, private val context: FirTowerDataContext ) : FirTowerContextProvider { override fun getClosestAvailableParentContext(ktElement: KtElement): FirTowerDataContext? = - if (element == ktElement) context else null + if (file == ktElement.containingKtFile) context else null } internal class FirTowerDataContextAllElementsCollector : FirTowerDataContextCollector, FirTowerContextProvider { 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 8cb4f3d6fa0..685ce0e701d 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 @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.getNonLocalCo import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.FirFileBuilder import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.ModuleFileCache import org.jetbrains.kotlin.idea.fir.low.level.api.providers.firIdeProvider -import org.jetbrains.kotlin.idea.fir.low.level.api.trasformers.* +import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.* import org.jetbrains.kotlin.idea.fir.low.level.api.util.* import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject @@ -34,6 +34,7 @@ internal class FirLazyDeclarationResolver( moduleFileCache: ModuleFileCache, scopeSession: ScopeSession, ) { + check(firFile.resolvePhase >= FirResolvePhase.IMPORTS) firFileBuilder.runCustomResolveUnderLock(firFile, moduleFileCache) { val transformer = FirFileAnnotationsResolveTransformer(firFile.moduleData.session, scopeSession) firFile.accept(transformer, ResolutionMode.ContextDependent) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirDesignatedBodyResolveTransformerForIDE.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedBodyResolveTransformerForIDE.kt similarity index 97% rename from idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirDesignatedBodyResolveTransformerForIDE.kt rename to idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedBodyResolveTransformerForIDE.kt index 03ac2a5b15a..3529e590d96 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirDesignatedBodyResolveTransformerForIDE.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedBodyResolveTransformerForIDE.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.idea.fir.low.level.api.trasformers +package org.jetbrains.kotlin.idea.fir.low.level.api.transformers import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirDeclaration diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirDesignatedContractsResolveTransformerForIDE.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedContractsResolveTransformerForIDE.kt similarity index 96% rename from idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirDesignatedContractsResolveTransformerForIDE.kt rename to idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedContractsResolveTransformerForIDE.kt index aa83403e296..9f931798650 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirDesignatedContractsResolveTransformerForIDE.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedContractsResolveTransformerForIDE.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.idea.fir.low.level.api.trasformers +package org.jetbrains.kotlin.idea.fir.low.level.api.transformers import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirDeclaration diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirDesignatedImplicitTypesTransformerForIDE.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedImplicitTypesTransformerForIDE.kt similarity index 97% rename from idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirDesignatedImplicitTypesTransformerForIDE.kt rename to idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedImplicitTypesTransformerForIDE.kt index 0c645941de8..d0312f284ec 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirDesignatedImplicitTypesTransformerForIDE.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedImplicitTypesTransformerForIDE.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.idea.fir.low.level.api.trasformers +package org.jetbrains.kotlin.idea.fir.low.level.api.transformers import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirDeclaration diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirDesignatedStatusResolveTransformerForIDE.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedStatusResolveTransformerForIDE.kt similarity index 95% rename from idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirDesignatedStatusResolveTransformerForIDE.kt rename to idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedStatusResolveTransformerForIDE.kt index 69d6173ba30..344680ae47e 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirDesignatedStatusResolveTransformerForIDE.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedStatusResolveTransformerForIDE.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.idea.fir.low.level.api.trasformers +package org.jetbrains.kotlin.idea.fir.low.level.api.transformers import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* @@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.resolve.transformers.FirStatusResolveTransformer import org.jetbrains.kotlin.fir.resolve.transformers.StatusComputationSession import org.jetbrains.kotlin.fir.visitors.transformSingle import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation -import org.jetbrains.kotlin.idea.fir.low.level.api.trasformers.FirLazyTransformerForIDE.Companion.ensurePhase +import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.ensurePhase class FirDesignatedStatusResolveTransformerForIDE( private val designation: FirDeclarationDesignation, diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirDesignatedSupertypeResolverTransformerForIDE.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedSupertypeResolverTransformerForIDE.kt similarity index 91% rename from idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirDesignatedSupertypeResolverTransformerForIDE.kt rename to idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedSupertypeResolverTransformerForIDE.kt index 5ffefb44892..8bb1ab8c4e7 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirDesignatedSupertypeResolverTransformerForIDE.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedSupertypeResolverTransformerForIDE.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.idea.fir.low.level.api.trasformers +package org.jetbrains.kotlin.idea.fir.low.level.api.transformers import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession @@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.resolve.transformers.FirProviderInterceptorForSu import org.jetbrains.kotlin.fir.resolve.transformers.FirSupertypeResolverVisitor import org.jetbrains.kotlin.fir.resolve.transformers.SupertypeComputationSession import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation -import org.jetbrains.kotlin.idea.fir.low.level.api.trasformers.FirLazyTransformerForIDE.Companion.ensurePhase +import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.ensurePhase internal class FirDesignatedSupertypeResolverTransformerForIDE( private val designation: FirDeclarationDesignation, diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirDesignatedTypeResolverTransformerForIDE.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedTypeResolverTransformerForIDE.kt similarity index 91% rename from idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirDesignatedTypeResolverTransformerForIDE.kt rename to idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedTypeResolverTransformerForIDE.kt index 6cf78db659b..8a081dbd991 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirDesignatedTypeResolverTransformerForIDE.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedTypeResolverTransformerForIDE.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.idea.fir.low.level.api.trasformers +package org.jetbrains.kotlin.idea.fir.low.level.api.transformers import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* @@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.transformers.FirTypeResolveTransformer import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation -import org.jetbrains.kotlin.idea.fir.low.level.api.trasformers.FirLazyTransformerForIDE.Companion.ensurePhase +import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.ensurePhase class FirDesignatedTypeResolverTransformerForIDE( private val originalFile: FirFile, diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirDesignationIterator.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignationIterator.kt similarity index 93% rename from idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirDesignationIterator.kt rename to idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignationIterator.kt index 6e5eabbf638..15fb274dd85 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirDesignationIterator.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignationIterator.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.idea.fir.low.level.api.trasformers +package org.jetbrains.kotlin.idea.fir.low.level.api.transformers import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirFileAnnotationsResolveTransformer.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirFileAnnotationsResolveTransformer.kt similarity index 96% rename from idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirFileAnnotationsResolveTransformer.kt rename to idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirFileAnnotationsResolveTransformer.kt index aeac0effb5b..9585356bf43 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirFileAnnotationsResolveTransformer.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirFileAnnotationsResolveTransformer.kt @@ -1,4 +1,4 @@ -package org.jetbrains.kotlin.idea.fir.low.level.api.trasformers +package org.jetbrains.kotlin.idea.fir.low.level.api.transformers import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirDeclaration diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirLazyTransformerForIDE.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirLazyTransformerForIDE.kt similarity index 94% rename from idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirLazyTransformerForIDE.kt rename to idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirLazyTransformerForIDE.kt index e0a4184f834..afe5d5d5a1b 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirLazyTransformerForIDE.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirLazyTransformerForIDE.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.idea.fir.low.level.api.trasformers +package org.jetbrains.kotlin.idea.fir.low.level.api.transformers import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirProviderInterceptorForIDE.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirProviderInterceptorForIDE.kt similarity index 97% rename from idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirProviderInterceptorForIDE.kt rename to idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirProviderInterceptorForIDE.kt index 66ee06004a8..8690adff5e8 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/FirProviderInterceptorForIDE.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirProviderInterceptorForIDE.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.idea.fir.low.level.api.trasformers +package org.jetbrains.kotlin.idea.fir.low.level.api.transformers import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/IDEDeclarationTransformer.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/IDEDeclarationTransformer.kt similarity index 97% rename from idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/IDEDeclarationTransformer.kt rename to idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/IDEDeclarationTransformer.kt index 94f6598b2f9..eb37c6f9532 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trasformers/IDEDeclarationTransformer.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/IDEDeclarationTransformer.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.idea.fir.low.level.api.trasformers +package org.jetbrains.kotlin.idea.fir.low.level.api.transformers import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.declarations.FirDeclaration diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtFirAnalysisSession.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtFirAnalysisSession.kt index 22c6f7da563..c3b93cb96b1 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtFirAnalysisSession.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtFirAnalysisSession.kt @@ -73,16 +73,16 @@ private constructor( override val subtypingComponentImpl = KtFirSubtypingComponent(this, token) - override fun createContextDependentCopy(originalKtFile: KtFile, dependencyKtElement: KtElement): KtAnalysisSession { + override fun createContextDependentCopy(originalKtFile: KtFile, elementToReanalyze: KtElement): KtAnalysisSession { check(mode == AnalysisSessionMode.REGULAR) { "Cannot create context-dependent copy of KtAnalysis session from a context dependent one" } - require(!dependencyKtElement.isPhysical) { "Depended context should be build only for non-physical elements" } + require(!elementToReanalyze.isPhysical) { "Depended context should be build only for non-physical elements" } - val contextResolveState = LowLevelFirApiFacadeForDependentCopy.getResolveStateForDependedCopy( + val contextResolveState = LowLevelFirApiFacadeForResolveOnAir.getResolveStateForDependentCopy( originalState = firResolveState, originalKtFile = originalKtFile, - dependencyKtElement = dependencyKtElement + elementToAnalyze = elementToReanalyze ) return KtFirAnalysisSession( diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/analysisSessionInternalUtils.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/analysisSessionInternalUtils.kt index a4abd26ad93..afa052ccda9 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/analysisSessionInternalUtils.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/analysisSessionInternalUtils.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.idea.frontend.api.InvalidWayOfUsingAnalysisSession import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSessionProvider import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirSymbol +import org.jetbrains.kotlin.idea.frontend.api.fir.utils.EntityWasGarbageCollectedException import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol @OptIn(InvalidWayOfUsingAnalysisSession::class) @@ -23,6 +24,6 @@ internal inline fun analyzeWithSymbolAsContext( val analysisSessionProvider = resolveState.project.service() check(analysisSessionProvider is KtFirAnalysisSessionProvider) val analysisSession = analysisSessionProvider.getCachedAnalysisSession(resolveState, token) - ?: error("KtAnalysisSession assotiated with symbol was invalidated") + ?: throw EntityWasGarbageCollectedException("KtAnalysisSession") return action(analysisSession) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCompletionCandidateChecker.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCompletionCandidateChecker.kt index f9f66ff06a9..9a837b2e9e5 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCompletionCandidateChecker.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCompletionCandidateChecker.kt @@ -8,7 +8,7 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.components import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.resolve.calls.ImplicitReceiverValue -import org.jetbrains.kotlin.idea.fir.low.level.api.api.LowLevelFirApiFacadeForDependentCopy.getTowerContextProvider +import org.jetbrains.kotlin.idea.fir.low.level.api.api.LowLevelFirApiFacadeForResolveOnAir.getTowerContextProvider import org.jetbrains.kotlin.idea.fir.low.level.api.api.getFirFile import org.jetbrains.kotlin.idea.fir.low.level.api.api.getOrBuildFirOfType import org.jetbrains.kotlin.idea.fir.low.level.api.resolver.ResolutionParameters diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirReferenceShortener.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirReferenceShortener.kt index 2d1a2012a8c..6e63956ad9f 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirReferenceShortener.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirReferenceShortener.kt @@ -45,8 +45,7 @@ import org.jetbrains.kotlin.fir.types.classId import org.jetbrains.kotlin.fir.types.lowerBoundIfFlexible import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState -import org.jetbrains.kotlin.idea.fir.low.level.api.api.LowLevelFirApiFacadeForDependentCopy -import org.jetbrains.kotlin.idea.fir.low.level.api.api.LowLevelFirApiFacadeForDependentCopy.getTowerContextProvider +import org.jetbrains.kotlin.idea.fir.low.level.api.api.LowLevelFirApiFacadeForResolveOnAir import org.jetbrains.kotlin.idea.fir.low.level.api.api.getOrBuildFir import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.FirTowerContextProvider import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken @@ -76,7 +75,7 @@ internal class KtFirReferenceShortener( val firDeclaration = declarationToVisit.getOrBuildFir(firResolveState) val towerContext = - LowLevelFirApiFacadeForDependentCopy.onAirGetTowerContextProvider(firResolveState, declarationToVisit) + LowLevelFirApiFacadeForResolveOnAir.onAirGetTowerContextProvider(firResolveState, declarationToVisit) val collector = ElementsToShortenCollector(context, towerContext) firDeclaration.accept(collector) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirScopeProvider.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirScopeProvider.kt index 4911c7eba97..86bb246a4e7 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirScopeProvider.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirScopeProvider.kt @@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.resolve.scope import org.jetbrains.kotlin.fir.scopes.* import org.jetbrains.kotlin.fir.scopes.impl.* import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState -import org.jetbrains.kotlin.idea.fir.low.level.api.api.LowLevelFirApiFacadeForDependentCopy.getTowerContextProvider +import org.jetbrains.kotlin.idea.fir.low.level.api.api.LowLevelFirApiFacadeForResolveOnAir.getTowerContextProvider import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.components.KtImplicitReceiver