Inject CompilerConfiguration instead of LanguageVersionSettings

LanguageVersionSettings can be read from the configuration. Also, the
configuration may be used for other stuff, not related to language version
settings, soon
This commit is contained in:
Alexander Udalov
2017-02-10 20:15:50 +03:00
parent 4b31e75550
commit d499998655
10 changed files with 47 additions and 34 deletions
@@ -19,12 +19,15 @@ package org.jetbrains.kotlin.frontend.java.di
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.builtins.JvmBuiltInsPackageFragmentProvider 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.container.*
import org.jetbrains.kotlin.context.LazyResolveToken import org.jetbrains.kotlin.context.LazyResolveToken
import org.jetbrains.kotlin.context.ModuleContext import org.jetbrains.kotlin.context.ModuleContext
import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PackagePartProvider import org.jetbrains.kotlin.descriptors.PackagePartProvider
import org.jetbrains.kotlin.frontend.di.configureCommon
import org.jetbrains.kotlin.frontend.di.configureModule import org.jetbrains.kotlin.frontend.di.configureModule
import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.load.java.InternalFlexibleTypeTransformer import org.jetbrains.kotlin.load.java.InternalFlexibleTypeTransformer
@@ -91,12 +94,11 @@ fun createContainerForLazyResolveWithJava(
configureModule(moduleContext, JvmPlatform, bindingTrace) configureModule(moduleContext, JvmPlatform, bindingTrace)
configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project, lookupTracker) configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project, lookupTracker)
useInstance(compilerConfiguration)
useInstance(packagePartProvider) useInstance(packagePartProvider)
useInstance(moduleClassResolver) useInstance(moduleClassResolver)
useInstance(declarationProviderFactory) useInstance(declarationProviderFactory)
useInstance(compilerConfiguration.get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, LanguageVersionSettingsImpl.DEFAULT)) configureCommon(compilerConfiguration)
if (useBuiltInsProvider) { if (useBuiltInsProvider) {
useInstance((moduleContext.module.builtIns as JvmBuiltIns).settings) useInstance((moduleContext.module.builtIns as JvmBuiltIns).settings)
@@ -19,10 +19,7 @@ package org.jetbrains.kotlin.analyzer.common
import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.components.ServiceManager
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.analyzer.* import org.jetbrains.kotlin.analyzer.*
import org.jetbrains.kotlin.config.ApiVersion import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.config.LanguageVersion
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.container.StorageComponentContainer import org.jetbrains.kotlin.container.StorageComponentContainer
import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.container.get
import org.jetbrains.kotlin.container.useImpl 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.PackagePartProvider
import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl 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.frontend.di.configureModule
import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.load.kotlin.MetadataFinderFactory import org.jetbrains.kotlin.load.kotlin.MetadataFinderFactory
@@ -51,9 +49,11 @@ import org.jetbrains.kotlin.serialization.deserialization.MetadataPackageFragmen
* See [TargetPlatform.Default] * See [TargetPlatform.Default]
*/ */
object DefaultAnalyzerFacade : AnalyzerFacade<PlatformAnalysisParameters>() { object DefaultAnalyzerFacade : AnalyzerFacade<PlatformAnalysisParameters>() {
private val languageVersionSettings = LanguageVersionSettingsImpl( private val compilerConfiguration = CompilerConfiguration().apply {
LanguageVersion.LATEST, ApiVersion.LATEST, setOf(LanguageFeature.MultiPlatformProjects) put(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, LanguageVersionSettingsImpl(
) LanguageVersion.LATEST, ApiVersion.LATEST, setOf(LanguageFeature.MultiPlatformProjects)
))
}
private class SourceModuleInfo( private class SourceModuleInfo(
override val name: Name, override val name: Name,
@@ -135,7 +135,7 @@ object DefaultAnalyzerFacade : AnalyzerFacade<PlatformAnalysisParameters>() {
useImpl<ResolveSession>() useImpl<ResolveSession>()
useImpl<LazyTopDownAnalyzer>() useImpl<LazyTopDownAnalyzer>()
useImpl<FileScopeProviderImpl>() useImpl<FileScopeProviderImpl>()
useInstance(languageVersionSettings) configureCommon(compilerConfiguration)
useImpl<CompilerDeserializationConfiguration>() useImpl<CompilerDeserializationConfiguration>()
useInstance(packagePartProvider) useInstance(packagePartProvider)
useInstance(declarationProviderFactory) useInstance(declarationProviderFactory)
@@ -18,7 +18,6 @@ package org.jetbrains.kotlin.frontend.di
import org.jetbrains.kotlin.config.CommonConfigurationKeys import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.container.StorageComponentContainer import org.jetbrains.kotlin.container.StorageComponentContainer
import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.container.get
@@ -68,12 +67,17 @@ fun StorageComponentContainer.configureModule(
useInstance(trace) useInstance(trace)
} }
fun StorageComponentContainer.configureCommon(configuration: CompilerConfiguration) {
useInstance(configuration)
useInstance(configuration.get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, LanguageVersionSettingsImpl.DEFAULT))
}
fun createContainerForBodyResolve( fun createContainerForBodyResolve(
moduleContext: ModuleContext, moduleContext: ModuleContext,
bindingTrace: BindingTrace, bindingTrace: BindingTrace,
platform: TargetPlatform, platform: TargetPlatform,
statementFilter: StatementFilter, statementFilter: StatementFilter,
languageVersionSettings: LanguageVersionSettings compilerConfiguration: CompilerConfiguration
): StorageComponentContainer = createContainer("BodyResolve", platform) { ): StorageComponentContainer = createContainer("BodyResolve", platform) {
configureModule(moduleContext, platform, bindingTrace) configureModule(moduleContext, platform, bindingTrace)
@@ -81,7 +85,7 @@ fun createContainerForBodyResolve(
useInstance(LookupTracker.DO_NOTHING) useInstance(LookupTracker.DO_NOTHING)
useInstance(BodyResolveCache.ThrowException) useInstance(BodyResolveCache.ThrowException)
useInstance(languageVersionSettings) configureCommon(compilerConfiguration)
useImpl<BodyResolver>() useImpl<BodyResolver>()
} }
@@ -92,7 +96,7 @@ fun createContainerForLazyBodyResolve(
bindingTrace: BindingTrace, bindingTrace: BindingTrace,
platform: TargetPlatform, platform: TargetPlatform,
bodyResolveCache: BodyResolveCache, bodyResolveCache: BodyResolveCache,
languageVersionSettings: LanguageVersionSettings compilerConfiguration: CompilerConfiguration
): StorageComponentContainer = createContainer("LazyBodyResolve", platform) { ): StorageComponentContainer = createContainer("LazyBodyResolve", platform) {
configureModule(moduleContext, platform, bindingTrace) configureModule(moduleContext, platform, bindingTrace)
@@ -100,7 +104,7 @@ fun createContainerForLazyBodyResolve(
useInstance(kotlinCodeAnalyzer) useInstance(kotlinCodeAnalyzer)
useInstance(kotlinCodeAnalyzer.fileScopeProvider) useInstance(kotlinCodeAnalyzer.fileScopeProvider)
useInstance(bodyResolveCache) useInstance(bodyResolveCache)
useInstance(languageVersionSettings) configureCommon(compilerConfiguration)
useImpl<LazyTopDownAnalyzer>() useImpl<LazyTopDownAnalyzer>()
useImpl<BasicAbsentDescriptorHandler>() useImpl<BasicAbsentDescriptorHandler>()
} }
@@ -110,7 +114,7 @@ fun createContainerForLazyLocalClassifierAnalyzer(
bindingTrace: BindingTrace, bindingTrace: BindingTrace,
platform: TargetPlatform, platform: TargetPlatform,
lookupTracker: LookupTracker, lookupTracker: LookupTracker,
languageVersionSettings: LanguageVersionSettings, compilerConfiguration: CompilerConfiguration,
statementFilter: StatementFilter, statementFilter: StatementFilter,
localClassDescriptorHolder: LocalClassDescriptorHolder localClassDescriptorHolder: LocalClassDescriptorHolder
): StorageComponentContainer = createContainer("LocalClassifierAnalyzer", platform) { ): StorageComponentContainer = createContainer("LocalClassifierAnalyzer", platform) {
@@ -130,7 +134,7 @@ fun createContainerForLazyLocalClassifierAnalyzer(
useImpl<DeclarationScopeProviderForLocalClassifierAnalyzer>() useImpl<DeclarationScopeProviderForLocalClassifierAnalyzer>()
useImpl<LocalLazyDeclarationResolver>() useImpl<LocalLazyDeclarationResolver>()
useInstance(languageVersionSettings) configureCommon(compilerConfiguration)
useInstance(statementFilter) useInstance(statementFilter)
} }
@@ -146,9 +150,8 @@ fun createContainerForLazyResolve(
useInstance(declarationProviderFactory) useInstance(declarationProviderFactory)
useInstance(LookupTracker.DO_NOTHING) useInstance(LookupTracker.DO_NOTHING)
useInstance(compilerConfiguration)
useInstance(compilerConfiguration.get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, LanguageVersionSettingsImpl.DEFAULT)) configureCommon(compilerConfiguration)
useImpl<FileScopeProviderImpl>() useImpl<FileScopeProviderImpl>()
useImpl<CompilerDeserializationConfiguration>() useImpl<CompilerDeserializationConfiguration>()
@@ -18,7 +18,10 @@ package org.jetbrains.kotlin.types.expressions
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import com.intellij.psi.util.PsiTreeUtil 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.LanguageVersionSettings
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.container.get
import org.jetbrains.kotlin.context.GlobalContext import org.jetbrains.kotlin.context.GlobalContext
import org.jetbrains.kotlin.context.withModule import org.jetbrains.kotlin.context.withModule
@@ -60,7 +63,7 @@ class LocalClassifierAnalyzer(
private val platform: TargetPlatform, private val platform: TargetPlatform,
private val lookupTracker: LookupTracker, private val lookupTracker: LookupTracker,
private val supertypeLoopChecker: SupertypeLoopChecker, private val supertypeLoopChecker: SupertypeLoopChecker,
private val languageVersionSettings: LanguageVersionSettings, private val compilerConfiguration: CompilerConfiguration,
private val delegationFilter: DelegationFilter private val delegationFilter: DelegationFilter
) { ) {
fun processClassOrObject( fun processClassOrObject(
@@ -77,7 +80,7 @@ class LocalClassifierAnalyzer(
context.trace, context.trace,
platform, platform,
lookupTracker, lookupTracker,
languageVersionSettings, compilerConfiguration,
context.statementFilter, context.statementFilter,
LocalClassDescriptorHolder( LocalClassDescriptorHolder(
scope, scope,
@@ -91,7 +94,7 @@ class LocalClassifierAnalyzer(
typeResolver, typeResolver,
annotationResolver, annotationResolver,
supertypeLoopChecker, supertypeLoopChecker,
languageVersionSettings, compilerConfiguration.get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, LanguageVersionSettingsImpl.DEFAULT),
SyntheticResolveExtension.getInstance(project), SyntheticResolveExtension.getInstance(project),
delegationFilter delegationFilter
) )
@@ -17,13 +17,14 @@
package org.jetbrains.kotlin.tests.di package org.jetbrains.kotlin.tests.di
import com.intellij.openapi.project.Project 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.StorageComponentContainer
import org.jetbrains.kotlin.container.getValue import org.jetbrains.kotlin.container.getValue
import org.jetbrains.kotlin.container.useImpl import org.jetbrains.kotlin.container.useImpl
import org.jetbrains.kotlin.container.useInstance import org.jetbrains.kotlin.container.useInstance
import org.jetbrains.kotlin.context.ModuleContext import org.jetbrains.kotlin.context.ModuleContext
import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.frontend.di.configureCommon
import org.jetbrains.kotlin.frontend.di.configureModule import org.jetbrains.kotlin.frontend.di.configureModule
import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.resolve.DescriptorResolver import org.jetbrains.kotlin.resolve.DescriptorResolver
@@ -38,7 +39,7 @@ fun createContainerForTests(project: Project, module: ModuleDescriptor): Contain
return ContainerForTests(createContainer("Tests", JvmPlatform) { return ContainerForTests(createContainer("Tests", JvmPlatform) {
configureModule(ModuleContext(module, project), JvmPlatform) configureModule(ModuleContext(module, project), JvmPlatform)
useInstance(LookupTracker.DO_NOTHING) useInstance(LookupTracker.DO_NOTHING)
useInstance(LanguageVersionSettingsImpl.DEFAULT) configureCommon(CompilerConfiguration.EMPTY)
useImpl<ExpressionTypingServices>() useImpl<ExpressionTypingServices>()
}) })
} }
@@ -32,7 +32,7 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils import org.jetbrains.kotlin.diagnostics.DiagnosticUtils
import org.jetbrains.kotlin.frontend.di.createContainerForLazyBodyResolve import org.jetbrains.kotlin.frontend.di.createContainerForLazyBodyResolve
import org.jetbrains.kotlin.idea.project.TargetPlatformDetector 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.*
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.resolve.*
@@ -173,7 +173,7 @@ private object KotlinResolveDataProvider {
trace, trace,
targetPlatform, targetPlatform,
componentProvider.get<BodyResolveCache>(), componentProvider.get<BodyResolveCache>(),
analyzableElement.languageVersionSettings analyzableElement.createCompilerConfiguration()
).get<LazyTopDownAnalyzer>() ).get<LazyTopDownAnalyzer>()
lazyTopDownAnalyzer.analyzeDeclarations(TopDownAnalysisMode.TopLevelDeclarations, listOf(analyzableElement)) lazyTopDownAnalyzer.analyzeDeclarations(TopDownAnalysisMode.TopLevelDeclarations, listOf(analyzableElement))
@@ -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 val KtElement.languageVersionSettings: LanguageVersionSettings
get() { get() {
if (ServiceManager.getService(containingKtFile.project, ProjectFileIndex::class.java) == null) { if (ServiceManager.getService(containingKtFile.project, ProjectFileIndex::class.java) == null) {
@@ -588,7 +588,7 @@ class ResolveElementCache(
trace, trace,
targetPlatform, targetPlatform,
statementFilter, statementFilter,
file.languageVersionSettings file.createCompilerConfiguration()
).get<BodyResolver>() ).get<BodyResolver>()
} }
@@ -16,12 +16,13 @@
package org.jetbrains.kotlin.frontend.js.di 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.get
import org.jetbrains.kotlin.container.useImpl import org.jetbrains.kotlin.container.useImpl
import org.jetbrains.kotlin.container.useInstance import org.jetbrains.kotlin.container.useInstance
import org.jetbrains.kotlin.context.ModuleContext import org.jetbrains.kotlin.context.ModuleContext
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl 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.frontend.di.configureModule
import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.js.resolve.JsPlatform import org.jetbrains.kotlin.js.resolve.JsPlatform
@@ -38,7 +39,7 @@ fun createTopDownAnalyzerForJs(
moduleContext: ModuleContext, moduleContext: ModuleContext,
bindingTrace: BindingTrace, bindingTrace: BindingTrace,
declarationProviderFactory: DeclarationProviderFactory, declarationProviderFactory: DeclarationProviderFactory,
languageVersionSettings: LanguageVersionSettings compilerConfiguration: CompilerConfiguration
): LazyTopDownAnalyzer { ): LazyTopDownAnalyzer {
val storageComponentContainer = createContainer("TopDownAnalyzerForJs", JsPlatform) { val storageComponentContainer = createContainer("TopDownAnalyzerForJs", JsPlatform) {
configureModule(moduleContext, JsPlatform, bindingTrace) configureModule(moduleContext, JsPlatform, bindingTrace)
@@ -49,7 +50,7 @@ fun createTopDownAnalyzerForJs(
CompilerEnvironment.configure(this) CompilerEnvironment.configure(this)
useInstance(LookupTracker.DO_NOTHING) useInstance(LookupTracker.DO_NOTHING)
useInstance(languageVersionSettings) configureCommon(compilerConfiguration)
useImpl<ResolveSession>() useImpl<ResolveSession>()
useImpl<LazyTopDownAnalyzer>() useImpl<LazyTopDownAnalyzer>()
}.apply { }.apply {
@@ -16,8 +16,6 @@
package org.jetbrains.kotlin.js.analyze 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.ContextForNewModule
import org.jetbrains.kotlin.context.ModuleContext import org.jetbrains.kotlin.context.ModuleContext
import org.jetbrains.kotlin.context.ProjectContext import org.jetbrains.kotlin.context.ProjectContext
@@ -57,7 +55,7 @@ object TopDownAnalyzerFacadeForJS {
val analyzerForJs = createTopDownAnalyzerForJs( val analyzerForJs = createTopDownAnalyzerForJs(
moduleContext, trace, moduleContext, trace,
FileBasedDeclarationProviderFactory(moduleContext.storageManager, files), FileBasedDeclarationProviderFactory(moduleContext.storageManager, files),
config.configuration.get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, LanguageVersionSettingsImpl.DEFAULT) config.configuration
) )
analyzerForJs.analyzeDeclarations(TopDownAnalysisMode.TopLevelDeclarations, files) analyzerForJs.analyzeDeclarations(TopDownAnalysisMode.TopLevelDeclarations, files)
return JsAnalysisResult.success(trace, moduleContext.module) return JsAnalysisResult.success(trace, moduleContext.module)