public override IReadOnlyList <TextChangeRange> GetChangeRanges(SourceText oldText) { if (oldText == null) { throw new ArgumentNullException(nameof(oldText)); } // if they are the same text there is no change. if (oldText == this) { return(TextChangeRange.NoChanges); } // first, check whether the text buffer is still alive. if (this.Container is TextBufferContainer container) { var lastEventArgs = container.LastEventArgs; if (lastEventArgs != null && lastEventArgs.OldText == oldText && lastEventArgs.NewText == this) { return(lastEventArgs.Changes); } } var oldSnapshot = oldText.TryFindCorrespondingEditorTextImage(); var newSnapshot = this.TryFindCorrespondingEditorTextImage(); return(GetChangeRanges(oldSnapshot, oldText.Length, newSnapshot)); }