diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt index a3e7cf15c63..9ebb564a306 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt @@ -19,12 +19,15 @@ package org.jetbrains.kotlin.frontend.java.di import com.intellij.openapi.project.Project import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.builtins.JvmBuiltInsPackageFragmentProvider -import org.jetbrains.kotlin.config.* +import org.jetbrains.kotlin.config.CompilerConfiguration +import org.jetbrains.kotlin.config.LanguageFeature +import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.container.* import org.jetbrains.kotlin.context.LazyResolveToken import org.jetbrains.kotlin.context.ModuleContext import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.PackagePartProvider +import org.jetbrains.kotlin.frontend.di.configureCommon import org.jetbrains.kotlin.frontend.di.configureModule import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.load.java.InternalFlexibleTypeTransformer @@ -91,12 +94,11 @@ fun createContainerForLazyResolveWithJava( configureModule(moduleContext, JvmPlatform, bindingTrace) configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project, lookupTracker) - useInstance(compilerConfiguration) useInstance(packagePartProvider) useInstance(moduleClassResolver) useInstance(declarationProviderFactory) - useInstance(compilerConfiguration.get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, LanguageVersionSettingsImpl.DEFAULT)) + configureCommon(compilerConfiguration) if (useBuiltInsProvider) { useInstance((moduleContext.module.builtIns as JvmBuiltIns).settings) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/DefaultAnalyzerFacade.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/DefaultAnalyzerFacade.kt index ad5d959a91e..ec9f1c64a0e 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/DefaultAnalyzerFacade.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/DefaultAnalyzerFacade.kt @@ -19,10 +19,7 @@ package org.jetbrains.kotlin.analyzer.common import com.intellij.openapi.components.ServiceManager import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.analyzer.* -import org.jetbrains.kotlin.config.ApiVersion -import org.jetbrains.kotlin.config.LanguageFeature -import org.jetbrains.kotlin.config.LanguageVersion -import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl +import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.container.StorageComponentContainer import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.container.useImpl @@ -34,6 +31,7 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.PackagePartProvider import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl +import org.jetbrains.kotlin.frontend.di.configureCommon import org.jetbrains.kotlin.frontend.di.configureModule import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.load.kotlin.MetadataFinderFactory @@ -51,9 +49,11 @@ import org.jetbrains.kotlin.serialization.deserialization.MetadataPackageFragmen * See [TargetPlatform.Default] */ object DefaultAnalyzerFacade : AnalyzerFacade() { - private val languageVersionSettings = LanguageVersionSettingsImpl( - LanguageVersion.LATEST, ApiVersion.LATEST, setOf(LanguageFeature.MultiPlatformProjects) - ) + private val compilerConfiguration = CompilerConfiguration().apply { + put(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, LanguageVersionSettingsImpl( + LanguageVersion.LATEST, ApiVersion.LATEST, setOf(LanguageFeature.MultiPlatformProjects) + )) + } private class SourceModuleInfo( override val name: Name, @@ -135,7 +135,7 @@ object DefaultAnalyzerFacade : AnalyzerFacade() { useImpl() useImpl() useImpl() - useInstance(languageVersionSettings) + configureCommon(compilerConfiguration) useImpl() useInstance(packagePartProvider) useInstance(declarationProviderFactory) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/frontend/di/injection.kt b/compiler/frontend/src/org/jetbrains/kotlin/frontend/di/injection.kt index 6116fdb269e..87a708c0164 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/frontend/di/injection.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/frontend/di/injection.kt @@ -18,7 +18,6 @@ package org.jetbrains.kotlin.frontend.di import org.jetbrains.kotlin.config.CommonConfigurationKeys import org.jetbrains.kotlin.config.CompilerConfiguration -import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.container.StorageComponentContainer import org.jetbrains.kotlin.container.get @@ -68,12 +67,17 @@ fun StorageComponentContainer.configureModule( useInstance(trace) } +fun StorageComponentContainer.configureCommon(configuration: CompilerConfiguration) { + useInstance(configuration) + useInstance(configuration.get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, LanguageVersionSettingsImpl.DEFAULT)) +} + fun createContainerForBodyResolve( moduleContext: ModuleContext, bindingTrace: BindingTrace, platform: TargetPlatform, statementFilter: StatementFilter, - languageVersionSettings: LanguageVersionSettings + compilerConfiguration: CompilerConfiguration ): StorageComponentContainer = createContainer("BodyResolve", platform) { configureModule(moduleContext, platform, bindingTrace) @@ -81,7 +85,7 @@ fun createContainerForBodyResolve( useInstance(LookupTracker.DO_NOTHING) useInstance(BodyResolveCache.ThrowException) - useInstance(languageVersionSettings) + configureCommon(compilerConfiguration) useImpl() } @@ -92,7 +96,7 @@ fun createContainerForLazyBodyResolve( bindingTrace: BindingTrace, platform: TargetPlatform, bodyResolveCache: BodyResolveCache, - languageVersionSettings: LanguageVersionSettings + compilerConfiguration: CompilerConfiguration ): StorageComponentContainer = createContainer("LazyBodyResolve", platform) { configureModule(moduleContext, platform, bindingTrace) @@ -100,7 +104,7 @@ fun createContainerForLazyBodyResolve( useInstance(kotlinCodeAnalyzer) useInstance(kotlinCodeAnalyzer.fileScopeProvider) useInstance(bodyResolveCache) - useInstance(languageVersionSettings) + configureCommon(compilerConfiguration) useImpl() useImpl() } @@ -110,7 +114,7 @@ fun createContainerForLazyLocalClassifierAnalyzer( bindingTrace: BindingTrace, platform: TargetPlatform, lookupTracker: LookupTracker, - languageVersionSettings: LanguageVersionSettings, + compilerConfiguration: CompilerConfiguration, statementFilter: StatementFilter, localClassDescriptorHolder: LocalClassDescriptorHolder ): StorageComponentContainer = createContainer("LocalClassifierAnalyzer", platform) { @@ -130,7 +134,7 @@ fun createContainerForLazyLocalClassifierAnalyzer( useImpl() useImpl() - useInstance(languageVersionSettings) + configureCommon(compilerConfiguration) useInstance(statementFilter) } @@ -146,9 +150,8 @@ fun createContainerForLazyResolve( useInstance(declarationProviderFactory) useInstance(LookupTracker.DO_NOTHING) - useInstance(compilerConfiguration) - useInstance(compilerConfiguration.get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, LanguageVersionSettingsImpl.DEFAULT)) + configureCommon(compilerConfiguration) useImpl() useImpl() diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LocalClassifierAnalyzer.kt b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LocalClassifierAnalyzer.kt index 79d5145c438..b9c8726036a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LocalClassifierAnalyzer.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/LocalClassifierAnalyzer.kt @@ -18,7 +18,10 @@ package org.jetbrains.kotlin.types.expressions import com.intellij.psi.PsiElement import com.intellij.psi.util.PsiTreeUtil +import org.jetbrains.kotlin.config.CommonConfigurationKeys +import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.LanguageVersionSettings +import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.context.GlobalContext import org.jetbrains.kotlin.context.withModule @@ -60,7 +63,7 @@ class LocalClassifierAnalyzer( private val platform: TargetPlatform, private val lookupTracker: LookupTracker, private val supertypeLoopChecker: SupertypeLoopChecker, - private val languageVersionSettings: LanguageVersionSettings, + private val compilerConfiguration: CompilerConfiguration, private val delegationFilter: DelegationFilter ) { fun processClassOrObject( @@ -77,7 +80,7 @@ class LocalClassifierAnalyzer( context.trace, platform, lookupTracker, - languageVersionSettings, + compilerConfiguration, context.statementFilter, LocalClassDescriptorHolder( scope, @@ -91,7 +94,7 @@ class LocalClassifierAnalyzer( typeResolver, annotationResolver, supertypeLoopChecker, - languageVersionSettings, + compilerConfiguration.get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, LanguageVersionSettingsImpl.DEFAULT), SyntheticResolveExtension.getInstance(project), delegationFilter ) diff --git a/compiler/tests-common/org/jetbrains/kotlin/tests/di/injection.kt b/compiler/tests-common/org/jetbrains/kotlin/tests/di/injection.kt index 798be26e1d4..95fe7547450 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/tests/di/injection.kt +++ b/compiler/tests-common/org/jetbrains/kotlin/tests/di/injection.kt @@ -17,13 +17,14 @@ package org.jetbrains.kotlin.tests.di import com.intellij.openapi.project.Project -import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl +import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.container.StorageComponentContainer import org.jetbrains.kotlin.container.getValue import org.jetbrains.kotlin.container.useImpl import org.jetbrains.kotlin.container.useInstance import org.jetbrains.kotlin.context.ModuleContext import org.jetbrains.kotlin.descriptors.ModuleDescriptor +import org.jetbrains.kotlin.frontend.di.configureCommon import org.jetbrains.kotlin.frontend.di.configureModule import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.resolve.DescriptorResolver @@ -38,7 +39,7 @@ fun createContainerForTests(project: Project, module: ModuleDescriptor): Contain return ContainerForTests(createContainer("Tests", JvmPlatform) { configureModule(ModuleContext(module, project), JvmPlatform) useInstance(LookupTracker.DO_NOTHING) - useInstance(LanguageVersionSettingsImpl.DEFAULT) + configureCommon(CompilerConfiguration.EMPTY) useImpl() }) } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinResolveCache.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinResolveCache.kt index 6bde68fd77d..46d2e98d9ed 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinResolveCache.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinResolveCache.kt @@ -32,7 +32,7 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.diagnostics.DiagnosticUtils import org.jetbrains.kotlin.frontend.di.createContainerForLazyBodyResolve import org.jetbrains.kotlin.idea.project.TargetPlatformDetector -import org.jetbrains.kotlin.idea.project.languageVersionSettings +import org.jetbrains.kotlin.idea.project.createCompilerConfiguration import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf import org.jetbrains.kotlin.resolve.* @@ -173,7 +173,7 @@ private object KotlinResolveDataProvider { trace, targetPlatform, componentProvider.get(), - analyzableElement.languageVersionSettings + analyzableElement.createCompilerConfiguration() ).get() lazyTopDownAnalyzer.analyzeDeclarations(TopDownAnalysisMode.TopLevelDeclarations, listOf(analyzableElement)) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/Platform.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/Platform.kt index 7f96e5c24f4..d154db463b3 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/Platform.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/Platform.kt @@ -143,6 +143,11 @@ private fun getExtraLanguageFeatures( } } +fun KtElement.createCompilerConfiguration(): CompilerConfiguration = CompilerConfiguration().apply { + put(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, languageVersionSettings) + isReadOnly = true +} + val KtElement.languageVersionSettings: LanguageVersionSettings get() { if (ServiceManager.getService(containingKtFile.project, ProjectFileIndex::class.java) == null) { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ResolveElementCache.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ResolveElementCache.kt index 75251d09696..0229f65ef3e 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ResolveElementCache.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ResolveElementCache.kt @@ -588,7 +588,7 @@ class ResolveElementCache( trace, targetPlatform, statementFilter, - file.languageVersionSettings + file.createCompilerConfiguration() ).get() } diff --git a/js/js.frontend/src/org/jetbrains/kotlin/frontend/js/di/injection.kt b/js/js.frontend/src/org/jetbrains/kotlin/frontend/js/di/injection.kt index 037ae8c2242..399cb39b2f6 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/frontend/js/di/injection.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/frontend/js/di/injection.kt @@ -16,12 +16,13 @@ package org.jetbrains.kotlin.frontend.js.di -import org.jetbrains.kotlin.config.LanguageVersionSettings +import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.container.useImpl import org.jetbrains.kotlin.container.useInstance import org.jetbrains.kotlin.context.ModuleContext import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl +import org.jetbrains.kotlin.frontend.di.configureCommon import org.jetbrains.kotlin.frontend.di.configureModule import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.js.resolve.JsPlatform @@ -38,7 +39,7 @@ fun createTopDownAnalyzerForJs( moduleContext: ModuleContext, bindingTrace: BindingTrace, declarationProviderFactory: DeclarationProviderFactory, - languageVersionSettings: LanguageVersionSettings + compilerConfiguration: CompilerConfiguration ): LazyTopDownAnalyzer { val storageComponentContainer = createContainer("TopDownAnalyzerForJs", JsPlatform) { configureModule(moduleContext, JsPlatform, bindingTrace) @@ -49,7 +50,7 @@ fun createTopDownAnalyzerForJs( CompilerEnvironment.configure(this) useInstance(LookupTracker.DO_NOTHING) - useInstance(languageVersionSettings) + configureCommon(compilerConfiguration) useImpl() useImpl() }.apply { diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.kt index 4acfa24a442..53dd6ef2423 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.kt @@ -16,8 +16,6 @@ package org.jetbrains.kotlin.js.analyze -import org.jetbrains.kotlin.config.CommonConfigurationKeys -import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.context.ContextForNewModule import org.jetbrains.kotlin.context.ModuleContext import org.jetbrains.kotlin.context.ProjectContext @@ -57,7 +55,7 @@ object TopDownAnalyzerFacadeForJS { val analyzerForJs = createTopDownAnalyzerForJs( moduleContext, trace, FileBasedDeclarationProviderFactory(moduleContext.storageManager, files), - config.configuration.get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, LanguageVersionSettingsImpl.DEFAULT) + config.configuration ) analyzerForJs.analyzeDeclarations(TopDownAnalysisMode.TopLevelDeclarations, files) return JsAnalysisResult.success(trace, moduleContext.module)