[FIR] Add configurable language version settings to FirSessionFactories

This commit is contained in:
Dmitriy Novozhilov
2020-10-01 13:55:48 +03:00
parent 5d76df6e1a
commit 3aa8b09e31
4 changed files with 25 additions and 17 deletions
@@ -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<ModuleSourceInfo, FirIdeSourcesSession>,
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))
}
}
}