From ac96c31a7de77558804e024d4986446e25fcc997 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 3 Aug 2017 19:38:09 +0200 Subject: [PATCH] Retrieve module descriptors for implementing modules on demand --- .../kotlin/analyzer/AnalyzerFacade.kt | 28 ++++++++++--------- .../KotlinCodeBlockModificationListener.kt | 2 +- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt index 2a7dcdb716c..b43db4d44ce 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt @@ -265,10 +265,10 @@ abstract class AnalyzerFacade { class LazyModuleDependencies( storageManager: StorageManager, - module: M, + private val module: M, modulePlatforms: (M) -> MultiTargetPlatform?, firstDependency: M? = null, - resolverForProject: ResolverForProjectImpl + private val resolverForProject: ResolverForProjectImpl ) : ModuleDependencies { private val dependencies = storageManager.createLazyValue { val moduleDescriptor = resolverForProject.descriptorForModule(module) @@ -288,22 +288,24 @@ class LazyModuleDependencies( }.toList() } - private val visibleInternals = storageManager.createLazyValue { - module.modulesWhoseInternalsAreVisible().mapTo(LinkedHashSet()) { - resolverForProject.descriptorForModule(it as M) - } - } - private val implementingModules = storageManager.createLazyValue { - if (modulePlatforms(module) != MultiTargetPlatform.Common) emptySet() + if (modulePlatforms(module) != MultiTargetPlatform.Common) emptySet() else resolverForProject.modules - .filter { modulePlatforms(it) != MultiTargetPlatform.Common && module in it.dependencies() } - .mapTo(mutableSetOf(), resolverForProject::descriptorForModule) + .filterTo(mutableSetOf()) { + modulePlatforms(it) != MultiTargetPlatform.Common && module in it.dependencies() + } } override val allDependencies: List get() = dependencies() - override val modulesWhoseInternalsAreVisible: Set get() = visibleInternals() - override val allImplementingModules: Set get() = implementingModules() + + override val modulesWhoseInternalsAreVisible: Set + get() = + module.modulesWhoseInternalsAreVisible().mapTo(LinkedHashSet()) { + resolverForProject.descriptorForModule(it as M) + } + + override val allImplementingModules: Set + get() = implementingModules().mapTo(mutableSetOf()) { resolverForProject.descriptorForModule(it) } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/KotlinCodeBlockModificationListener.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/KotlinCodeBlockModificationListener.kt index 153f4ebdbaf..5ca487ab11e 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/KotlinCodeBlockModificationListener.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/KotlinCodeBlockModificationListener.kt @@ -95,7 +95,7 @@ class KotlinCodeBlockModificationListener( val newModCount = modificationTrackerImpl.outOfCodeBlockModificationCount val affectedModule = lastAffectedModule if (affectedModule != null && newModCount == lastAffectedModuleModCount + 1) { - if (perModuleChangesHighwatermark== null) { + if (perModuleChangesHighwatermark == null) { perModuleChangesHighwatermark = lastAffectedModuleModCount } perModuleModCount[affectedModule] = newModCount