[DS-5493] compare Interval.language and type instead of just type

GitOrigin-RevId: a42048d57f5e3f6d7f061ded1e2a9eaf6be95ca2
This commit is contained in:
Igor Slobodskov
2023-08-16 19:10:52 +02:00
committed by intellij-monorepo-bot
parent 10167ae72d
commit cf108da37d
2 changed files with 11 additions and 2 deletions

View File

@@ -53,7 +53,9 @@ class NonIncrementalCellLines private constructor(private val document: Document
}.count()
val trimAtEnd = oldCells.asReversed().zip(newCells.asReversed()).takeWhile { (oldCell, newCell) ->
oldCell.type == newCell.type && oldCell.size == newCell.size &&
oldCell.type == newCell.type &&
oldCell.language == newCell.language &&
oldCell.size == newCell.size &&
oldCell != oldAffectedCells.lastOrNull() && newCell != newAffectedCells.lastOrNull()
}.count()

View File

@@ -206,6 +206,13 @@ class NotebookIntervalPointerFactoryImpl(private val notebookCellLines: Notebook
private fun makeSnapshot(interval: NotebookCellLines.Interval) =
PointerSnapshot(pointers[interval.ordinal], interval)
private fun hasSingleIntervalsWithSameTypeAndLanguage(oldIntervals: List<NotebookCellLines.Interval>,
newIntervals: List<NotebookCellLines.Interval>): Boolean {
val old = oldIntervals.singleOrNull() ?: return false
val new = newIntervals.singleOrNull() ?: return false
return old.type == new.type && old.language == new.language
}
private fun updateChangedIntervals(e: NotebookCellLinesEvent, eventChanges: NotebookIntervalPointersEventChanges) {
when {
!e.isIntervalsChanged() -> {
@@ -214,7 +221,7 @@ class NotebookIntervalPointerFactoryImpl(private val notebookCellLines: Notebook
eventChanges.add(OnEdited(pointers[editedInterval.ordinal], editedInterval, editedInterval))
}
}
e.oldIntervals.size == 1 && e.newIntervals.size == 1 && e.oldIntervals.first().type == e.newIntervals.first().type -> {
hasSingleIntervalsWithSameTypeAndLanguage(e.oldIntervals, e.newIntervals) -> {
// only one interval changed size
for (editedInterval in e.newAffectedIntervals) {
val ptr = pointers[editedInterval.ordinal]