diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt index 13f96f07473..bbbba59607e 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.context.ProjectContext import org.jetbrains.kotlin.context.withModule import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.ModuleParameters +import org.jetbrains.kotlin.descriptors.impl.LazyModuleDependencies import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.JetFile @@ -135,18 +136,23 @@ public trait AnalyzerFacade { + val dependenciesDescriptors = module.dependencies().mapTo(ArrayList()) { + dependencyInfo -> + resolverForProject.descriptorForModule(dependencyInfo as M) + } + + val builtinsModule = KotlinBuiltIns.getInstance().getBuiltInsModule() + module.dependencyOnBuiltins().adjustDependencies(builtinsModule, dependenciesDescriptors) + return dependenciesDescriptors + } + fun setupModuleDependencies() { modules.forEach { module -> - val currentModule = resolverForProject.descriptorForModule(module) - val dependenciesDescriptors = module.dependencies().mapTo(ArrayList()) { - dependencyInfo -> - resolverForProject.descriptorForModule(dependencyInfo as M) - } - - val builtinsModule = KotlinBuiltIns.getInstance().getBuiltInsModule() - module.dependencyOnBuiltins().adjustDependencies(builtinsModule, dependenciesDescriptors) - currentModule.setDependencies(dependenciesDescriptors) + resolverForProject.descriptorForModule(module).setDependencies( + LazyModuleDependencies(projectContext.storageManager) { computeDependencyDescriptors(module) } + ) } } @@ -191,4 +197,3 @@ public trait AnalyzerFacade) : ModuleDependencies - public interface ModuleDependencies { public val descriptors: List } + +public class ModuleDependenciesImpl(override val descriptors: List) : ModuleDependencies + +public class LazyModuleDependencies( + storageManager: StorageManager, + computeDependencies: () -> List +) : ModuleDependencies { + private val dependencies = storageManager.createLazyValue(computeDependencies) + + override val descriptors: List + get() = dependencies() +} \ No newline at end of file