[LL FIR] remove abstract class LLFirModuleData with only inheritor

This commit is contained in:
Ilya Kirillov
2022-07-23 16:18:11 +02:00
parent 827c262f68
commit e462016151
12 changed files with 33 additions and 49 deletions
@@ -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
}
}
@@ -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 =
@@ -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)
@@ -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)
@@ -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)
@@ -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<FirModuleData> by lazy(LazyThreadSafetyMode.PUBLICATION) {
ktModule.directRegularDependencies.map(::LLFirKtModuleBasedModuleData)
ktModule.directRegularDependencies.map(::LLFirModuleData)
}
override val dependsOnDependencies: List<FirModuleData> by lazy(LazyThreadSafetyMode.PUBLICATION) {
ktModule.directRefinementDependencies.map(::LLFirKtModuleBasedModuleData)
ktModule.directRefinementDependencies.map(::LLFirModuleData)
}
override val friendDependencies: List<FirModuleData> 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
@@ -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)
@@ -82,7 +82,7 @@ internal fun LLFirSourcesSession.registerCompilerPluginServices(
internal fun createJavaSymbolProvider(
firSession: LLFirSession,
moduleData: LLFirKtModuleBasedModuleData,
moduleData: LLFirModuleData,
project: Project,
contentScope: GlobalSearchScope
): JavaSymbolProvider {
@@ -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)
@@ -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<LLFirModuleData>(moduleData)
return when (moduleData) {
is LLFirKtModuleBasedModuleData -> getResolvableSession(moduleData.ktModule)
}
return getResolvableSession(moduleData.ktModule)
}
fun getSession(module: KtModule): LLFirSession =
@@ -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<KtModule, FirSessionWithModificationTracker> = 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 <T> Collection<T>.reversedDependencies(getDependencies: (T) -> List<T>): Map<T, List<T>> {
@@ -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
}
@@ -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(