[FIR] Add kind to all FirSessions

This commit is contained in:
Dmitriy Novozhilov
2021-05-31 16:40:59 +03:00
committed by teamcityserver
parent 2c1ada131d
commit 8729421e7a
8 changed files with 17 additions and 16 deletions
@@ -131,7 +131,7 @@ object FirSessionFactory {
lookupTracker: LookupTracker? = null, lookupTracker: LookupTracker? = null,
init: FirSessionConfigurator.() -> Unit = {} init: FirSessionConfigurator.() -> Unit = {}
): FirSession { ): FirSession {
return FirCliSession(sessionProvider, FirCliSession.Kind.Source).apply session@{ return FirCliSession(sessionProvider, FirSession.Kind.Source).apply session@{
moduleData.bindSession(this@session) moduleData.bindSession(this@session)
sessionProvider.registerSession(moduleData, this@session) sessionProvider.registerSession(moduleData, this@session)
registerModuleData(moduleData) registerModuleData(moduleData)
@@ -197,7 +197,7 @@ object FirSessionFactory {
packagePartProvider: PackagePartProvider, packagePartProvider: PackagePartProvider,
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT, languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
): FirSession { ): FirSession {
return FirCliSession(sessionProvider, FirCliSession.Kind.Library).apply session@{ return FirCliSession(sessionProvider, FirSession.Kind.Library).apply session@{
moduleDataProvider.allModuleData.forEach { moduleDataProvider.allModuleData.forEach {
sessionProvider.registerSession(it, this) sessionProvider.registerSession(it, this)
it.bindSession(this) it.bindSession(this)
@@ -271,7 +271,7 @@ object FirSessionFactory {
@TestOnly @TestOnly
fun createEmptySession(): FirSession { fun createEmptySession(): FirSession {
return object : FirSession(null) {}.apply { return object : FirSession(null, Kind.Source) {}.apply {
val moduleData = FirModuleDataImpl( val moduleData = FirModuleDataImpl(
Name.identifier("<stub module>"), Name.identifier("<stub module>"),
dependencies = emptyList(), dependencies = emptyList(),
@@ -10,12 +10,8 @@ import org.jetbrains.kotlin.fir.*
@OptIn(PrivateSessionConstructor::class) @OptIn(PrivateSessionConstructor::class)
class FirCliSession @PrivateSessionConstructor constructor( class FirCliSession @PrivateSessionConstructor constructor(
sessionProvider: FirProjectSessionProvider, sessionProvider: FirProjectSessionProvider,
val kind: Kind // used for debug kind: Kind
) : FirSession(sessionProvider) { ) : FirSession(sessionProvider, kind)
enum class Kind {
Source, Library
}
}
class FirProjectSessionProvider : FirSessionProvider() { class FirProjectSessionProvider : FirSessionProvider() {
override fun getSession(moduleData: FirModuleData): FirSession? { override fun getSession(moduleData: FirModuleData): FirSession? {
@@ -15,7 +15,8 @@ import kotlin.reflect.KClass
interface FirSessionComponent interface FirSessionComponent
abstract class FirSession @PrivateSessionConstructor constructor( abstract class FirSession @PrivateSessionConstructor constructor(
val sessionProvider: FirSessionProvider? val sessionProvider: FirSessionProvider?,
val kind: Kind
) : ComponentArrayOwner<FirSessionComponent, FirSessionComponent>() { ) : ComponentArrayOwner<FirSessionComponent, FirSessionComponent>() {
companion object : TypeRegistry<FirSessionComponent, FirSessionComponent>() { companion object : TypeRegistry<FirSessionComponent, FirSessionComponent>() {
inline fun <reified T : FirSessionComponent> sessionComponentAccessor(): ArrayMapAccessor<FirSessionComponent, FirSessionComponent, T> { inline fun <reified T : FirSessionComponent> sessionComponentAccessor(): ArrayMapAccessor<FirSessionComponent, FirSessionComponent, T> {
@@ -40,6 +41,10 @@ abstract class FirSession @PrivateSessionConstructor constructor(
val moduleData = nullableModuleData ?: return "Libraries session" val moduleData = nullableModuleData ?: return "Libraries session"
return "Source session for module ${moduleData.name}" return "Source session for module ${moduleData.name}"
} }
enum class Kind {
Source, Library
}
} }
abstract class FirSessionProvider { abstract class FirSessionProvider {
@@ -13,4 +13,4 @@ import org.jetbrains.kotlin.fir.PrivateSessionConstructor
class FirIdeBuiltinsAndCloneableSession @PrivateSessionConstructor constructor( class FirIdeBuiltinsAndCloneableSession @PrivateSessionConstructor constructor(
override val project: Project, override val project: Project,
builtinTypes: BuiltinTypes, builtinTypes: BuiltinTypes,
) : FirIdeSession(builtinTypes) ) : FirIdeSession(builtinTypes, Kind.Library)
@@ -19,4 +19,4 @@ internal class FirIdeLibrariesSession @PrivateSessionConstructor constructor(
override val project: Project, override val project: Project,
override val scope: GlobalSearchScope, override val scope: GlobalSearchScope,
builtinTypes: BuiltinTypes, builtinTypes: BuiltinTypes,
) : FirIdeModuleSession(builtinTypes) ) : FirIdeModuleSession(builtinTypes, Kind.Library)
@@ -12,11 +12,11 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.PrivateSessionConstructor import org.jetbrains.kotlin.fir.PrivateSessionConstructor
@OptIn(PrivateSessionConstructor::class) @OptIn(PrivateSessionConstructor::class)
abstract class FirIdeSession(override val builtinTypes: BuiltinTypes) : FirSession(sessionProvider = null) { abstract class FirIdeSession(override val builtinTypes: BuiltinTypes, kind: Kind) : FirSession(sessionProvider = null, kind) {
abstract val project: Project abstract val project: Project
} }
@OptIn(PrivateSessionConstructor::class) @OptIn(PrivateSessionConstructor::class)
abstract class FirIdeModuleSession(builtinTypes: BuiltinTypes) : FirIdeSession(builtinTypes) { abstract class FirIdeModuleSession(builtinTypes: BuiltinTypes, kind: Kind) : FirIdeSession(builtinTypes, kind) {
abstract val scope: GlobalSearchScope abstract val scope: GlobalSearchScope
} }
@@ -268,7 +268,7 @@ internal object FirIdeSessionFactory {
) )
@OptIn(PrivateSessionConstructor::class) @OptIn(PrivateSessionConstructor::class)
fun createEmptySession(): FirSession { fun createEmptySession(): FirSession {
return object : FirSession(null) {}.apply { return object : FirSession(null, Kind.Source) {}.apply {
val moduleData = FirModuleDataImpl( val moduleData = FirModuleDataImpl(
Name.identifier("<stub module>"), Name.identifier("<stub module>"),
dependencies = emptyList(), dependencies = emptyList(),
@@ -20,7 +20,7 @@ internal class FirIdeSourcesSession @PrivateSessionConstructor constructor(
override val scope: GlobalSearchScope, override val scope: GlobalSearchScope,
val firFileBuilder: FirFileBuilder, val firFileBuilder: FirFileBuilder,
builtinTypes: BuiltinTypes, builtinTypes: BuiltinTypes,
) : FirIdeModuleSession( builtinTypes) { ) : FirIdeModuleSession(builtinTypes, Kind.Source) {
val cache get() = firIdeProvider.cache val cache get() = firIdeProvider.cache
} }