[FIR] Add configurable language version settings to FirSessionFactories
This commit is contained in:
+3
-2
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.session
|
package org.jetbrains.kotlin.fir.session
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.*
|
||||||
import org.jetbrains.kotlin.fir.analysis.CheckersComponent
|
import org.jetbrains.kotlin.fir.analysis.CheckersComponent
|
||||||
import org.jetbrains.kotlin.fir.extensions.FirExtensionService
|
import org.jetbrains.kotlin.fir.extensions.FirExtensionService
|
||||||
@@ -26,7 +27,7 @@ import org.jetbrains.kotlin.fir.types.FirCorrespondingSupertypesCache
|
|||||||
// -------------------------- Required components --------------------------
|
// -------------------------- Required components --------------------------
|
||||||
|
|
||||||
@OptIn(SessionConfiguration::class)
|
@OptIn(SessionConfiguration::class)
|
||||||
fun FirSession.registerCommonComponents() {
|
fun FirSession.registerCommonComponents(languageVersionSettings: LanguageVersionSettings) {
|
||||||
register(FirDeclaredMemberScopeProvider::class, FirDeclaredMemberScopeProvider())
|
register(FirDeclaredMemberScopeProvider::class, FirDeclaredMemberScopeProvider())
|
||||||
register(FirCorrespondingSupertypesCache::class, FirCorrespondingSupertypesCache(this))
|
register(FirCorrespondingSupertypesCache::class, FirCorrespondingSupertypesCache(this))
|
||||||
register(FirDefaultParametersResolver::class, FirDefaultParametersResolver())
|
register(FirDefaultParametersResolver::class, FirDefaultParametersResolver())
|
||||||
@@ -35,7 +36,7 @@ fun FirSession.registerCommonComponents() {
|
|||||||
register(FirRegisteredPluginAnnotations::class, FirRegisteredPluginAnnotations.create(this))
|
register(FirRegisteredPluginAnnotations::class, FirRegisteredPluginAnnotations.create(this))
|
||||||
register(FirPredicateBasedProvider::class, FirPredicateBasedProvider.create(this))
|
register(FirPredicateBasedProvider::class, FirPredicateBasedProvider.create(this))
|
||||||
register(GeneratedClassIndex::class, GeneratedClassIndex.create())
|
register(GeneratedClassIndex::class, GeneratedClassIndex.create())
|
||||||
register(FirLanguageSettingsComponent::class, FirLanguageSettingsComponent(this))
|
register(FirLanguageSettingsComponent::class, FirLanguageSettingsComponent(languageVersionSettings))
|
||||||
register(InferenceComponents::class, InferenceComponents(this))
|
register(InferenceComponents::class, InferenceComponents(this))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ import com.intellij.psi.PsiElementFinder
|
|||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.annotations.TestOnly
|
import org.jetbrains.annotations.TestOnly
|
||||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
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.FirSession
|
||||||
import org.jetbrains.kotlin.fir.PrivateSessionConstructor
|
import org.jetbrains.kotlin.fir.PrivateSessionConstructor
|
||||||
import org.jetbrains.kotlin.fir.SessionConfiguration
|
import org.jetbrains.kotlin.fir.SessionConfiguration
|
||||||
@@ -62,10 +63,11 @@ object FirSessionFactory {
|
|||||||
sessionProvider: FirProjectSessionProvider,
|
sessionProvider: FirProjectSessionProvider,
|
||||||
scope: GlobalSearchScope,
|
scope: GlobalSearchScope,
|
||||||
dependenciesProvider: FirSymbolProvider? = null,
|
dependenciesProvider: FirSymbolProvider? = null,
|
||||||
|
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
|
||||||
init: FirSessionConfigurator.() -> Unit = {}
|
init: FirSessionConfigurator.() -> Unit = {}
|
||||||
): FirJavaModuleBasedSession {
|
): FirJavaModuleBasedSession {
|
||||||
return FirJavaModuleBasedSession(moduleInfo, sessionProvider).apply {
|
return FirJavaModuleBasedSession(moduleInfo, sessionProvider).apply {
|
||||||
registerCommonComponents()
|
registerCommonComponents(languageVersionSettings)
|
||||||
registerResolveComponents()
|
registerResolveComponents()
|
||||||
registerJavaSpecificResolveComponents()
|
registerJavaSpecificResolveComponents()
|
||||||
|
|
||||||
@@ -101,7 +103,8 @@ object FirSessionFactory {
|
|||||||
sessionProvider: FirProjectSessionProvider,
|
sessionProvider: FirProjectSessionProvider,
|
||||||
scope: GlobalSearchScope,
|
scope: GlobalSearchScope,
|
||||||
project: Project,
|
project: Project,
|
||||||
packagePartProvider: PackagePartProvider
|
packagePartProvider: PackagePartProvider,
|
||||||
|
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
|
||||||
): FirLibrarySession {
|
): FirLibrarySession {
|
||||||
val javaClassFinder = JavaClassFinderImpl().apply {
|
val javaClassFinder = JavaClassFinderImpl().apply {
|
||||||
this.setProjectInstance(project)
|
this.setProjectInstance(project)
|
||||||
@@ -110,7 +113,7 @@ object FirSessionFactory {
|
|||||||
|
|
||||||
val kotlinClassFinder = VirtualFileFinderFactory.getInstance(project).create(scope)
|
val kotlinClassFinder = VirtualFileFinderFactory.getInstance(project).create(scope)
|
||||||
return FirLibrarySession(moduleInfo, sessionProvider).apply {
|
return FirLibrarySession(moduleInfo, sessionProvider).apply {
|
||||||
registerCommonComponents()
|
registerCommonComponents(languageVersionSettings)
|
||||||
|
|
||||||
val javaSymbolProvider = JavaSymbolProvider(this, sessionProvider.project, scope)
|
val javaSymbolProvider = JavaSymbolProvider(this, sessionProvider.project, scope)
|
||||||
|
|
||||||
|
|||||||
@@ -6,15 +6,11 @@
|
|||||||
package org.jetbrains.kotlin.fir
|
package org.jetbrains.kotlin.fir
|
||||||
|
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
|
|
||||||
|
|
||||||
@NoMutableState
|
@NoMutableState
|
||||||
class FirLanguageSettingsComponent(val session: FirSession) : FirSessionComponent {
|
class FirLanguageSettingsComponent(val languageVersionSettings: LanguageVersionSettings) : FirSessionComponent
|
||||||
val languageVersionSettings: LanguageVersionSettings =
|
|
||||||
LanguageVersionSettingsImpl.DEFAULT // TODO
|
|
||||||
}
|
|
||||||
|
|
||||||
val FirSession.languageSettingsComponent: FirLanguageSettingsComponent by FirSession.sessionComponentAccessor()
|
private val FirSession.languageSettingsComponent: FirLanguageSettingsComponent by FirSession.sessionComponentAccessor()
|
||||||
|
|
||||||
val FirSession.languageVersionSettings: LanguageVersionSettings
|
val FirSession.languageVersionSettings: LanguageVersionSettings
|
||||||
get() = languageSettingsComponent.languageVersionSettings
|
get() = languageSettingsComponent.languageVersionSettings
|
||||||
|
|||||||
+13
-5
@@ -6,6 +6,8 @@
|
|||||||
package org.jetbrains.kotlin.idea.fir.low.level.api.sessions
|
package org.jetbrains.kotlin.idea.fir.low.level.api.sessions
|
||||||
|
|
||||||
import com.intellij.openapi.project.Project
|
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.BuiltinTypes
|
||||||
import org.jetbrains.kotlin.fir.PrivateSessionConstructor
|
import org.jetbrains.kotlin.fir.PrivateSessionConstructor
|
||||||
import org.jetbrains.kotlin.fir.SessionConfiguration
|
import org.jetbrains.kotlin.fir.SessionConfiguration
|
||||||
@@ -52,6 +54,7 @@ internal object FirIdeSessionFactory {
|
|||||||
builtinTypes: BuiltinTypes,
|
builtinTypes: BuiltinTypes,
|
||||||
sessionsCache: MutableMap<ModuleSourceInfo, FirIdeSourcesSession>,
|
sessionsCache: MutableMap<ModuleSourceInfo, FirIdeSourcesSession>,
|
||||||
isRootModule: Boolean,
|
isRootModule: Boolean,
|
||||||
|
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
|
||||||
): FirIdeSourcesSession {
|
): FirIdeSourcesSession {
|
||||||
sessionsCache[moduleInfo]?.let { return it }
|
sessionsCache[moduleInfo]?.let { return it }
|
||||||
val scopeProvider = KotlinScopeProvider(::wrapScopeWithJvmMapped)
|
val scopeProvider = KotlinScopeProvider(::wrapScopeWithJvmMapped)
|
||||||
@@ -67,7 +70,7 @@ internal object FirIdeSessionFactory {
|
|||||||
val cache = ModuleFileCacheImpl(this)
|
val cache = ModuleFileCacheImpl(this)
|
||||||
val firPhaseManager = IdeFirPhaseManager(FirLazyDeclarationResolver(firFileBuilder), cache, sessionInvalidator)
|
val firPhaseManager = IdeFirPhaseManager(FirLazyDeclarationResolver(firFileBuilder), cache, sessionInvalidator)
|
||||||
|
|
||||||
registerCommonComponents()
|
registerCommonComponents(languageVersionSettings)
|
||||||
registerResolveComponents()
|
registerResolveComponents()
|
||||||
registerIdeComponents()
|
registerIdeComponents()
|
||||||
|
|
||||||
@@ -130,6 +133,7 @@ internal object FirIdeSessionFactory {
|
|||||||
project: Project,
|
project: Project,
|
||||||
builtinsAndCloneableSession: FirIdeBuiltinsAndCloneableSession,
|
builtinsAndCloneableSession: FirIdeBuiltinsAndCloneableSession,
|
||||||
builtinTypes: BuiltinTypes,
|
builtinTypes: BuiltinTypes,
|
||||||
|
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
|
||||||
): FirIdeLibrariesSession {
|
): FirIdeLibrariesSession {
|
||||||
checkCanceled()
|
checkCanceled()
|
||||||
val searchScope = ModuleLibrariesSearchScope(moduleInfo.module)
|
val searchScope = ModuleLibrariesSearchScope(moduleInfo.module)
|
||||||
@@ -141,7 +145,7 @@ internal object FirIdeSessionFactory {
|
|||||||
|
|
||||||
val kotlinClassFinder = VirtualFileFinderFactory.getInstance(project).create(searchScope)
|
val kotlinClassFinder = VirtualFileFinderFactory.getInstance(project).create(searchScope)
|
||||||
return FirIdeLibrariesSession(moduleInfo, project, searchScope, builtinTypes).apply {
|
return FirIdeLibrariesSession(moduleInfo, project, searchScope, builtinTypes).apply {
|
||||||
registerCommonComponents()
|
registerCommonComponents(languageVersionSettings)
|
||||||
registerJavaSpecificResolveComponents()
|
registerJavaSpecificResolveComponents()
|
||||||
registerIdeComponents()
|
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 {
|
return FirIdeBuiltinsAndCloneableSession(project, builtinTypes).apply {
|
||||||
registerCommonComponents()
|
registerCommonComponents(languageVersionSettings)
|
||||||
registerIdeComponents()
|
registerIdeComponents()
|
||||||
|
|
||||||
val kotlinScopeProvider = KotlinScopeProvider(::wrapScopeWithJvmMapped)
|
val kotlinScopeProvider = KotlinScopeProvider(::wrapScopeWithJvmMapped)
|
||||||
@@ -198,4 +206,4 @@ internal object FirIdeSessionFactory {
|
|||||||
private fun FirIdeSession.registerIdeComponents() {
|
private fun FirIdeSession.registerIdeComponents() {
|
||||||
register(IdeSessionComponents::class, IdeSessionComponents.create(this))
|
register(IdeSessionComponents::class, IdeSessionComponents.create(this))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user