From 586860e03a1c8f9150e7933b29c93aae3505b2db Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 14 Mar 2018 16:20:33 +0300 Subject: [PATCH] Refactoring: store correspondent module info in module content --- .../kotlin/cli/metadata/MetadataSerializer.kt | 2 +- .../kotlin/resolve/jvm/JvmAnalyzerFacade.kt | 5 ++-- .../kotlin/analyzer/AnalyzerFacade.kt | 28 ++++++++++++------- .../analyzer/common/CommonAnalyzerFacade.kt | 9 +++--- .../checkers/AbstractDiagnosticsTest.kt | 2 +- .../resolve/lazy/lazyResolveTestUtils.kt | 2 +- .../MultiModuleJavaAnalysisCustomTest.kt | 5 ++-- .../kotlin/caches/resolve/JsAnalyzerFacade.kt | 5 ++-- .../caches/resolve/ProjectResolutionFacade.kt | 4 +-- 9 files changed, 34 insertions(+), 28 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/MetadataSerializer.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/MetadataSerializer.kt index e36572693d8..80845f99b72 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/MetadataSerializer.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/MetadataSerializer.kt @@ -64,7 +64,7 @@ open class MetadataSerializer(private val dependOnOldBuiltIns: Boolean) { val analyzer = AnalyzerWithCompilerReport(messageCollector, configuration.languageVersionSettings) analyzer.analyzeAndReport(files) { - CommonAnalyzerFacade.analyzeFiles(files, moduleName, dependOnOldBuiltIns, configuration.languageVersionSettings) { _, content -> + CommonAnalyzerFacade.analyzeFiles(files, moduleName, dependOnOldBuiltIns, configuration.languageVersionSettings) { content -> environment.createPackagePartProvider(content.moduleContentScope) } } 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 6ae3d29723c..74612955fc4 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 @@ -43,17 +43,16 @@ class JvmPlatformParameters( object JvmAnalyzerFacade : ResolverForModuleFactory() { override fun createResolverForModule( - moduleInfo: M, moduleDescriptor: ModuleDescriptorImpl, moduleContext: ModuleContext, - moduleContent: ModuleContent, + moduleContent: ModuleContent, platformParameters: PlatformAnalysisParameters, targetEnvironment: TargetEnvironment, resolverForProject: ResolverForProject, languageSettingsProvider: LanguageSettingsProvider, packagePartProvider: PackagePartProvider ): ResolverForModule { - val (syntheticFiles, moduleContentScope) = moduleContent + val (moduleInfo, syntheticFiles, moduleContentScope) = moduleContent val project = moduleContext.project val declarationProviderFactory = DeclarationProviderFactoryService.createDeclarationProviderFactory( project, moduleContext.storageManager, syntheticFiles, diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt index 249ac3bc775..293d58b24e8 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt @@ -86,12 +86,12 @@ class ResolverForProjectImpl( private val projectContext: ProjectContext, modules: Collection, private val resolverForModuleFactoryByPlatform: (TargetPlatform?) -> ResolverForModuleFactory, - private val modulesContent: (M) -> ModuleContent, + private val modulesContent: (M) -> ModuleContent, private val platformParameters: PlatformAnalysisParameters, private val targetEnvironment: TargetEnvironment = CompilerEnvironment, override val builtIns: KotlinBuiltIns = DefaultBuiltIns.Instance, private val delegateResolver: ResolverForProject = EmptyResolverForProject(), - private val packagePartProviderFactory: (M, ModuleContent) -> PackagePartProvider = { _, _ -> PackagePartProvider.Empty }, + private val packagePartProviderFactory: (ModuleContent) -> PackagePartProvider = { _ -> PackagePartProvider.Empty }, private val firstDependency: M? = null, private val modulePlatforms: (M) -> MultiTargetPlatform?, private val packageOracleFactory: PackageOracleFactory = PackageOracleFactory.OptimisticFactory, @@ -170,11 +170,19 @@ class ResolverForProjectImpl( ResolverForModuleComputationTracker.getInstance(projectContext.project)?.onResolverComputed(module) - resolverForModuleFactoryByPlatform(module.platform).createResolverForModule( - module, descriptor as ModuleDescriptorImpl, projectContext.withModule(descriptor), modulesContent(module), - platformParameters, targetEnvironment, this@ResolverForProjectImpl, + val moduleContent = modulesContent(module) + val packagePartProvider = packagePartProviderFactory(moduleContent) + val resolverForModuleFactory = resolverForModuleFactoryByPlatform(module.platform) + + resolverForModuleFactory.createResolverForModule( + descriptor as ModuleDescriptorImpl, + projectContext.withModule(descriptor), + moduleContent, + platformParameters, + targetEnvironment, + this@ResolverForProjectImpl, languageSettingsProvider, - packagePartProviderFactory(module, modulesContent(module)) + packagePartProvider ) } } @@ -241,7 +249,8 @@ class ResolverForProjectImpl( } } -data class ModuleContent( +data class ModuleContent( + val moduleInfo: M, val syntheticFiles: Collection, val moduleContentScope: GlobalSearchScope ) @@ -283,10 +292,9 @@ interface TrackableModuleInfo : ModuleInfo { abstract class ResolverForModuleFactory { abstract fun createResolverForModule( - moduleInfo: M, moduleDescriptor: ModuleDescriptorImpl, moduleContext: ModuleContext, - moduleContent: ModuleContent, + moduleContent: ModuleContent, platformParameters: PlatformAnalysisParameters, targetEnvironment: TargetEnvironment, resolverForProject: ResolverForProject, @@ -339,7 +347,7 @@ class LazyModuleDependencies( private class DelegatingPackageFragmentProvider( private val resolverForProject: ResolverForProjectImpl, private val module: ModuleDescriptor, - moduleContent: ModuleContent, + moduleContent: ModuleContent, private val packageOracle: PackageOracle ) : PackageFragmentProvider { private val syntheticFilePackages = moduleContent.syntheticFiles.map { it.packageFqName }.toSet() 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 50219939d99..2e554688cd8 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonAnalyzerFacade.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonAnalyzerFacade.kt @@ -64,7 +64,7 @@ object CommonAnalyzerFacade : ResolverForModuleFactory() { fun analyzeFiles( files: Collection, moduleName: Name, dependOnBuiltIns: Boolean, languageVersionSettings: LanguageVersionSettings, capabilities: Map, Any?> = mapOf(MultiTargetPlatform.CAPABILITY to MultiTargetPlatform.Common), - packagePartProviderFactory: (ModuleInfo, ModuleContent) -> PackagePartProvider + packagePartProviderFactory: (ModuleContent) -> PackagePartProvider ): AnalysisResult { val moduleInfo = SourceModuleInfo(moduleName, capabilities, dependOnBuiltIns) val project = files.firstOrNull()?.project ?: throw AssertionError("No files to analyze") @@ -81,7 +81,7 @@ object CommonAnalyzerFacade : ResolverForModuleFactory() { ProjectContext(project), listOf(moduleInfo), resolverForModuleFactoryByPlatform = { CommonAnalyzerFacade }, - modulesContent = { ModuleContent(files, GlobalSearchScope.allScope(project)) }, + modulesContent = { ModuleContent(it, files, GlobalSearchScope.allScope(project)) }, platformParameters = object : PlatformAnalysisParameters {}, languageSettingsProvider = object : LanguageSettingsProvider { override fun getLanguageVersionSettings(moduleInfo: ModuleInfo, project: Project) = multiplatformLanguageSettings @@ -100,17 +100,16 @@ object CommonAnalyzerFacade : ResolverForModuleFactory() { } override fun createResolverForModule( - moduleInfo: M, moduleDescriptor: ModuleDescriptorImpl, moduleContext: ModuleContext, - moduleContent: ModuleContent, + moduleContent: ModuleContent, platformParameters: PlatformAnalysisParameters, targetEnvironment: TargetEnvironment, resolverForProject: ResolverForProject, languageSettingsProvider: LanguageSettingsProvider, packagePartProvider: PackagePartProvider ): ResolverForModule { - val (syntheticFiles, moduleContentScope) = moduleContent + val (moduleInfo, syntheticFiles, moduleContentScope) = moduleContent val project = moduleContext.project val declarationProviderFactory = DeclarationProviderFactoryService.createDeclarationProviderFactory( project, moduleContext.storageManager, syntheticFiles, diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.kt index 64d901a806c..052d5b04aac 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.kt @@ -330,7 +330,7 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() { MultiTargetPlatform.CAPABILITY to MultiTargetPlatform.Common, MODULE_FILES to files ) - ) { _, _ -> + ) { _ -> // TODO PackagePartProvider.Empty } 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 dc6a84c60c5..42b8fe2c813 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 @@ -40,7 +40,7 @@ fun createResolveSessionForFiles( "test", projectContext, listOf(testModule), { JvmAnalyzerFacade }, - { ModuleContent(syntheticFiles, GlobalSearchScope.allScope(project)) }, + { ModuleContent(it, syntheticFiles, GlobalSearchScope.allScope(project)) }, JvmPlatformParameters { testModule }, modulePlatforms = { JvmPlatform.multiTargetPlatform } ) diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt index e85d14d3941..68a5744d112 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt @@ -70,8 +70,9 @@ class MultiModuleJavaAnalysisCustomTest : KtUsefulTestCase() { val builtIns = JvmBuiltIns(projectContext.storageManager) val resolverForProject = ResolverForProjectImpl( "test", - projectContext, modules, { JvmAnalyzerFacade }, - modulesContent = { module -> ModuleContent(module.kotlinFiles, module.javaFilesScope) }, + projectContext, modules, + { JvmAnalyzerFacade }, + modulesContent = { module -> ModuleContent(module, module.kotlinFiles, module.javaFilesScope) }, platformParameters = JvmPlatformParameters { javaClass -> val moduleName = javaClass.name.asString().toLowerCase().first().toString() 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 57dfa6dc33f..6a547d09941 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 @@ -39,17 +39,16 @@ import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils object JsAnalyzerFacade : ResolverForModuleFactory() { override fun createResolverForModule( - moduleInfo: M, moduleDescriptor: ModuleDescriptorImpl, moduleContext: ModuleContext, - moduleContent: ModuleContent, + moduleContent: ModuleContent, platformParameters: PlatformAnalysisParameters, targetEnvironment: TargetEnvironment, resolverForProject: ResolverForProject, languageSettingsProvider: LanguageSettingsProvider, packagePartProvider: PackagePartProvider ): ResolverForModule { - val (syntheticFiles, moduleContentScope) = moduleContent + val (moduleInfo, syntheticFiles, moduleContentScope) = moduleContent val project = moduleContext.project val declarationProviderFactory = DeclarationProviderFactoryService.createDeclarationProviderFactory( project, 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 7c07dafce8a..1298b0539f4 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 @@ -111,7 +111,7 @@ internal class ProjectResolutionFacade( val modulesToCreateResolversFor = allModuleInfos.filter(moduleFilter) val modulesContentFactory = { module: IdeaModuleInfo -> - ModuleContent(syntheticFilesByModule[module] ?: listOf(), module.contentScope()) + ModuleContent(module, syntheticFilesByModule[module] ?: listOf(), module.contentScope()) } val jvmPlatformParameters = JvmPlatformParameters { javaClass: JavaClass -> @@ -132,7 +132,7 @@ internal class ProjectResolutionFacade( IdeaEnvironment, builtIns, delegateResolverForProject, - packagePartProviderFactory = { _, c -> IDEPackagePartProvider(c.moduleContentScope) }, + packagePartProviderFactory = { moduleContent -> IDEPackagePartProvider(moduleContent.moduleContentScope) }, firstDependency = settings.sdk?.let { SdkInfo(project, it) }, modulePlatforms = { module -> module.platform?.multiTargetPlatform }, packageOracleFactory = ServiceManager.getService(project, IdePackageOracleFactory::class.java),