From 16ffdc07138b61c13b6b62cf3a052fb9a0388b95 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Tue, 16 Jun 2015 14:37:11 +0300 Subject: [PATCH] ModuleResolverProvider: ResolveSessionForBodies are created lazily --- .../idea/caches/resolve/ModuleDependencyMapper.kt | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ModuleDependencyMapper.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ModuleDependencyMapper.kt index 66570d3404b..2c8295abc5b 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ModuleDependencyMapper.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ModuleDependencyMapper.kt @@ -73,8 +73,10 @@ fun createModuleResolverProvider( val moduleDescriptors = modulesToCreateResolversFor.map { resolverForProject.descriptorForModule(it) } val resolveSessionsForBodyByDescriptor = moduleDescriptors.keysToMap { descriptor -> - val analyzer = resolverForProject.resolverForModuleDescriptor(descriptor) - ResolveSessionForBodies(project, analyzer.lazyResolveSession) + globalContext.storageManager.createLazyValue { + val analyzer = resolverForProject.resolverForModuleDescriptor(descriptor) + ResolveSessionForBodies(project, analyzer.lazyResolveSession) + } } return ModuleResolverProviderImpl( resolverForProject, @@ -134,14 +136,15 @@ object EmptyModuleResolverProvider: ModuleResolverProvider { class ModuleResolverProviderImpl( override val resolverForProject: ResolverForProject, - private val bodiesResolveByDescriptor: Map, + private val bodiesResolveByDescriptor: Map ResolveSessionForBodies>, val globalContext: GlobalContextImpl, val delegateProvider: ModuleResolverProvider = EmptyModuleResolverProvider ): ModuleResolverProvider { override val exceptionTracker: ExceptionTracker = globalContext.exceptionTracker override fun resolveSessionForBodiesByDescriptor(descriptor: ModuleDescriptor): ResolveSessionForBodies { - return bodiesResolveByDescriptor[descriptor] ?: delegateProvider.resolveSessionForBodiesByDescriptor(descriptor) + val computation = bodiesResolveByDescriptor[descriptor] ?: return delegateProvider.resolveSessionForBodiesByDescriptor(descriptor) + return computation() } }