From b3b7da22d467b34d33b2bf264b0682aaa0cd3a5b Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Wed, 10 Jun 2015 19:06:32 +0300 Subject: [PATCH] Module(Production/Test)SourceInfo#dependencies() is cached --- .../idea/caches/resolve/IdeaModuleInfos.kt | 40 +++++++++++-------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt index a5599a88ce6..c25d7d1cffb 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt @@ -16,24 +16,20 @@ package org.jetbrains.kotlin.idea.caches.resolve -import org.jetbrains.kotlin.analyzer.ModuleInfo -import com.intellij.psi.search.GlobalSearchScope -import com.intellij.openapi.project.Project -import com.intellij.openapi.roots.OrderEntry -import com.intellij.openapi.roots.ModuleSourceOrderEntry -import com.intellij.openapi.roots.ModuleOrderEntry -import com.intellij.openapi.roots.LibraryOrderEntry -import com.intellij.openapi.roots.JdkOrderEntry import com.intellij.openapi.module.Module -import org.jetbrains.kotlin.name.Name -import java.util.LinkedHashSet -import com.intellij.openapi.roots.ModuleRootManager -import com.intellij.openapi.roots.libraries.Library -import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.module.impl.scopes.LibraryScopeBase -import com.intellij.openapi.roots.OrderRootType +import com.intellij.openapi.project.Project +import com.intellij.openapi.projectRoots.Sdk +import com.intellij.openapi.roots.* +import com.intellij.openapi.roots.libraries.Library import com.intellij.openapi.vfs.VirtualFile +import com.intellij.psi.search.GlobalSearchScope +import com.intellij.psi.util.CachedValueProvider +import com.intellij.psi.util.CachedValuesManager +import org.jetbrains.kotlin.analyzer.ModuleInfo +import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.utils.emptyOrSingletonList +import java.util.LinkedHashSet public val LIBRARY_NAME_PREFIX: String = "library " @@ -65,6 +61,10 @@ private fun orderEntryToModuleInfo(project: Project, orderEntry: OrderEntry, pro } } +private fun Module.cached(provider: CachedValueProvider): T { + return CachedValuesManager.getManager(getProject()).getCachedValue(this, provider) +} + fun ideaModelDependencies(module: Module, productionOnly: Boolean): List { //NOTE: lib dependencies can be processed several times during recursive traversal val result = LinkedHashSet() @@ -89,7 +89,11 @@ public data class ModuleProductionSourceInfo(override val module: Module) : Modu override fun contentScope() = ModuleProductionSourceScope(module) - override fun dependencies() = ideaModelDependencies(module, productionOnly = true) + override fun dependencies() = module.cached(CachedValueProvider { + CachedValueProvider.Result( + ideaModelDependencies(module, productionOnly = true), + ProjectRootModificationTracker.getInstance(module.getProject())) + }) override fun friends() = listOf(module.testSourceInfo()) } @@ -100,7 +104,11 @@ public data class ModuleTestSourceInfo(override val module: Module) : ModuleSour override fun contentScope() = ModuleTestSourceScope(module) - override fun dependencies() = ideaModelDependencies(module, productionOnly = false) + override fun dependencies() = module.cached(CachedValueProvider { + CachedValueProvider.Result( + ideaModelDependencies(module, productionOnly = false), + ProjectRootModificationTracker.getInstance(module.getProject())) + }) } private fun ModuleSourceInfo.isTests() = this is ModuleTestSourceInfo