Retrieve module descriptors for implementing modules on demand

This commit is contained in:
Dmitry Jemerov
2017-08-03 19:38:09 +02:00
parent 0b45d25bb1
commit ac96c31a7d
2 changed files with 16 additions and 14 deletions
@@ -265,10 +265,10 @@ abstract class AnalyzerFacade {
class LazyModuleDependencies<M: ModuleInfo>( class LazyModuleDependencies<M: ModuleInfo>(
storageManager: StorageManager, storageManager: StorageManager,
module: M, private val module: M,
modulePlatforms: (M) -> MultiTargetPlatform?, modulePlatforms: (M) -> MultiTargetPlatform?,
firstDependency: M? = null, firstDependency: M? = null,
resolverForProject: ResolverForProjectImpl<M> private val resolverForProject: ResolverForProjectImpl<M>
) : ModuleDependencies { ) : ModuleDependencies {
private val dependencies = storageManager.createLazyValue { private val dependencies = storageManager.createLazyValue {
val moduleDescriptor = resolverForProject.descriptorForModule(module) val moduleDescriptor = resolverForProject.descriptorForModule(module)
@@ -288,22 +288,24 @@ class LazyModuleDependencies<M: ModuleInfo>(
}.toList() }.toList()
} }
private val visibleInternals = storageManager.createLazyValue {
module.modulesWhoseInternalsAreVisible().mapTo(LinkedHashSet()) {
resolverForProject.descriptorForModule(it as M)
}
}
private val implementingModules = storageManager.createLazyValue { private val implementingModules = storageManager.createLazyValue {
if (modulePlatforms(module) != MultiTargetPlatform.Common) emptySet<ModuleDescriptorImpl>() if (modulePlatforms(module) != MultiTargetPlatform.Common) emptySet<M>()
else resolverForProject.modules else resolverForProject.modules
.filter { modulePlatforms(it) != MultiTargetPlatform.Common && module in it.dependencies() } .filterTo(mutableSetOf()) {
.mapTo(mutableSetOf(), resolverForProject::descriptorForModule) modulePlatforms(it) != MultiTargetPlatform.Common && module in it.dependencies()
}
} }
override val allDependencies: List<ModuleDescriptorImpl> get() = dependencies() override val allDependencies: List<ModuleDescriptorImpl> get() = dependencies()
override val modulesWhoseInternalsAreVisible: Set<ModuleDescriptorImpl> get() = visibleInternals()
override val allImplementingModules: Set<ModuleDescriptorImpl> get() = implementingModules() override val modulesWhoseInternalsAreVisible: Set<ModuleDescriptorImpl>
get() =
module.modulesWhoseInternalsAreVisible().mapTo(LinkedHashSet()) {
resolverForProject.descriptorForModule(it as M)
}
override val allImplementingModules: Set<ModuleDescriptorImpl>
get() = implementingModules().mapTo(mutableSetOf()) { resolverForProject.descriptorForModule(it) }
} }
@@ -95,7 +95,7 @@ class KotlinCodeBlockModificationListener(
val newModCount = modificationTrackerImpl.outOfCodeBlockModificationCount val newModCount = modificationTrackerImpl.outOfCodeBlockModificationCount
val affectedModule = lastAffectedModule val affectedModule = lastAffectedModule
if (affectedModule != null && newModCount == lastAffectedModuleModCount + 1) { if (affectedModule != null && newModCount == lastAffectedModuleModCount + 1) {
if (perModuleChangesHighwatermark== null) { if (perModuleChangesHighwatermark == null) {
perModuleChangesHighwatermark = lastAffectedModuleModCount perModuleChangesHighwatermark = lastAffectedModuleModCount
} }
perModuleModCount[affectedModule] = newModCount perModuleModCount[affectedModule] = newModCount