FIR IDE: consider top level file change as out of block modification

This commit is contained in:
Ilya Kirillov
2020-12-21 17:16:50 +01:00
parent d3dd6e3b96
commit 8c113f02d5
@@ -18,6 +18,7 @@ import com.intellij.pom.event.PomModelEvent
import com.intellij.pom.event.PomModelListener
import com.intellij.pom.tree.TreeAspect
import com.intellij.pom.tree.events.TreeChangeEvent
import com.intellij.psi.impl.source.tree.FileElement
import org.jetbrains.annotations.TestOnly
import org.jetbrains.kotlin.idea.KotlinLanguage
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>,
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
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) {
element.psi.module?.let { module ->
moduleModificationsState.increaseModificationCountForModule(module)