Extract KotlinModuleModificationTracker to separate file
This commit is contained in:
-40
@@ -8,10 +8,7 @@ package org.jetbrains.kotlin.idea.caches.trackers
|
|||||||
import com.intellij.openapi.module.Module
|
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.ProjectRootModificationTracker
|
|
||||||
import com.intellij.openapi.util.Key
|
import com.intellij.openapi.util.Key
|
||||||
import com.intellij.openapi.util.ModificationTracker
|
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import com.intellij.pom.PomManager
|
import com.intellij.pom.PomManager
|
||||||
import com.intellij.pom.PomModelAspect
|
import com.intellij.pom.PomModelAspect
|
||||||
@@ -21,10 +18,7 @@ import com.intellij.pom.tree.TreeAspect
|
|||||||
import com.intellij.pom.tree.events.TreeChangeEvent
|
import com.intellij.pom.tree.events.TreeChangeEvent
|
||||||
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 org.jetbrains.kotlin.idea.caches.project.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
|
||||||
@@ -172,37 +166,3 @@ private val FILE_OUT_OF_BLOCK_MODIFICATION_COUNT = Key<Long>("FILE_OUT_OF_BLOCK_
|
|||||||
val KtFile.outOfBlockModificationCount: Long
|
val KtFile.outOfBlockModificationCount: Long
|
||||||
get() = getUserData(FILE_OUT_OF_BLOCK_MODIFICATION_COUNT) ?: 0
|
get() = getUserData(FILE_OUT_OF_BLOCK_MODIFICATION_COUNT) ?: 0
|
||||||
|
|
||||||
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 {
|
|
||||||
module.cached(CachedValueProvider {
|
|
||||||
CachedValueProvider.Result.create(
|
|
||||||
HashSet<Module>().apply {
|
|
||||||
ModuleRootManager.getInstance(module).orderEntries().recursively().forEachModule(
|
|
||||||
CommonProcessors.CollectProcessor(this)
|
|
||||||
)
|
|
||||||
},
|
|
||||||
ProjectRootModificationTracker.getInstance(module.project)
|
|
||||||
)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getModificationCount(): Long {
|
|
||||||
val currentGlobalCount = psiModificationTracker.outOfCodeBlockModificationCount
|
|
||||||
|
|
||||||
if (kotlinModCountListener.hasPerModuleModificationCounts()) {
|
|
||||||
val selfCount = kotlinModCountListener.getModificationCount(module)
|
|
||||||
if (selfCount == currentGlobalCount) return selfCount
|
|
||||||
var maxCount = selfCount
|
|
||||||
for (dependency in dependencies) {
|
|
||||||
val depCount = kotlinModCountListener.getModificationCount(dependency)
|
|
||||||
if (depCount == currentGlobalCount) return currentGlobalCount
|
|
||||||
if (depCount > maxCount) maxCount = depCount
|
|
||||||
}
|
|
||||||
return maxCount
|
|
||||||
}
|
|
||||||
return currentGlobalCount
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
+50
@@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.idea.caches.trackers
|
||||||
|
|
||||||
|
import com.intellij.openapi.module.Module
|
||||||
|
import com.intellij.openapi.roots.ModuleRootManager
|
||||||
|
import com.intellij.openapi.roots.ProjectRootModificationTracker
|
||||||
|
import com.intellij.openapi.util.ModificationTracker
|
||||||
|
import com.intellij.psi.util.CachedValueProvider
|
||||||
|
import com.intellij.psi.util.PsiModificationTracker
|
||||||
|
import com.intellij.util.CommonProcessors
|
||||||
|
import org.jetbrains.kotlin.idea.caches.project.cached
|
||||||
|
|
||||||
|
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 {
|
||||||
|
module.cached(CachedValueProvider {
|
||||||
|
CachedValueProvider.Result.create(
|
||||||
|
HashSet<Module>().apply {
|
||||||
|
ModuleRootManager.getInstance(module).orderEntries().recursively().forEachModule(
|
||||||
|
CommonProcessors.CollectProcessor(this)
|
||||||
|
)
|
||||||
|
},
|
||||||
|
ProjectRootModificationTracker.getInstance(module.project)
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getModificationCount(): Long {
|
||||||
|
val currentGlobalCount = psiModificationTracker.outOfCodeBlockModificationCount
|
||||||
|
|
||||||
|
if (kotlinModCountListener.hasPerModuleModificationCounts()) {
|
||||||
|
val selfCount = kotlinModCountListener.getModificationCount(module)
|
||||||
|
if (selfCount == currentGlobalCount) return selfCount
|
||||||
|
var maxCount = selfCount
|
||||||
|
for (dependency in dependencies) {
|
||||||
|
val depCount = kotlinModCountListener.getModificationCount(dependency)
|
||||||
|
if (depCount == currentGlobalCount) return currentGlobalCount
|
||||||
|
if (depCount > maxCount) maxCount = depCount
|
||||||
|
}
|
||||||
|
return maxCount
|
||||||
|
}
|
||||||
|
return currentGlobalCount
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user