diff --git a/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Engine/DocumentIterator/ProvidedDocumentInformation.cs b/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Engine/DocumentIterator/ProvidedDocumentInformation.cs index b7fb0b059c..a6e090ed34 100644 --- a/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Engine/DocumentIterator/ProvidedDocumentInformation.cs +++ b/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Engine/DocumentIterator/ProvidedDocumentInformation.cs @@ -87,6 +87,21 @@ namespace SearchAndReplace return new DocumentFactory().CreateFromTextBuffer(textBuffer); } + public override bool Equals(object obj) + { + ProvidedDocumentInformation info = obj as ProvidedDocumentInformation; + if (info == null) { + return false; + } + return this.fileName == info.fileName && + this.textAreaControl == info.textAreaControl; + } + + public override int GetHashCode() + { + return fileName.GetHashCode(); + } + public ProvidedDocumentInformation(IDocument document, string fileName, int currentOffset) { this.document = document; diff --git a/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Engine/Search.cs b/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Engine/Search.cs index e1e838c8ba..3c0642080d 100644 --- a/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Engine/Search.cs +++ b/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Engine/Search.cs @@ -88,8 +88,9 @@ namespace SearchAndReplace Debug.Assert(textIteratorBuilder != null); if (info != null && textIterator != null && documentIterator.CurrentFileName != null) { - if (info.FileName != documentIterator.CurrentFileName) { // create new iterator, if document changed - info = documentIterator.Current; + ProvidedDocumentInformation currentInfo = documentIterator.Current; + if (!info.Equals(currentInfo)) { // create new iterator, if document changed + info = currentInfo; textIterator = textIteratorBuilder.BuildTextIterator(info); } else { // old document -> initialize iterator position to caret pos textIterator.Position = info.CurrentOffset; @@ -120,8 +121,9 @@ namespace SearchAndReplace public SearchResult FindNext(int offset, int length) { if (info != null && textIterator != null && documentIterator.CurrentFileName != null) { - if (info.FileName != documentIterator.CurrentFileName) { // create new iterator, if document changed - info = documentIterator.Current; + ProvidedDocumentInformation currentInfo = documentIterator.Current; + if (!info.Equals(currentInfo)) { // create new iterator, if document changed + info = currentInfo; textIterator = textIteratorBuilder.BuildTextIterator(info); } else { // old document -> initialize iterator position to caret pos textIterator.Position = info.CurrentOffset;