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 2b2f34e4313..89ae63f00c6 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 @@ -81,7 +81,7 @@ private fun orderEntryToModuleInfo(project: Project, orderEntry: OrderEntry, pro } } -private fun Module.cached(provider: CachedValueProvider): T { +fun Module.cached(provider: CachedValueProvider): T { return CachedValuesManager.getManager(project).getCachedValue(this, provider) } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/KotlinCodeBlockModificationListener.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/KotlinCodeBlockModificationListener.kt index 6a206b37457..ff02f0b822a 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/KotlinCodeBlockModificationListener.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/KotlinCodeBlockModificationListener.kt @@ -20,6 +20,7 @@ import com.intellij.openapi.module.Module import com.intellij.openapi.module.ModuleUtil import com.intellij.openapi.project.Project import com.intellij.openapi.roots.ModuleRootManager +import com.intellij.openapi.roots.ProjectRootModificationTracker import com.intellij.openapi.util.Key import com.intellij.openapi.util.ModificationTracker import com.intellij.openapi.vfs.VirtualFile @@ -32,8 +33,10 @@ import com.intellij.pom.tree.events.TreeChangeEvent import com.intellij.psi.PsiCodeFragment import com.intellij.psi.PsiElement import com.intellij.psi.impl.PsiModificationTrackerImpl +import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.PsiModificationTracker import com.intellij.util.CommonProcessors +import org.jetbrains.kotlin.idea.caches.resolve.cached import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getTopmostParentOfType import org.jetbrains.kotlin.psi.psiUtil.isAncestor @@ -178,10 +181,15 @@ class KotlinModuleModificationTracker(val module: Module): ModificationTracker { private val kotlinModCountListener = KotlinCodeBlockModificationListener.getInstance(module.project) private val psiModificationTracker = PsiModificationTracker.SERVICE.getInstance(module.project) private val dependencies by lazy { - HashSet().apply { - ModuleRootManager.getInstance(module).orderEntries().recursively().forEachModule( - CommonProcessors.CollectProcessor(this)) - } + module.cached(CachedValueProvider { + CachedValueProvider.Result.create( + HashSet().apply { + ModuleRootManager.getInstance(module).orderEntries().recursively().forEachModule( + CommonProcessors.CollectProcessor(this)) + }, + ProjectRootModificationTracker.getInstance(module.project) + ) + }) } override fun getModificationCount(): Long {