Cache list of dependent modules in modification tracker
This commit is contained in:
@@ -81,7 +81,7 @@ private fun orderEntryToModuleInfo(project: Project, orderEntry: OrderEntry, pro
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun <T> Module.cached(provider: CachedValueProvider<T>): T {
|
fun <T> Module.cached(provider: CachedValueProvider<T>): T {
|
||||||
return CachedValuesManager.getManager(project).getCachedValue(this, provider)
|
return CachedValuesManager.getManager(project).getCachedValue(this, provider)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+12
-4
@@ -20,6 +20,7 @@ import com.intellij.openapi.module.Module
|
|||||||
import com.intellij.openapi.module.ModuleUtil
|
import com.intellij.openapi.module.ModuleUtil
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.roots.ModuleRootManager
|
import com.intellij.openapi.roots.ModuleRootManager
|
||||||
|
import com.intellij.openapi.roots.ProjectRootModificationTracker
|
||||||
import com.intellij.openapi.util.Key
|
import com.intellij.openapi.util.Key
|
||||||
import com.intellij.openapi.util.ModificationTracker
|
import com.intellij.openapi.util.ModificationTracker
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
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.PsiCodeFragment
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.impl.PsiModificationTrackerImpl
|
import com.intellij.psi.impl.PsiModificationTrackerImpl
|
||||||
|
import com.intellij.psi.util.CachedValueProvider
|
||||||
import com.intellij.psi.util.PsiModificationTracker
|
import com.intellij.psi.util.PsiModificationTracker
|
||||||
import com.intellij.util.CommonProcessors
|
import com.intellij.util.CommonProcessors
|
||||||
|
import org.jetbrains.kotlin.idea.caches.resolve.cached
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getTopmostParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getTopmostParentOfType
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.isAncestor
|
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 kotlinModCountListener = KotlinCodeBlockModificationListener.getInstance(module.project)
|
||||||
private val psiModificationTracker = PsiModificationTracker.SERVICE.getInstance(module.project)
|
private val psiModificationTracker = PsiModificationTracker.SERVICE.getInstance(module.project)
|
||||||
private val dependencies by lazy {
|
private val dependencies by lazy {
|
||||||
HashSet<Module>().apply {
|
module.cached(CachedValueProvider {
|
||||||
ModuleRootManager.getInstance(module).orderEntries().recursively().forEachModule(
|
CachedValueProvider.Result.create(
|
||||||
CommonProcessors.CollectProcessor(this))
|
HashSet<Module>().apply {
|
||||||
}
|
ModuleRootManager.getInstance(module).orderEntries().recursively().forEachModule(
|
||||||
|
CommonProcessors.CollectProcessor(this))
|
||||||
|
},
|
||||||
|
ProjectRootModificationTracker.getInstance(module.project)
|
||||||
|
)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getModificationCount(): Long {
|
override fun getModificationCount(): Long {
|
||||||
|
|||||||
Reference in New Issue
Block a user