Browse Source

Fixed potential ArgumentNullException in search (forum-9109, though I couldn't reproduce it).

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@4457 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 16 years ago
parent
commit
f2a7b38c6c
  1. 48
      src/AddIns/Misc/SearchAndReplace/Project/Engine/Search.cs
  2. 6
      src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchReplaceInFilesManager.cs
  3. 22
      src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchReplaceManager.cs
  4. 6
      src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchReplaceUtilities.cs

48
src/AddIns/Misc/SearchAndReplace/Project/Engine/Search.cs

@ -93,17 +93,19 @@ namespace SearchAndReplace @@ -93,17 +93,19 @@ namespace SearchAndReplace
if (info != null && textIterator != null && documentIterator.CurrentFileName != null) {
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;
}
SearchResultMatch result = CreateNamedSearchResult(searchStrategy.FindNext(textIterator));
if (result != null) {
info.CurrentOffset = textIterator.Position;
return result;
if (currentInfo != null) {
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;
}
SearchResultMatch result = CreateNamedSearchResult(searchStrategy.FindNext(textIterator));
if (result != null) {
info.CurrentOffset = textIterator.Position;
return result;
}
}
}
@ -126,17 +128,19 @@ namespace SearchAndReplace @@ -126,17 +128,19 @@ namespace SearchAndReplace
{
if (info != null && textIterator != null && documentIterator.CurrentFileName != null) {
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;
}
SearchResultMatch result = CreateNamedSearchResult(searchStrategy.FindNext(textIterator, offset, length));
if (result != null) {
info.CurrentOffset = textIterator.Position;
return result;
if (currentInfo != null) {
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;
}
SearchResultMatch result = CreateNamedSearchResult(searchStrategy.FindNext(textIterator, offset, length));
if (result != null) {
info.CurrentOffset = textIterator.Position;
return result;
}
}
}

6
src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchReplaceInFilesManager.cs

