diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmAnalyzerFacade.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmAnalyzerFacade.kt index 91379d40c19..79dce65dfdc 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmAnalyzerFacade.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmAnalyzerFacade.kt @@ -52,6 +52,7 @@ object JvmAnalyzerFacade : AnalyzerFacade() { platformParameters: JvmPlatformParameters, targetEnvironment: TargetEnvironment, resolverForProject: ResolverForProject, + languageSettingsProvider: LanguageSettingsProvider, packagePartProvider: PackagePartProvider ): ResolverForModule { val (syntheticFiles, moduleContentScope) = moduleContent @@ -80,7 +81,6 @@ object JvmAnalyzerFacade : AnalyzerFacade() { resolverForModule.componentProvider.get() } - val languageSettingsProvider = LanguageSettingsProvider.getInstance(project) val jvmTarget = languageSettingsProvider.getTargetPlatform(moduleInfo) as? JvmTarget ?: JvmTarget.JVM_1_6 val languageVersionSettings = languageSettingsProvider.getLanguageVersionSettings(moduleInfo, project) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt index afb8f570d6a..eaa3e2fde9d 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt @@ -164,6 +164,7 @@ abstract class AnalyzerFacade { analyzerFacade: (M) -> AnalyzerFacade

, modulesContent: (M) -> ModuleContent, platformParameters: P, + languageSettingsProvider: LanguageSettingsProvider = LanguageSettingsProvider.Default, targetEnvironment: TargetEnvironment = CompilerEnvironment, builtIns: KotlinBuiltIns = DefaultBuiltIns.Instance, delegateResolver: ResolverForProject = EmptyResolverForProject(), @@ -220,7 +221,7 @@ abstract class AnalyzerFacade { analyzerFacade(module).createResolverForModule( module, descriptor, projectContext.withModule(descriptor), modulesContent(module), - platformParameters, targetEnvironment, resolverForProject, + platformParameters, targetEnvironment, resolverForProject, languageSettingsProvider, packagePartProviderFactory(module, content) ) } @@ -243,6 +244,7 @@ abstract class AnalyzerFacade { platformParameters: P, targetEnvironment: TargetEnvironment, resolverForProject: ResolverForProject, + languageSettingsProvider: LanguageSettingsProvider, packagePartProvider: PackagePartProvider ): ResolverForModule @@ -301,10 +303,6 @@ interface LanguageSettingsProvider { override fun getTargetPlatform(moduleInfo: ModuleInfo): TargetPlatformVersion = TargetPlatformVersion.NoVersion } - - companion object { - fun getInstance(project: Project) = ServiceManager.getService(project, LanguageSettingsProvider::class.java) ?: Default - } } interface ResolverForModuleComputationTracker { @@ -314,4 +312,4 @@ interface ResolverForModuleComputationTracker { companion object { fun getInstance(project: Project): ResolverForModuleComputationTracker? = ServiceManager.getService(project, ResolverForModuleComputationTracker::class.java) ?: null } -} \ No newline at end of file +} 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 137f617501c..c65c031c7ca 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/DefaultAnalyzerFacade.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/DefaultAnalyzerFacade.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.analyzer.common import com.intellij.openapi.components.ServiceManager +import com.intellij.openapi.project.Project import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.analyzer.* import org.jetbrains.kotlin.config.* @@ -69,11 +70,16 @@ object DefaultAnalyzerFacade : AnalyzerFacade() { ): AnalysisResult { val moduleInfo = SourceModuleInfo(moduleName, capabilities, dependOnBuiltIns) val project = files.firstOrNull()?.project ?: throw AssertionError("No files to analyze") + @Suppress("NAME_SHADOWING") val resolver = setupResolverForProject( "sources for metadata serializer", ProjectContext(project), listOf(moduleInfo), { DefaultAnalyzerFacade }, { ModuleContent(files, GlobalSearchScope.allScope(project)) }, object : PlatformAnalysisParameters {}, + object : LanguageSettingsProvider { + override fun getLanguageVersionSettings(moduleInfo: ModuleInfo, project: Project) = languageVersionSettings + override fun getTargetPlatform(moduleInfo: ModuleInfo) = TargetPlatformVersion.NoVersion + }, packagePartProviderFactory = packagePartProviderFactory, modulePlatforms = { MultiTargetPlatform.Common } ) @@ -94,6 +100,7 @@ object DefaultAnalyzerFacade : AnalyzerFacade() { platformParameters: PlatformAnalysisParameters, targetEnvironment: TargetEnvironment, resolverForProject: ResolverForProject, + languageSettingsProvider: LanguageSettingsProvider, packagePartProvider: PackagePartProvider ): ResolverForModule { val (syntheticFiles, moduleContentScope) = moduleContent diff --git a/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/JsAnalyzerFacade.kt b/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/JsAnalyzerFacade.kt index 47e0691da92..960bb5b1c20 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/JsAnalyzerFacade.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/caches/resolve/JsAnalyzerFacade.kt @@ -46,6 +46,7 @@ object JsAnalyzerFacade : AnalyzerFacade() { platformParameters: PlatformAnalysisParameters, targetEnvironment: TargetEnvironment, resolverForProject: ResolverForProject, + languageSettingsProvider: LanguageSettingsProvider, packagePartProvider: PackagePartProvider ): ResolverForModule { val (syntheticFiles, moduleContentScope) = moduleContent @@ -58,8 +59,6 @@ object JsAnalyzerFacade : AnalyzerFacade() { moduleInfo ) - val languageVersionSettings = LanguageSettingsProvider.getInstance(project).getLanguageVersionSettings(moduleInfo, project) - val container = createContainerForLazyResolve( moduleContext, declarationProviderFactory, @@ -67,7 +66,7 @@ object JsAnalyzerFacade : AnalyzerFacade() { JsPlatform, TargetPlatformVersion.NoVersion, targetEnvironment, - languageVersionSettings + languageSettingsProvider.getLanguageVersionSettings(moduleInfo, project) ) var packageFragmentProvider = container.get().packageFragmentProvider diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt index 790fa90548a..d90f69dcef3 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.idea.caches.resolve -import com.intellij.openapi.components.service import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.project.Project import com.intellij.openapi.projectRoots.Sdk @@ -30,7 +29,6 @@ import com.intellij.psi.util.CachedValuesManager import com.intellij.psi.util.PsiModificationTracker import com.intellij.util.containers.SLRUCache import org.jetbrains.kotlin.analyzer.EmptyResolverForProject -import org.jetbrains.kotlin.analyzer.LanguageSettingsProvider import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.caches.resolve.KotlinCacheService import org.jetbrains.kotlin.config.LanguageFeature @@ -39,6 +37,7 @@ import org.jetbrains.kotlin.container.tryGetService import org.jetbrains.kotlin.context.GlobalContext import org.jetbrains.kotlin.context.GlobalContextImpl import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor +import org.jetbrains.kotlin.idea.compiler.IDELanguageSettingsProvider import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesModificationTracker import org.jetbrains.kotlin.idea.project.TargetPlatformDetector import org.jetbrains.kotlin.idea.project.outOfBlockModificationCount @@ -171,7 +170,7 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService { } private fun IdeaModuleInfo.supportsAdditionalBuiltInsMembers(): Boolean { - return project.service() + return IDELanguageSettingsProvider .getLanguageVersionSettings(this, project) .supportsFeature(LanguageFeature.AdditionalBuiltInsMembers) } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ModuleDependencyMapper.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ModuleDependencyMapper.kt index dcdecd677f1..5cba34c7179 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ModuleDependencyMapper.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ModuleDependencyMapper.kt @@ -31,6 +31,7 @@ import org.jetbrains.kotlin.builtins.DefaultBuiltIns import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.context.GlobalContextImpl import org.jetbrains.kotlin.context.withProject +import org.jetbrains.kotlin.idea.compiler.IDELanguageSettingsProvider import org.jetbrains.kotlin.idea.project.AnalyzerFacadeProvider import org.jetbrains.kotlin.idea.project.IdeaEnvironment import org.jetbrains.kotlin.js.resolve.JsPlatform @@ -77,7 +78,9 @@ fun createModuleResolverProvider( return AnalyzerFacade.setupResolverForProject( debugName, globalContext.withProject(project), modulesToCreateResolversFor, { module -> AnalyzerFacadeProvider.getAnalyzerFacade(module.platform ?: analysisSettings.platform) }, - modulesContent, jvmPlatformParameters, IdeaEnvironment, builtIns, + modulesContent, jvmPlatformParameters, + IDELanguageSettingsProvider, + IdeaEnvironment, builtIns, delegateResolver, { _, c -> IDEPackagePartProvider(c.moduleContentScope) }, analysisSettings.sdk?.let { SdkInfo(project, it) }, modulePlatforms = { module -> module.platform?.multiTargetPlatform }, diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/lightClasses/IDELightClassContexts.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/lightClasses/IDELightClassContexts.kt index 8c5d03c448d..adf371974f9 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/lightClasses/IDELightClassContexts.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/lightClasses/IDELightClassContexts.kt @@ -21,7 +21,6 @@ import com.intellij.openapi.project.Project import com.intellij.psi.search.EverythingGlobalScope import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.stubs.StubIndex -import org.jetbrains.kotlin.analyzer.LanguageSettingsProvider import org.jetbrains.kotlin.asJava.builder.LightClassConstructionContext import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.container.get @@ -38,6 +37,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.getModuleInfo import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.caches.resolve.lightClasses.IDELightClassConstructionContext.Mode.EXACT import org.jetbrains.kotlin.idea.caches.resolve.lightClasses.IDELightClassConstructionContext.Mode.LIGHT +import org.jetbrains.kotlin.idea.compiler.IDELanguageSettingsProvider import org.jetbrains.kotlin.idea.project.IdeaEnvironment import org.jetbrains.kotlin.idea.project.ResolveElementCache import org.jetbrains.kotlin.idea.stubindex.KotlinOverridableInternalMembersShortNameIndex @@ -254,7 +254,7 @@ object IDELightClassContexts { val moduleInfo = files.first().getModuleInfo() val container = createContainer("LightClassStub", JvmPlatform) { - val jvmTarget = LanguageSettingsProvider.getInstance(project).getTargetPlatform(moduleInfo) as? JvmTarget + val jvmTarget = IDELanguageSettingsProvider.getTargetPlatform(moduleInfo) as? JvmTarget configureModule( ModuleContext(moduleDescriptor, project), JvmPlatform, jvmTarget ?: JvmTarget.DEFAULT, trace @@ -263,7 +263,7 @@ object IDELightClassContexts { useInstance(GlobalSearchScope.EMPTY_SCOPE) useInstance(LookupTracker.DO_NOTHING) useImpl() - useInstance(LanguageSettingsProvider.getInstance(project).getLanguageVersionSettings(moduleInfo, project)) + useInstance(IDELanguageSettingsProvider.getLanguageVersionSettings(moduleInfo, project)) useInstance(FileBasedDeclarationProviderFactory(sm, files)) useImpl() diff --git a/idea/src/org/jetbrains/kotlin/idea/compiler/LanguageVersionSettingsProviderImpl.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/IDELanguageSettingsProvider.kt similarity index 93% rename from idea/src/org/jetbrains/kotlin/idea/compiler/LanguageVersionSettingsProviderImpl.kt rename to idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/IDELanguageSettingsProvider.kt index 1254741f939..58ddd5ad940 100644 --- a/idea/src/org/jetbrains/kotlin/idea/compiler/LanguageVersionSettingsProviderImpl.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/IDELanguageSettingsProvider.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2016 JetBrains s.r.o. + * Copyright 2010-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,7 +26,7 @@ import org.jetbrains.kotlin.idea.project.getLanguageVersionSettings import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.project.targetPlatform -class LanguageVersionSettingsProviderImpl : LanguageSettingsProvider { +object IDELanguageSettingsProvider : LanguageSettingsProvider { override fun getLanguageVersionSettings(moduleInfo: ModuleInfo, project: Project): LanguageVersionSettings { return (moduleInfo as? ModuleSourceInfo)?.module?.languageVersionSettings ?: project.getLanguageVersionSettings() } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/PsiBasedClassResolver.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/PsiBasedClassResolver.kt index 22bfdbfddb1..c8c8b4cba7c 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/PsiBasedClassResolver.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/PsiBasedClassResolver.kt @@ -20,11 +20,11 @@ import com.intellij.psi.PsiClass import com.intellij.psi.PsiModifier import com.intellij.psi.search.PsiShortNamesCache import org.jetbrains.annotations.TestOnly -import org.jetbrains.kotlin.analyzer.LanguageSettingsProvider import org.jetbrains.kotlin.asJava.ImpreciseResolveResult import org.jetbrains.kotlin.asJava.ImpreciseResolveResult.* import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.idea.caches.resolve.getNullableModuleInfo +import org.jetbrains.kotlin.idea.compiler.IDELanguageSettingsProvider import org.jetbrains.kotlin.idea.project.TargetPlatformDetector import org.jetbrains.kotlin.idea.stubindex.KotlinTypeAliasShortNameIndex import org.jetbrains.kotlin.idea.util.application.runReadAction @@ -235,7 +235,7 @@ class PsiBasedClassResolver @TestOnly constructor(private val targetClassFqName: private fun KtFile.getDefaultImports(): List { val moduleInfo = getNullableModuleInfo() ?: return emptyList() - val versionSettings = LanguageSettingsProvider.getInstance(project).getLanguageVersionSettings(moduleInfo, project) + val versionSettings = IDELanguageSettingsProvider.getLanguageVersionSettings(moduleInfo, project) return TargetPlatformDetector.getPlatform(this).getDefaultImports( versionSettings.supportsFeature(LanguageFeature.DefaultImportOfPackageKotlinComparisons) ) diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 775d0fb9b93..2a2cc3b9452 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -340,9 +340,6 @@ - -