diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt index 9990ab94f93..f80acef9c82 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.fir.session +import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.analysis.CheckersComponent import org.jetbrains.kotlin.fir.extensions.FirExtensionService @@ -26,7 +27,7 @@ import org.jetbrains.kotlin.fir.types.FirCorrespondingSupertypesCache // -------------------------- Required components -------------------------- @OptIn(SessionConfiguration::class) -fun FirSession.registerCommonComponents() { +fun FirSession.registerCommonComponents(languageVersionSettings: LanguageVersionSettings) { register(FirDeclaredMemberScopeProvider::class, FirDeclaredMemberScopeProvider()) register(FirCorrespondingSupertypesCache::class, FirCorrespondingSupertypesCache(this)) register(FirDefaultParametersResolver::class, FirDefaultParametersResolver()) @@ -35,7 +36,7 @@ fun FirSession.registerCommonComponents() { register(FirRegisteredPluginAnnotations::class, FirRegisteredPluginAnnotations.create(this)) register(FirPredicateBasedProvider::class, FirPredicateBasedProvider.create(this)) register(GeneratedClassIndex::class, GeneratedClassIndex.create()) - register(FirLanguageSettingsComponent::class, FirLanguageSettingsComponent(this)) + register(FirLanguageSettingsComponent::class, FirLanguageSettingsComponent(languageVersionSettings)) register(InferenceComponents::class, InferenceComponents(this)) } diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt index bab7635941b..c839403fd6a 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt @@ -10,7 +10,8 @@ import com.intellij.psi.PsiElementFinder import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.annotations.TestOnly import org.jetbrains.kotlin.analyzer.ModuleInfo -import org.jetbrains.kotlin.fir.FirModuleBasedSession +import org.jetbrains.kotlin.config.LanguageVersionSettings +import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.PrivateSessionConstructor import org.jetbrains.kotlin.fir.SessionConfiguration @@ -62,10 +63,11 @@ object FirSessionFactory { sessionProvider: FirProjectSessionProvider, scope: GlobalSearchScope, dependenciesProvider: FirSymbolProvider? = null, + languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT, init: FirSessionConfigurator.() -> Unit = {} ): FirJavaModuleBasedSession { return FirJavaModuleBasedSession(moduleInfo, sessionProvider).apply { - registerCommonComponents() + registerCommonComponents(languageVersionSettings) registerResolveComponents() registerJavaSpecificResolveComponents() @@ -101,7 +103,8 @@ object FirSessionFactory { sessionProvider: FirProjectSessionProvider, scope: GlobalSearchScope, project: Project, - packagePartProvider: PackagePartProvider + packagePartProvider: PackagePartProvider, + languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT, ): FirLibrarySession { val javaClassFinder = JavaClassFinderImpl().apply { this.setProjectInstance(project) @@ -110,7 +113,7 @@ object FirSessionFactory { val kotlinClassFinder = VirtualFileFinderFactory.getInstance(project).create(scope) return FirLibrarySession(moduleInfo, sessionProvider).apply { - registerCommonComponents() + registerCommonComponents(languageVersionSettings) val javaSymbolProvider = JavaSymbolProvider(this, sessionProvider.project, scope) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirLanguageSettingsComponent.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirLanguageSettingsComponent.kt index 413f8fac8c1..9c4b065526b 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirLanguageSettingsComponent.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirLanguageSettingsComponent.kt @@ -6,15 +6,11 @@ package org.jetbrains.kotlin.fir import org.jetbrains.kotlin.config.LanguageVersionSettings -import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl @NoMutableState -class FirLanguageSettingsComponent(val session: FirSession) : FirSessionComponent { - val languageVersionSettings: LanguageVersionSettings = - LanguageVersionSettingsImpl.DEFAULT // TODO -} +class FirLanguageSettingsComponent(val languageVersionSettings: LanguageVersionSettings) : FirSessionComponent -val FirSession.languageSettingsComponent: FirLanguageSettingsComponent by FirSession.sessionComponentAccessor() +private val FirSession.languageSettingsComponent: FirLanguageSettingsComponent by FirSession.sessionComponentAccessor() val FirSession.languageVersionSettings: LanguageVersionSettings get() = languageSettingsComponent.languageVersionSettings diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/sessions/FirIdeSessionFactory.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/sessions/FirIdeSessionFactory.kt index 7d6986ef141..99394ee786c 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/sessions/FirIdeSessionFactory.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/sessions/FirIdeSessionFactory.kt @@ -6,6 +6,8 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.sessions import com.intellij.openapi.project.Project +import org.jetbrains.kotlin.config.LanguageVersionSettings +import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.fir.BuiltinTypes import org.jetbrains.kotlin.fir.PrivateSessionConstructor import org.jetbrains.kotlin.fir.SessionConfiguration @@ -52,6 +54,7 @@ internal object FirIdeSessionFactory { builtinTypes: BuiltinTypes, sessionsCache: MutableMap, isRootModule: Boolean, + languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT, ): FirIdeSourcesSession { sessionsCache[moduleInfo]?.let { return it } val scopeProvider = KotlinScopeProvider(::wrapScopeWithJvmMapped) @@ -67,7 +70,7 @@ internal object FirIdeSessionFactory { val cache = ModuleFileCacheImpl(this) val firPhaseManager = IdeFirPhaseManager(FirLazyDeclarationResolver(firFileBuilder), cache, sessionInvalidator) - registerCommonComponents() + registerCommonComponents(languageVersionSettings) registerResolveComponents() registerIdeComponents() @@ -130,6 +133,7 @@ internal object FirIdeSessionFactory { project: Project, builtinsAndCloneableSession: FirIdeBuiltinsAndCloneableSession, builtinTypes: BuiltinTypes, + languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT, ): FirIdeLibrariesSession { checkCanceled() val searchScope = ModuleLibrariesSearchScope(moduleInfo.module) @@ -141,7 +145,7 @@ internal object FirIdeSessionFactory { val kotlinClassFinder = VirtualFileFinderFactory.getInstance(project).create(searchScope) return FirIdeLibrariesSession(moduleInfo, project, searchScope, builtinTypes).apply { - registerCommonComponents() + registerCommonComponents(languageVersionSettings) registerJavaSpecificResolveComponents() registerIdeComponents() @@ -175,9 +179,13 @@ internal object FirIdeSessionFactory { } } - fun createBuiltinsAndCloneableSession(project: Project, builtinTypes: BuiltinTypes): FirIdeBuiltinsAndCloneableSession { + fun createBuiltinsAndCloneableSession( + project: Project, + builtinTypes: BuiltinTypes, + languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT + ): FirIdeBuiltinsAndCloneableSession { return FirIdeBuiltinsAndCloneableSession(project, builtinTypes).apply { - registerCommonComponents() + registerCommonComponents(languageVersionSettings) registerIdeComponents() val kotlinScopeProvider = KotlinScopeProvider(::wrapScopeWithJvmMapped) @@ -198,4 +206,4 @@ internal object FirIdeSessionFactory { private fun FirIdeSession.registerIdeComponents() { register(IdeSessionComponents::class, IdeSessionComponents.create(this)) } -} \ No newline at end of file +}