From e462016151753588f363b5de42142b2f8436dba0 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Sat, 23 Jul 2022 16:18:11 +0200 Subject: [PATCH] [LL FIR] remove abstract class LLFirModuleData with only inheritor --- ...irDeserializedDeclarationSourceProvider.kt | 8 ++--- .../analysis/api/fir/utils/ktSymbolUtils.kt | 8 ++--- .../AbstractFirIdeDiagnosticsCollector.kt | 4 +-- .../structure/LLFirBuiltinsSessionFactory.kt | 2 +- .../structure/LLFirLibrarySessionFactory.kt | 5 +--- .../fir/project/structure/LLFirModuleData.kt | 29 +++++++------------ .../LLFirNonUnderContentRootSessionFactory.kt | 2 +- .../structure/sessionFactoryHelpers.kt | 2 +- .../api/fir/sessions/LLFirSessionFactory.kt | 4 +-- .../api/fir/sessions/LLFirSessionProvider.kt | 5 +--- .../sessions/LLFirSessionProviderStorage.kt | 9 +++--- .../state/LLFirResolvableResolveSession.kt | 4 +-- 12 files changed, 33 insertions(+), 49 deletions(-) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/FirDeserializedDeclarationSourceProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/FirDeserializedDeclarationSourceProvider.kt index 2634748c1cd..0357e6ea84d 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/FirDeserializedDeclarationSourceProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/FirDeserializedDeclarationSourceProvider.kt @@ -9,8 +9,8 @@ import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.analysis.low.level.api.fir.api.KtDeclarationAndFirDeclarationEqualityChecker -import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirKtModuleBasedModuleData -import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.firModuleData +import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirModuleData +import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.llFirModuleData import org.jetbrains.kotlin.analysis.project.structure.KtBuiltinsModule import org.jetbrains.kotlin.analysis.providers.createDeclarationProvider import org.jetbrains.kotlin.fir.FirElement @@ -117,9 +117,9 @@ internal object FirDeserializedDeclarationSourceProvider { is FirCallableDeclaration -> unwrapFakeOverrides() else -> this } - val moduleData = original.firModuleData as LLFirKtModuleBasedModuleData + val moduleData = original.llFirModuleData return when (val ktModule = moduleData.ktModule) { - is KtBuiltinsModule -> GlobalSearchScope.allScope(project) + is KtBuiltinsModule -> GlobalSearchScope.allScope(project) // TODO should be some stdlib else -> ktModule.contentScope } } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/utils/ktSymbolUtils.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/utils/ktSymbolUtils.kt index ab65ef2fc61..9fcf33a3abd 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/utils/ktSymbolUtils.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/utils/ktSymbolUtils.kt @@ -8,8 +8,8 @@ package org.jetbrains.kotlin.analysis.api.fir.utils import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession -import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirKtModuleBasedModuleData -import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.firModuleData +import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirModuleData +import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.llFirModuleData import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.fir.dispatchReceiverClassOrNull import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol @@ -31,9 +31,7 @@ fun FirBasedSymbol<*>.getContainingKtModule(firResolveSession: LLFirResolveSessi } else -> this } - return when (val moduleData = target.firModuleData) { - is LLFirKtModuleBasedModuleData -> moduleData.ktModule - } + return target.llFirModuleData.ktModule } fun KtSymbol.getContainingKtModule(firResolveSession: LLFirResolveSession): KtModule = diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostics/AbstractFirIdeDiagnosticsCollector.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostics/AbstractFirIdeDiagnosticsCollector.kt index eed64f7477c..d9621b13296 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostics/AbstractFirIdeDiagnosticsCollector.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostics/AbstractFirIdeDiagnosticsCollector.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostics -import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.firKtModuleBasedModuleData +import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.llFirModuleData import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.analysis.CheckersComponentInternal @@ -48,7 +48,7 @@ private object CheckersFactory { reporter: DiagnosticReporter, useExtendedCheckers: Boolean ): DiagnosticCollectorComponents { - val module = session.firKtModuleBasedModuleData.ktModule + val module = session.llFirModuleData.ktModule val platform = module.platform.componentPlatforms.first() val extensionCheckers = session.extensionService.additionalCheckers val declarationCheckers = createDeclarationCheckers(useExtendedCheckers, platform, extensionCheckers) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirBuiltinsSessionFactory.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirBuiltinsSessionFactory.kt index f69946104cb..477b0758983 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirBuiltinsSessionFactory.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirBuiltinsSessionFactory.kt @@ -46,7 +46,7 @@ import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices private fun createBuiltinsAndCloneableSession(platform: TargetPlatform): LLFirBuiltinsAndCloneableSession { val builtinsModule = KtBuiltinsModule(platform, platform.getAnalyzerServices(), project) return LLFirBuiltinsAndCloneableSession(builtinsModule, project, builtInTypes).apply session@{ - val moduleData = LLFirKtModuleBasedModuleData(builtinsModule).apply { + val moduleData = LLFirModuleData(builtinsModule).apply { bindSession(this@session) } registerIdeComponents(project) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirLibrarySessionFactory.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirLibrarySessionFactory.kt index 1b955bdac78..e1c8f25cc87 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirLibrarySessionFactory.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirLibrarySessionFactory.kt @@ -8,11 +8,8 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure import com.intellij.openapi.project.Project import org.jetbrains.kotlin.analysis.low.level.api.fir.providers.LLFirFirClassByPsiClassProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.providers.LLFirLibrarySessionProvider -import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirLibraryLikeSession import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirLibrarySession import org.jetbrains.kotlin.analysis.project.structure.KtBinaryModule -import org.jetbrains.kotlin.analysis.project.structure.KtModule -import org.jetbrains.kotlin.analysis.project.structure.allDirectDependenciesOfType import org.jetbrains.kotlin.analysis.providers.createLibrariesModificationTracker import org.jetbrains.kotlin.analysis.utils.caches.softCachedValue import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl @@ -53,7 +50,7 @@ internal class LLFirLibrarySessionFactory( val platform = ktLibraryModule.platform val builtinsSession = LLFirBuiltinsSessionFactory.getInstance(project).getBuiltinsSession(platform) return LLFirLibrarySession(ktLibraryModule, project, builtinsSession.builtinTypes).apply session@{ - val moduleData = LLFirKtModuleBasedModuleData(ktLibraryModule).apply { bindSession(this@session) } + val moduleData = LLFirModuleData(ktLibraryModule).apply { bindSession(this@session) } registerModuleData(moduleData) registerIdeComponents(project) register(FirPhaseManager::class, FirPhaseCheckingPhaseManager) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirModuleData.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirModuleData.kt index 1499e2e8044..386896d7c4b 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirModuleData.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirModuleData.kt @@ -15,43 +15,36 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices -sealed class LLFirModuleData : FirModuleData() - -val FirDeclaration.firModuleData: LLFirModuleData +val FirDeclaration.llFirModuleData: LLFirModuleData get() { return moduleData as LLFirModuleData } -val FirSession.firModuleData: LLFirModuleData +val FirSession.llFirModuleData: LLFirModuleData get() { return moduleData as LLFirModuleData } -val FirSession.firKtModuleBasedModuleData: LLFirKtModuleBasedModuleData - get() { - return moduleData as LLFirKtModuleBasedModuleData - } + +val FirBasedSymbol<*>.llFirModuleData: LLFirModuleData + get() = fir.llFirModuleData -val FirBasedSymbol<*>.firModuleData: LLFirModuleData - get() = fir.firModuleData - - -class LLFirKtModuleBasedModuleData( +class LLFirModuleData( val ktModule: KtModule, -) : LLFirModuleData() { +) : FirModuleData() { override val name: Name get() = Name.special("<${ktModule.moduleDescription}>") override val dependencies: List by lazy(LazyThreadSafetyMode.PUBLICATION) { - ktModule.directRegularDependencies.map(::LLFirKtModuleBasedModuleData) + ktModule.directRegularDependencies.map(::LLFirModuleData) } override val dependsOnDependencies: List by lazy(LazyThreadSafetyMode.PUBLICATION) { - ktModule.directRefinementDependencies.map(::LLFirKtModuleBasedModuleData) + ktModule.directRefinementDependencies.map(::LLFirModuleData) } override val friendDependencies: List by lazy(LazyThreadSafetyMode.PUBLICATION) { - ktModule.directRefinementDependencies.map(::LLFirKtModuleBasedModuleData) + ktModule.directRefinementDependencies.map(::LLFirModuleData) } override val platform: TargetPlatform get() = ktModule.platform @@ -62,7 +55,7 @@ class LLFirKtModuleBasedModuleData( if (this === other) return true if (javaClass != other?.javaClass) return false - other as LLFirKtModuleBasedModuleData + other as LLFirModuleData if (ktModule != other.ktModule) return false diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirNonUnderContentRootSessionFactory.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirNonUnderContentRootSessionFactory.kt index 030dbd95ea7..03516a99be3 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirNonUnderContentRootSessionFactory.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirNonUnderContentRootSessionFactory.kt @@ -61,7 +61,7 @@ internal class LLFirNonUnderContentRootSessionFactory(private val project: Proje components.session = session return session.apply session@{ - val moduleData = LLFirKtModuleBasedModuleData(module).apply { bindSession(this@session) } + val moduleData = LLFirModuleData(module).apply { bindSession(this@session) } registerModuleData(moduleData) register(FirKotlinScopeProvider::class, scopeProvider) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/sessionFactoryHelpers.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/sessionFactoryHelpers.kt index b80c4adbb5d..6a3e16af96f 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/sessionFactoryHelpers.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/sessionFactoryHelpers.kt @@ -82,7 +82,7 @@ internal fun LLFirSourcesSession.registerCompilerPluginServices( internal fun createJavaSymbolProvider( firSession: LLFirSession, - moduleData: LLFirKtModuleBasedModuleData, + moduleData: LLFirModuleData, project: Project, contentScope: GlobalSearchScope ): JavaSymbolProvider { diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionFactory.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionFactory.kt index 6709b0d823b..db7161d71ae 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionFactory.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionFactory.kt @@ -83,7 +83,7 @@ internal object LLFirSessionFactory { components.session = session return session.apply session@{ - val moduleData = LLFirKtModuleBasedModuleData(module).apply { bindSession(this@session) } + val moduleData = LLFirModuleData(module).apply { bindSession(this@session) } registerModuleData(moduleData) register(FirKotlinScopeProvider::class, scopeProvider) @@ -187,7 +187,7 @@ internal object LLFirSessionFactory { components.session = session return session.apply session@{ - val moduleData = LLFirKtModuleBasedModuleData(module).apply { bindSession(this@session) } + val moduleData = LLFirModuleData(module).apply { bindSession(this@session) } registerModuleData(moduleData) register(FirKotlinScopeProvider::class, scopeProvider) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionProvider.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionProvider.kt index 691ce10d7df..6bd065cb8fa 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionProvider.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionProvider.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.sessions import com.intellij.openapi.project.Project import org.jetbrains.kotlin.analysis.api.impl.barebone.annotations.Immutable -import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirKtModuleBasedModuleData import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirModuleData import org.jetbrains.kotlin.analysis.low.level.api.fir.providers.LLFirDependentModuleProviders import org.jetbrains.kotlin.analysis.project.structure.KtModule @@ -29,9 +28,7 @@ class LLFirSessionProvider internal constructor( override fun getSession(moduleData: FirModuleData): LLFirSession { requireIsInstance(moduleData) - return when (moduleData) { - is LLFirKtModuleBasedModuleData -> getResolvableSession(moduleData.ktModule) - } + return getResolvableSession(moduleData.ktModule) } fun getSession(module: KtModule): LLFirSession = diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionProviderStorage.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionProviderStorage.kt index 6df3e916962..b029110f631 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionProviderStorage.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionProviderStorage.kt @@ -14,12 +14,11 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirGlobalResolveCompone import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirBuiltinsSessionFactory import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirLibrarySessionFactory import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirNonUnderContentRootSessionFactory -import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.firKtModuleBasedModuleData +import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.llFirModuleData import org.jetbrains.kotlin.analysis.low.level.api.fir.util.addValueFor import org.jetbrains.kotlin.analysis.low.level.api.fir.util.executeWithoutPCE import org.jetbrains.kotlin.analysis.project.structure.* import org.jetbrains.kotlin.analysis.providers.createModuleWithoutDependenciesOutOfBlockModificationTracker -import java.util.concurrent.ConcurrentHashMap class LLFirSessionProviderStorage(val project: Project) { private val sessionsCache = LLFirSessionsCache() @@ -81,7 +80,7 @@ private class LLFirSessionsCache { private var mappings: PersistentMap = persistentMapOf() val sessionInvalidator: LLFirSessionInvalidator = LLFirSessionInvalidator { session -> - mappings[session.firKtModuleBasedModuleData.ktModule]?.invalidate() + mappings[session.llFirModuleData.ktModule]?.invalidate() } @@ -121,7 +120,7 @@ private class LLFirSessionsCache { } return wasSessionInvalidated.entries .mapNotNull { (session, wasInvalidated) -> session.takeUnless { wasInvalidated } } - .associate { session -> session.firSession.firKtModuleBasedModuleData.ktModule to session.firSession } + .associate { session -> session.firSession.llFirModuleData.ktModule to session.firSession } } private fun Collection.reversedDependencies(getDependencies: (T) -> List): Map> { @@ -140,7 +139,7 @@ private class FirSessionWithModificationTracker( val firSession: LLFirResolvableModuleSession, ) { private val modificationTracker = - when (val ktModule = firSession.firKtModuleBasedModuleData.ktModule) { + when (val ktModule = firSession.llFirModuleData.ktModule) { is KtSourceModule -> ktModule.createModuleWithoutDependenciesOutOfBlockModificationTracker(project) else -> ModificationTracker.NEVER_CHANGED } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLFirResolvableResolveSession.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLFirResolvableResolveSession.kt index 4ffe9ee93bb..ae5a16ca019 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLFirResolvableResolveSession.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/state/LLFirResolvableResolveSession.kt @@ -10,7 +10,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirModuleResolveCompone import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirTowerContextProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.getNonLocalContainingOrThisDeclaration -import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.firModuleData +import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.llFirModuleData import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirLibrarySession import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirResolvableModuleSession import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSession @@ -133,7 +133,7 @@ internal abstract class LLFirResolvableResolveSession( override fun resolveFirToPhase(declaration: FirDeclaration, toPhase: FirResolvePhase) { if (toPhase == FirResolvePhase.RAW_FIR) return - val llFirResolvableModuleSession = declaration.firModuleData.session as? LLFirResolvableModuleSession ?: return + val llFirResolvableModuleSession = declaration.llFirModuleData.session as? LLFirResolvableModuleSession ?: return val moduleComponents = llFirResolvableModuleSession.moduleComponents moduleComponents.lazyFirDeclarationsResolver.lazyResolveDeclaration(