@ -24,15 +24,15 @@ namespace SearchAndReplace @@ -24,15 +24,15 @@ namespace SearchAndReplace
find.TextIteratorBuilder = new ForwardTextIteratorBuilder();
}
static void SetSearchOptions()
static void SetSearchOptions(IProgressMonitor monitor)
{
find.SearchStrategy = SearchReplaceUtilities.CreateSearchStrategy(SearchOptions.SearchStrategyType);
find.DocumentIterator = SearchReplaceUtilities.CreateDocumentIterator(SearchOptions.DocumentIteratorType);
find.DocumentIterator = SearchReplaceUtilities.CreateDocumentIterator(SearchOptions.DocumentIteratorType, monitor);
}
static bool InitializeSearchInFiles(IProgressMonitor monitor)
{
SetSearchOptions();
SetSearchOptions(monitor);
find.Reset();
if (!find.SearchStrategy.CompilePattern(monitor))

22
src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchReplaceManager.cs

@ -22,22 +22,22 @@ namespace SearchAndReplace @@ -22,22 +22,22 @@ namespace SearchAndReplace
{
public static SearchAndReplaceDialog SearchAndReplaceDialog = null;
static Search find = new Search();
static Search find = new Search();
static SearchReplaceManager()
{
find.TextIteratorBuilder = new ForwardTextIteratorBuilder();
}
static void SetSearchOptions()
static void SetSearchOptions(IProgressMonitor monitor)
{
find.SearchStrategy = SearchReplaceUtilities.CreateSearchStrategy(SearchOptions.SearchStrategyType);
find.DocumentIterator = SearchReplaceUtilities.CreateDocumentIterator(SearchOptions.DocumentIteratorType);
find.DocumentIterator = SearchReplaceUtilities.CreateDocumentIterator(SearchOptions.DocumentIteratorType, monitor);
}
public static void Replace(IProgressMonitor monitor)
{
SetSearchOptions();
SetSearchOptions(monitor);
if (lastResult != null && WorkbenchSingleton.Workbench.ActiveWorkbenchWindow != null) {
ITextEditorControlProvider provider = WorkbenchSingleton.Workbench.ActiveViewContent as ITextEditorControlProvider;
if (provider != null) {
@ -66,7 +66,7 @@ namespace SearchAndReplace @@ -66,7 +66,7 @@ namespace SearchAndReplace
public static void ReplaceFirstInSelection(int offset, int length, IProgressMonitor monitor)
{
SetSearchOptions();
SetSearchOptions(monitor);
FindFirstInSelection(offset, length, monitor);
}
@ -100,7 +100,7 @@ namespace SearchAndReplace @@ -100,7 +100,7 @@ namespace SearchAndReplace
public static void MarkAll(IProgressMonitor monitor)
{
SetSearchOptions();
SetSearchOptions(monitor);
ClearSelection();
find.Reset();
if (!find.SearchStrategy.CompilePattern(monitor))
@ -125,7 +125,7 @@ namespace SearchAndReplace @@ -125,7 +125,7 @@ namespace SearchAndReplace
public static void MarkAll(int offset, int length, IProgressMonitor monitor)
{
SetSearchOptions();
SetSearchOptions(monitor);
find.Reset();
if (!find.SearchStrategy.CompilePattern(monitor))
@ -189,7 +189,7 @@ namespace SearchAndReplace @@ -189,7 +189,7 @@ namespace SearchAndReplace
public static void ReplaceAll(IProgressMonitor monitor)
{
SetSearchOptions();
SetSearchOptions(monitor);
ClearSelection();
find.Reset();
if (!find.SearchStrategy.CompilePattern(monitor))
@ -237,7 +237,7 @@ namespace SearchAndReplace @@ -237,7 +237,7 @@ namespace SearchAndReplace
public static void ReplaceAll(int offset, int length, IProgressMonitor monitor)
{
SetSearchOptions();
SetSearchOptions(monitor);
find.Reset();
if (!find.SearchStrategy.CompilePattern(monitor))
@ -268,7 +268,7 @@ namespace SearchAndReplace @@ -268,7 +268,7 @@ namespace SearchAndReplace
public static void FindNext(IProgressMonitor monitor)
{
SetSearchOptions();
SetSearchOptions(monitor);
if (find == null ||
SearchOptions.FindPattern == null ||
SearchOptions.FindPattern.Length == 0) {
@ -312,7 +312,7 @@ namespace SearchAndReplace @@ -312,7 +312,7 @@ namespace SearchAndReplace
{
foundAtLeastOneItem = false;
textSelection = null;
SetSearchOptions();
SetSearchOptions(monitor);
if (find == null ||
SearchOptions.FindPattern == null ||

6
src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchReplaceUtilities.cs

@ -56,7 +56,7 @@ namespace SearchAndReplace @@ -56,7 +56,7 @@ namespace SearchAndReplace
}
}
public static IDocumentIterator CreateDocumentIterator(DocumentIteratorType type)
public static IDocumentIterator CreateDocumentIterator(DocumentIteratorType type, IProgressMonitor monitor)
{
switch (type) {
case DocumentIteratorType.CurrentDocument:
@ -65,11 +65,15 @@ namespace SearchAndReplace @@ -65,11 +65,15 @@ namespace SearchAndReplace
case DocumentIteratorType.Directory:
try {
if (!Directory.Exists(SearchOptions.LookIn)) {
if (monitor != null) monitor.ShowingDialog = true;
MessageService.ShowMessageFormatted("${res:Dialog.NewProject.SearchReplace.SearchStringNotFound.Title}", "${res:Dialog.NewProject.SearchReplace.LookIn.DirectoryNotFound}", FileUtility.NormalizePath(SearchOptions.LookIn));
if (monitor != null) monitor.ShowingDialog = false;
return new DummyDocumentIterator();
}
} catch (Exception ex) {
if (monitor != null) monitor.ShowingDialog = true;
MessageService.ShowMessage(ex.Message);
if (monitor != null) monitor.ShowingDialog = false;
return new DummyDocumentIterator();
}
return new DirectoryDocumentIterator(SearchOptions.LookIn,

Loading…
Cancel
Save