[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,
init: FirSessionConfigurator.() -> Unit = {}
): FirSession {
return FirCliSession(sessionProvider, FirCliSession.Kind.Source).apply session@{
return FirCliSession(sessionProvider, FirSession.Kind.Source).apply session@{
moduleData.bindSession(this@session)
sessionProvider.registerSession(moduleData, this@session)
registerModuleData(moduleData)
@@ -197,7 +197,7 @@ object FirSessionFactory {
packagePartProvider: PackagePartProvider,
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
): FirSession {
return FirCliSession(sessionProvider, FirCliSession.Kind.Library).apply session@{
return FirCliSession(sessionProvider, FirSession.Kind.Library).apply session@{
moduleDataProvider.allModuleData.forEach {
sessionProvider.registerSession(it, this)
it.bindSession(this)
@@ -271,7 +271,7 @@ object FirSessionFactory {
@TestOnly
fun createEmptySession(): FirSession {
return object : FirSession(null) {}.apply {
return object : FirSession(null, Kind.Source) {}.apply {
val moduleData = FirModuleDataImpl(
Name.identifier("<stub module>"),
dependencies = emptyList(),
@@ -10,12 +10,8 @@ import org.jetbrains.kotlin.fir.*
@OptIn(PrivateSessionConstructor::class)
class FirCliSession @PrivateSessionConstructor constructor(
sessionProvider: FirProjectSessionProvider,
val kind: Kind // used for debug
) : FirSession(sessionProvider) {
enum class Kind {
Source, Library
}
}
kind: Kind
) : FirSession(sessionProvider, kind)
class FirProjectSessionProvider : FirSessionProvider() {
override fun getSession(moduleData: FirModuleData): FirSession? {
@@ -15,7 +15,8 @@ import kotlin.reflect.KClass
interface FirSessionComponent
abstract class FirSession @PrivateSessionConstructor constructor(
val sessionProvider: FirSessionProvider?
val sessionProvider: FirSessionProvider?,
val kind: Kind
) : ComponentArrayOwner<FirSessionComponent, FirSessionComponent>() {
companion object : TypeRegistry<FirSessionComponent, FirSessionComponent>() {
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"
return "Source session for module ${moduleData.name}"
}
enum class Kind {
Source, Library
}
}
abstract class FirSessionProvider {
@@ -13,4 +13,4 @@ import org.jetbrains.kotlin.fir.PrivateSessionConstructor
class FirIdeBuiltinsAndCloneableSession @PrivateSessionConstructor constructor(
override val project: Project,
builtinTypes: BuiltinTypes,
) : FirIdeSession(builtinTypes)
) : FirIdeSession(builtinTypes, Kind.Library)
@@ -19,4 +19,4 @@ internal class FirIdeLibrariesSession @PrivateSessionConstructor constructor(
override val project: Project,
override val scope: GlobalSearchScope,
builtinTypes: BuiltinTypes,
) : FirIdeModuleSession(builtinTypes)
) : FirIdeModuleSession(builtinTypes, Kind.Library)
@@ -12,11 +12,11 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.PrivateSessionConstructor
@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
}
@OptIn(PrivateSessionConstructor::class)
abstract class FirIdeModuleSession(builtinTypes: BuiltinTypes) : FirIdeSession(builtinTypes) {
abstract class FirIdeModuleSession(builtinTypes: BuiltinTypes, kind: Kind) : FirIdeSession(builtinTypes, kind) {
abstract val scope: GlobalSearchScope
}
@@ -268,7 +268,7 @@ internal object FirIdeSessionFactory {
)
@OptIn(PrivateSessionConstructor::class)
fun createEmptySession(): FirSession {
return object : FirSession(null) {}.apply {
return object : FirSession(null, Kind.Source) {}.apply {
val moduleData = FirModuleDataImpl(
Name.identifier("<stub module>"),
dependencies = emptyList(),
@@ -20,7 +20,7 @@ internal class FirIdeSourcesSession @PrivateSessionConstructor constructor(
override val scope: GlobalSearchScope,
val firFileBuilder: FirFileBuilder,
builtinTypes: BuiltinTypes,
) : FirIdeModuleSession( builtinTypes) {
) : FirIdeModuleSession(builtinTypes, Kind.Source) {
val cache get() = firIdeProvider.cache
}