@@ -562,7 +562,13 @@ export class SplitLinesCollection {
562562 eventsCollector . emit ( new viewEvents . ViewFlushedEvent ( ) ) ;
563563 }
564564
565- public onModelLinesDeleted ( eventsCollector : ViewEventsCollector , fromLineNumber : number , toLineNumber : number ) : void {
565+ public onModelLinesDeleted ( eventsCollector : ViewEventsCollector , versionId : number , fromLineNumber : number , toLineNumber : number ) : void {
566+ if ( versionId <= this . _validModelVersionId ) {
567+ // Here we check for versionId in case the lines were reconstructed in the meantime.
568+ // We don't want to apply stale change events on top of a newer read model state.
569+ return ;
570+ }
571+
566572 let outputFromLineNumber = ( fromLineNumber === 1 ? 1 : this . prefixSumComputer . getAccumulatedValue ( fromLineNumber - 2 ) + 1 ) ;
567573 let outputToLineNumber = this . prefixSumComputer . getAccumulatedValue ( toLineNumber - 1 ) ;
568574
@@ -572,7 +578,13 @@ export class SplitLinesCollection {
572578 eventsCollector . emit ( new viewEvents . ViewLinesDeletedEvent ( outputFromLineNumber , outputToLineNumber ) ) ;
573579 }
574580
575- public onModelLinesInserted ( eventsCollector : ViewEventsCollector , fromLineNumber : number , toLineNumber : number , text : string [ ] ) : void {
581+ public onModelLinesInserted ( eventsCollector : ViewEventsCollector , versionId : number , fromLineNumber : number , toLineNumber : number , text : string [ ] ) : void {
582+ if ( versionId <= this . _validModelVersionId ) {
583+ // Here we check for versionId in case the lines were reconstructed in the meantime.
584+ // We don't want to apply stale change events on top of a newer read model state.
585+ return ;
586+ }
587+
576588 let hiddenAreas = this . getHiddenAreas ( ) ;
577589 let isInHiddenArea = false ;
578590 let testPosition = new Position ( fromLineNumber , 1 ) ;
@@ -605,7 +617,13 @@ export class SplitLinesCollection {
605617 eventsCollector . emit ( new viewEvents . ViewLinesInsertedEvent ( outputFromLineNumber , outputFromLineNumber + totalOutputLineCount - 1 ) ) ;
606618 }
607619
608- public onModelLineChanged ( eventsCollector : ViewEventsCollector , lineNumber : number , newText : string ) : boolean {
620+ public onModelLineChanged ( eventsCollector : ViewEventsCollector , versionId : number , lineNumber : number , newText : string ) : boolean {
621+ if ( versionId <= this . _validModelVersionId ) {
622+ // Here we check for versionId in case the lines were reconstructed in the meantime.
623+ // We don't want to apply stale change events on top of a newer read model state.
624+ return false ;
625+ }
626+
609627 let lineIndex = lineNumber - 1 ;
610628
611629 let oldOutputLineCount = this . lines [ lineIndex ] . getViewLineCount ( ) ;
0 commit comments