From dbb7e788b21ea8e7bc2b6da067cbf36cae2c8b05 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Tue, 22 Aug 2023 23:38:33 +0900 Subject: [PATCH] [LL API] Provide customizable default language version settings --- .../project/structure/KtStaticModuleProvider.kt | 2 ++ .../services/AnalysisApiEnvironmentManager.kt | 4 +++- .../fir/sessions/LLFirAbstractSessionFactory.kt | 6 +++--- .../project/structure/ProjectStructureProvider.kt | 15 +++++++++++++++ 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/KtStaticModuleProvider.kt b/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/KtStaticModuleProvider.kt index 6c58a206769..9b788955a26 100644 --- a/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/KtStaticModuleProvider.kt +++ b/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/KtStaticModuleProvider.kt @@ -8,11 +8,13 @@ package org.jetbrains.kotlin.analysis.api.standalone.base.project.structure import com.intellij.psi.PsiElement import com.intellij.psi.PsiFileSystemItem import org.jetbrains.kotlin.analysis.project.structure.* +import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.psi.psiUtil.contains import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol import org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments class KtStaticModuleProvider( + override val globalLanguageVersionSettings: LanguageVersionSettings, private val builtinsModule: KtBuiltinsModule, private val projectStructure: KtModuleProjectStructure, ) : KtStaticProjectStructureProvider() { diff --git a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/AnalysisApiEnvironmentManager.kt b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/AnalysisApiEnvironmentManager.kt index ae563b10a23..1790116f73a 100644 --- a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/AnalysisApiEnvironmentManager.kt +++ b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/AnalysisApiEnvironmentManager.kt @@ -64,9 +64,11 @@ class AnalysisApiEnvironmentManagerImpl( getProject() ) + val globalLanguageVersionSettings = useSiteModule.languageVersionSettings + StandaloneProjectFactory.registerServicesForProjectEnvironment( _projectEnvironment, - KtStaticModuleProvider(builtinsModule, ktModuleProjectStructure), + KtStaticModuleProvider(globalLanguageVersionSettings, builtinsModule, ktModuleProjectStructure), useSiteCompilerConfiguration.languageVersionSettings, useSiteCompilerConfiguration.get(JVMConfigurationKeys.JDK_HOME)?.toPath(), ) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirAbstractSessionFactory.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirAbstractSessionFactory.kt index 31c4d07e639..7db094cd46e 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirAbstractSessionFactory.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirAbstractSessionFactory.kt @@ -179,7 +179,7 @@ internal abstract class LLFirAbstractSessionFactory(protected val project: Proje fun createNotUnderContentRootResolvableSession(module: KtNotUnderContentRootModule): LLFirNotUnderContentRootResolvableModuleSession { val builtinsSession = LLFirBuiltinsSessionFactory.getInstance(project).getBuiltinsSession(JvmPlatforms.unspecifiedJvmPlatform) - val languageVersionSettings = LanguageVersionSettingsImpl.DEFAULT + val languageVersionSettings = ProjectStructureProvider.getInstance(project).globalLanguageVersionSettings val scopeProvider = FirKotlinScopeProvider(::wrapScopeWithJvmMapped) val components = LLFirModuleResolveComponents(module, globalResolveComponents, scopeProvider) @@ -333,7 +333,7 @@ internal abstract class LLFirAbstractSessionFactory(protected val project: Proje val platform = module.platform val builtinsSession = LLFirBuiltinsSessionFactory.getInstance(project).getBuiltinsSession(platform) - val languageVersionSettings = LanguageVersionSettingsImpl.DEFAULT + val languageVersionSettings = ProjectStructureProvider.getInstance(project).libraryLanguageVersionSettings val scopeProvider = FirKotlinScopeProvider() val components = LLFirModuleResolveComponents(module, globalResolveComponents, scopeProvider) @@ -427,7 +427,7 @@ internal abstract class LLFirAbstractSessionFactory(protected val project: Proje registerModuleData(moduleData) registerIdeComponents(project) register(FirLazyDeclarationResolver::class, FirDummyCompilerLazyDeclarationResolver) - registerCommonComponents(LanguageVersionSettingsImpl.DEFAULT/*TODO*/) + registerCommonComponents(ProjectStructureProvider.getInstance(project).libraryLanguageVersionSettings) registerCommonComponentsAfterExtensionsAreConfigured() val kotlinScopeProvider = FirKotlinScopeProvider(::wrapScopeWithJvmMapped) diff --git a/analysis/project-structure/src/org/jetbrains/kotlin/analysis/project/structure/ProjectStructureProvider.kt b/analysis/project-structure/src/org/jetbrains/kotlin/analysis/project/structure/ProjectStructureProvider.kt index 34dc12cb1b0..1030f33c563 100644 --- a/analysis/project-structure/src/org/jetbrains/kotlin/analysis/project/structure/ProjectStructureProvider.kt +++ b/analysis/project-structure/src/org/jetbrains/kotlin/analysis/project/structure/ProjectStructureProvider.kt @@ -7,6 +7,8 @@ package org.jetbrains.kotlin.analysis.project.structure import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.config.LanguageVersionSettings +import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl public abstract class ProjectStructureProvider { /** @@ -24,6 +26,19 @@ public abstract class ProjectStructureProvider { */ public abstract fun getModule(element: PsiElement, contextualModule: KtModule?): KtModule + /** + * Project-global [LanguageVersionSettings]. For source modules lacking [LanguageVersionSettings] + * (such as [KtNotUnderContentRootModule]), the default settings apply. + */ + public open val globalLanguageVersionSettings: LanguageVersionSettings + get() = LanguageVersionSettingsImpl.DEFAULT + + /** + * Project-global [LanguageVersionSettings] for [KtLibraryModule]s and [KtLibrarySourceModule]s. + */ + public open val libraryLanguageVersionSettings: LanguageVersionSettings + get() = globalLanguageVersionSettings + public companion object { public fun getInstance(project: Project): ProjectStructureProvider { return project.getService(ProjectStructureProvider::class.java)