[FIR] Add late initialization of session in FirModuleData
This commit is contained in:
committed by
TeamCityServer
parent
5cfa8694d4
commit
92d6b39ffe
+4
-8
@@ -7,27 +7,23 @@ package org.jetbrains.kotlin.fir.session
|
||||
|
||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||
import org.jetbrains.kotlin.fir.FirModuleData
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
|
||||
class FirModuleInfoBasedModuleData(
|
||||
val moduleInfo: ModuleInfo,
|
||||
override val session: FirSession
|
||||
) : FirModuleData() {
|
||||
class FirModuleInfoBasedModuleData(val moduleInfo: ModuleInfo) : FirModuleData() {
|
||||
override val name: Name
|
||||
get() = moduleInfo.name
|
||||
override val dependencies: List<FirModuleData> = moduleInfo.dependencies()
|
||||
.filterNot { it == moduleInfo }
|
||||
.map { FirModuleInfoBasedModuleData(it, session) }
|
||||
.map { FirModuleInfoBasedModuleData(it) }
|
||||
|
||||
override val dependsOnDependencies: List<FirModuleData> = moduleInfo.expectedBy
|
||||
.filterNot { it == moduleInfo }
|
||||
.map { FirModuleInfoBasedModuleData(it, session) }
|
||||
.map { FirModuleInfoBasedModuleData(it) }
|
||||
|
||||
override val friendDependencies: List<FirModuleData> = moduleInfo.modulesWhoseInternalsAreVisible()
|
||||
.filterNot { it == moduleInfo }
|
||||
.map { FirModuleInfoBasedModuleData(it, session) }
|
||||
.map { FirModuleInfoBasedModuleData(it) }
|
||||
override val platform: TargetPlatform
|
||||
get() = moduleInfo.platform
|
||||
|
||||
|
||||
@@ -78,8 +78,8 @@ object FirSessionFactory {
|
||||
lookupTracker: LookupTracker? = null,
|
||||
init: FirSessionConfigurator.() -> Unit = {}
|
||||
): FirJavaModuleBasedSession {
|
||||
return FirJavaModuleBasedSession(moduleInfo, sessionProvider).apply {
|
||||
val moduleData = FirModuleInfoBasedModuleData(moduleInfo, this)
|
||||
return FirJavaModuleBasedSession(moduleInfo, sessionProvider).apply session@{
|
||||
val moduleData = FirModuleInfoBasedModuleData(moduleInfo).apply { bindSession(this@session) }
|
||||
registerModuleData(moduleData)
|
||||
registerCliCompilerOnlyComponents()
|
||||
registerCommonComponents(languageVersionSettings)
|
||||
@@ -137,8 +137,8 @@ object FirSessionFactory {
|
||||
packagePartProvider: PackagePartProvider,
|
||||
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
|
||||
): FirLibrarySession {
|
||||
return FirLibrarySession(moduleInfo, sessionProvider).apply {
|
||||
val moduleData = FirModuleInfoBasedModuleData(moduleInfo, this)
|
||||
return FirLibrarySession(moduleInfo, sessionProvider).apply session@{
|
||||
val moduleData = FirModuleInfoBasedModuleData(moduleInfo).apply { bindSession(this@session) }
|
||||
registerCliCompilerOnlyComponents()
|
||||
registerCommonComponents(languageVersionSettings)
|
||||
|
||||
|
||||
@@ -14,7 +14,17 @@ abstract class FirModuleData : FirSessionComponent {
|
||||
abstract val dependsOnDependencies: List<FirModuleData>
|
||||
abstract val friendDependencies: List<FirModuleData>
|
||||
abstract val platform: TargetPlatform
|
||||
abstract val session: FirSession
|
||||
|
||||
private var _session: FirSession? = null
|
||||
val session: FirSession
|
||||
get() = _session!!
|
||||
|
||||
fun bindSession(session: FirSession) {
|
||||
if (_session != null) {
|
||||
error("session already bound to $this")
|
||||
}
|
||||
_session = session
|
||||
}
|
||||
}
|
||||
|
||||
class FirModuleDataImpl(
|
||||
@@ -22,8 +32,7 @@ class FirModuleDataImpl(
|
||||
override val dependencies: List<FirModuleData>,
|
||||
override val dependsOnDependencies: List<FirModuleData>,
|
||||
override val friendDependencies: List<FirModuleData>,
|
||||
override val platform: TargetPlatform,
|
||||
override val session: FirSession,
|
||||
override val platform: TargetPlatform
|
||||
) : FirModuleData()
|
||||
|
||||
val FirSession.moduleData: FirModuleData by FirSession.sessionComponentAccessor()
|
||||
|
||||
Reference in New Issue
Block a user