FIR IDE: consider top level file change as out of block modification
This commit is contained in:
+19
@@ -18,6 +18,7 @@ import com.intellij.pom.event.PomModelEvent
|
|||||||
import com.intellij.pom.event.PomModelListener
|
import com.intellij.pom.event.PomModelListener
|
||||||
import com.intellij.pom.tree.TreeAspect
|
import com.intellij.pom.tree.TreeAspect
|
||||||
import com.intellij.pom.tree.events.TreeChangeEvent
|
import com.intellij.pom.tree.events.TreeChangeEvent
|
||||||
|
import com.intellij.psi.impl.source.tree.FileElement
|
||||||
import org.jetbrains.annotations.TestOnly
|
import org.jetbrains.annotations.TestOnly
|
||||||
import org.jetbrains.kotlin.idea.KotlinLanguage
|
import org.jetbrains.kotlin.idea.KotlinLanguage
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.getNonLocalContainingInBodyDeclarationWith
|
import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.getNonLocalContainingInBodyDeclarationWith
|
||||||
@@ -77,6 +78,18 @@ internal class KotlinFirModificationTrackerService(project: Project) : Disposabl
|
|||||||
changedElements: Array<out ASTNode>,
|
changedElements: Array<out ASTNode>,
|
||||||
changeSet: TreeChangeEvent
|
changeSet: TreeChangeEvent
|
||||||
) {
|
) {
|
||||||
|
if (changedElements.isEmpty()) {
|
||||||
|
incrementModificationCountForFileChange(changeSet)
|
||||||
|
} else {
|
||||||
|
incrementModificationCountForSpecificElements(changedElements, changeSet)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun incrementModificationCountForSpecificElements(
|
||||||
|
changedElements: Array<out ASTNode>,
|
||||||
|
changeSet: TreeChangeEvent
|
||||||
|
) {
|
||||||
|
require(changedElements.isNotEmpty())
|
||||||
var isOutOfBlockChangeInAnyModule = false
|
var isOutOfBlockChangeInAnyModule = false
|
||||||
|
|
||||||
changedElements.forEach { element ->
|
changedElements.forEach { element ->
|
||||||
@@ -92,6 +105,12 @@ internal class KotlinFirModificationTrackerService(project: Project) : Disposabl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun incrementModificationCountForFileChange(changeSet: TreeChangeEvent) {
|
||||||
|
val fileElement = changeSet.rootElement as FileElement ?: return
|
||||||
|
incrementModificationTrackerForContainingModule(fileElement)
|
||||||
|
projectGlobalOutOfBlockInKotlinFilesModificationCount++
|
||||||
|
}
|
||||||
|
|
||||||
private fun incrementModificationTrackerForContainingModule(element: ASTNode) {
|
private fun incrementModificationTrackerForContainingModule(element: ASTNode) {
|
||||||
element.psi.module?.let { module ->
|
element.psi.module?.let { module ->
|
||||||
moduleModificationsState.increaseModificationCountForModule(module)
|
moduleModificationsState.increaseModificationCountForModule(module)
|
||||||
|
|||||||
Reference in New Issue
Block a user