From 982b768c697c908ed319d702f4699a11aef5d8a4 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Fri, 16 Mar 2018 12:41:26 +0300 Subject: [PATCH] Refactoring: collect callbacks for collecting module info in one place --- .../kotlin/analyzer/AnalyzerFacade.kt | 10 +++---- .../analyzer/common/CommonAnalyzerFacade.kt | 10 +++---- .../resolve/lazy/lazyResolveTestUtils.kt | 14 +++++---- .../MultiModuleJavaAnalysisCustomTest.kt | 29 +++++++++---------- .../caches/resolve/ProjectResolutionFacade.kt | 16 +++++----- 5 files changed, 39 insertions(+), 40 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt index 78ba492a991..65d274ffcb1 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt @@ -85,17 +85,17 @@ class ResolverForProjectImpl( private val debugName: String, private val projectContext: ProjectContext, modules: Collection, - private val resolverForModuleFactoryByPlatform: (TargetPlatform?) -> ResolverForModuleFactory, private val modulesContent: (M) -> ModuleContent, + private val modulePlatforms: (M) -> MultiTargetPlatform?, + private val moduleLanguageSettingsProvider: LanguageSettingsProvider, + private val resolverForModuleFactoryByPlatform: (TargetPlatform?) -> ResolverForModuleFactory, private val platformParameters: PlatformAnalysisParameters, private val targetEnvironment: TargetEnvironment = CompilerEnvironment, override val builtIns: KotlinBuiltIns = DefaultBuiltIns.Instance, private val delegateResolver: ResolverForProject = EmptyResolverForProject(), private val packagePartProviderFactory: (ModuleContent) -> PackagePartProvider = { _ -> PackagePartProvider.Empty }, private val firstDependency: M? = null, - private val modulePlatforms: (M) -> MultiTargetPlatform?, private val packageOracleFactory: PackageOracleFactory = PackageOracleFactory.OptimisticFactory, - private val languageSettingsProvider: LanguageSettingsProvider = LanguageSettingsProvider.Default, private val invalidateOnOOCB: Boolean = true ) : ResolverForProject() { @@ -174,8 +174,8 @@ class ResolverForProjectImpl( val packagePartProvider = packagePartProviderFactory(moduleContent) val resolverForModuleFactory = resolverForModuleFactoryByPlatform(module.platform) - val languageVersionSettings = languageSettingsProvider.getLanguageVersionSettings(module, projectContext.project) - val targetPlatformVersion = languageSettingsProvider.getTargetPlatform(module) + val languageVersionSettings = moduleLanguageSettingsProvider.getLanguageVersionSettings(module, projectContext.project) + val targetPlatformVersion = moduleLanguageSettingsProvider.getTargetPlatform(module) resolverForModuleFactory.createResolverForModule( descriptor as ModuleDescriptorImpl, diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonAnalyzerFacade.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonAnalyzerFacade.kt index 3eecea8228e..86ab44de36f 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonAnalyzerFacade.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonAnalyzerFacade.kt @@ -80,15 +80,15 @@ object CommonAnalyzerFacade : ResolverForModuleFactory() { "sources for metadata serializer", ProjectContext(project), listOf(moduleInfo), - resolverForModuleFactoryByPlatform = { CommonAnalyzerFacade }, modulesContent = { ModuleContent(it, files, GlobalSearchScope.allScope(project)) }, - platformParameters = object : PlatformAnalysisParameters {}, - languageSettingsProvider = object : LanguageSettingsProvider { + modulePlatforms = { MultiTargetPlatform.Common }, + moduleLanguageSettingsProvider = object : LanguageSettingsProvider { override fun getLanguageVersionSettings(moduleInfo: ModuleInfo, project: Project) = multiplatformLanguageSettings override fun getTargetPlatform(moduleInfo: ModuleInfo) = TargetPlatformVersion.NoVersion }, - packagePartProviderFactory = packagePartProviderFactory, - modulePlatforms = { MultiTargetPlatform.Common } + resolverForModuleFactoryByPlatform = { CommonAnalyzerFacade }, + platformParameters = object : PlatformAnalysisParameters {}, + packagePartProviderFactory = packagePartProviderFactory ) val moduleDescriptor = resolver.descriptorForModule(moduleInfo) diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/resolve/lazy/lazyResolveTestUtils.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/resolve/lazy/lazyResolveTestUtils.kt index 42b8fe2c813..301bc4b3438 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/resolve/lazy/lazyResolveTestUtils.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/resolve/lazy/lazyResolveTestUtils.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.resolve.lazy import com.intellij.openapi.project.Project import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.kotlin.analyzer.LanguageSettingsProvider import org.jetbrains.kotlin.analyzer.ModuleContent import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.analyzer.ResolverForProjectImpl @@ -37,12 +38,13 @@ fun createResolveSessionForFiles( val projectContext = ProjectContext(project) val testModule = TestModule(addBuiltIns) val resolverForProject = ResolverForProjectImpl( - "test", - projectContext, listOf(testModule), - { JvmAnalyzerFacade }, - { ModuleContent(it, syntheticFiles, GlobalSearchScope.allScope(project)) }, - JvmPlatformParameters { testModule }, - modulePlatforms = { JvmPlatform.multiTargetPlatform } + "test", + projectContext, listOf(testModule), + { ModuleContent(it, syntheticFiles, GlobalSearchScope.allScope(project)) }, + modulePlatforms = { JvmPlatform.multiTargetPlatform }, + moduleLanguageSettingsProvider = LanguageSettingsProvider.Default, + resolverForModuleFactoryByPlatform = { JvmAnalyzerFacade }, + platformParameters = JvmPlatformParameters { testModule } ) return resolverForProject.resolverForModule(testModule).componentProvider.get() } diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt index 68a5744d112..a06f4edd615 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt @@ -19,10 +19,7 @@ package org.jetbrains.kotlin.jvm.compiler import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.search.DelegatingGlobalSearchScope import com.intellij.psi.search.GlobalSearchScope -import org.jetbrains.kotlin.analyzer.ModuleContent -import org.jetbrains.kotlin.analyzer.ModuleInfo -import org.jetbrains.kotlin.analyzer.ResolverForProject -import org.jetbrains.kotlin.analyzer.ResolverForProjectImpl +import org.jetbrains.kotlin.analyzer.* import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment @@ -36,7 +33,6 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.platform.JvmBuiltIns import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.resolve.MultiTargetPlatform import org.jetbrains.kotlin.resolve.constants.EnumValue import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass import org.jetbrains.kotlin.resolve.descriptorUtil.module @@ -69,17 +65,18 @@ class MultiModuleJavaAnalysisCustomTest : KtUsefulTestCase() { val projectContext = ProjectContext(environment.project) val builtIns = JvmBuiltIns(projectContext.storageManager) val resolverForProject = ResolverForProjectImpl( - "test", - projectContext, modules, - { JvmAnalyzerFacade }, - modulesContent = { module -> ModuleContent(module, module.kotlinFiles, module.javaFilesScope) }, - platformParameters = JvmPlatformParameters { - javaClass -> - val moduleName = javaClass.name.asString().toLowerCase().first().toString() - modules.first { it._name == moduleName } - }, - builtIns = builtIns, - modulePlatforms = { JvmPlatform.multiTargetPlatform } + "test", + projectContext, modules, + modulesContent = { module -> ModuleContent(module, module.kotlinFiles, module.javaFilesScope) }, + modulePlatforms = { JvmPlatform.multiTargetPlatform }, + moduleLanguageSettingsProvider = LanguageSettingsProvider.Default, + resolverForModuleFactoryByPlatform = { JvmAnalyzerFacade }, + platformParameters = JvmPlatformParameters { + javaClass -> + val moduleName = javaClass.name.asString().toLowerCase().first().toString() + modules.first { it._name == moduleName } + }, + builtIns = builtIns ) builtIns.initialize( diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ProjectResolutionFacade.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ProjectResolutionFacade.kt index 1298b0539f4..76c93f8fa47 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ProjectResolutionFacade.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ProjectResolutionFacade.kt @@ -123,20 +123,20 @@ internal class ProjectResolutionFacade( resolverDebugName, globalContext.withProject(project), modulesToCreateResolversFor, - { modulePlatform -> + modulesContentFactory, + modulePlatforms = { module -> module.platform?.multiTargetPlatform }, + moduleLanguageSettingsProvider = IDELanguageSettingsProvider, + resolverForModuleFactoryByPlatform = { modulePlatform -> val platform = modulePlatform ?: settings.platform IdePlatformSupport.facades[platform] ?: throw UnsupportedOperationException("Unsupported platform $platform") }, - modulesContentFactory, - jvmPlatformParameters, - IdeaEnvironment, - builtIns, - delegateResolverForProject, + platformParameters = jvmPlatformParameters, + targetEnvironment = IdeaEnvironment, + builtIns = builtIns, + delegateResolver = delegateResolverForProject, packagePartProviderFactory = { moduleContent -> IDEPackagePartProvider(moduleContent.moduleContentScope) }, firstDependency = settings.sdk?.let { SdkInfo(project, it) }, - modulePlatforms = { module -> module.platform?.multiTargetPlatform }, packageOracleFactory = ServiceManager.getService(project, IdePackageOracleFactory::class.java), - languageSettingsProvider = IDELanguageSettingsProvider, invalidateOnOOCB = invalidateOnOOCB )