ModuleResolverProvider: ResolveSessionForBodies are created lazily

This commit is contained in:
Pavel V. Talanov
2015-06-16 14:37:11 +03:00
parent f454b7d15e
commit 16ffdc0713
@@ -73,8 +73,10 @@ fun createModuleResolverProvider(
val moduleDescriptors = modulesToCreateResolversFor.map { resolverForProject.descriptorForModule(it) } val moduleDescriptors = modulesToCreateResolversFor.map { resolverForProject.descriptorForModule(it) }
val resolveSessionsForBodyByDescriptor = moduleDescriptors.keysToMap { val resolveSessionsForBodyByDescriptor = moduleDescriptors.keysToMap {
descriptor -> descriptor ->
val analyzer = resolverForProject.resolverForModuleDescriptor(descriptor) globalContext.storageManager.createLazyValue {
ResolveSessionForBodies(project, analyzer.lazyResolveSession) val analyzer = resolverForProject.resolverForModuleDescriptor(descriptor)
ResolveSessionForBodies(project, analyzer.lazyResolveSession)
}
} }
return ModuleResolverProviderImpl( return ModuleResolverProviderImpl(
resolverForProject, resolverForProject,
@@ -134,14 +136,15 @@ object EmptyModuleResolverProvider: ModuleResolverProvider {
class ModuleResolverProviderImpl( class ModuleResolverProviderImpl(
override val resolverForProject: ResolverForProject<IdeaModuleInfo, ResolverForModule>, override val resolverForProject: ResolverForProject<IdeaModuleInfo, ResolverForModule>,
private val bodiesResolveByDescriptor: Map<ModuleDescriptor, ResolveSessionForBodies>, private val bodiesResolveByDescriptor: Map<ModuleDescriptor, () -> ResolveSessionForBodies>,
val globalContext: GlobalContextImpl, val globalContext: GlobalContextImpl,
val delegateProvider: ModuleResolverProvider = EmptyModuleResolverProvider val delegateProvider: ModuleResolverProvider = EmptyModuleResolverProvider
): ModuleResolverProvider { ): ModuleResolverProvider {
override val exceptionTracker: ExceptionTracker = globalContext.exceptionTracker override val exceptionTracker: ExceptionTracker = globalContext.exceptionTracker
override fun resolveSessionForBodiesByDescriptor(descriptor: ModuleDescriptor): ResolveSessionForBodies { override fun resolveSessionForBodiesByDescriptor(descriptor: ModuleDescriptor): ResolveSessionForBodies {
return bodiesResolveByDescriptor[descriptor] ?: delegateProvider.resolveSessionForBodiesByDescriptor(descriptor) val computation = bodiesResolveByDescriptor[descriptor] ?: return delegateProvider.resolveSessionForBodiesByDescriptor(descriptor)
return computation()
} }
} }