diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trackers/KotlinFirOutOfBlockModificationTracker.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trackers/KotlinFirOutOfBlockModificationTracker.kt index 3cc34e6c68d..33e1797ce82 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trackers/KotlinFirOutOfBlockModificationTracker.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/trackers/KotlinFirOutOfBlockModificationTracker.kt @@ -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, changeSet: TreeChangeEvent ) { + if (changedElements.isEmpty()) { + incrementModificationCountForFileChange(changeSet) + } else { + incrementModificationCountForSpecificElements(changedElements, changeSet) + } + } + + private fun incrementModificationCountForSpecificElements( + changedElements: Array, + 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)