Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Krüger <mkrueger@novell.com>2011-03-21 13:21:56 +0300
committerMike Krüger <mkrueger@novell.com>2011-03-21 13:21:56 +0300
commite17f7de75f38e1aa884b228296f8ba0497aa7afc (patch)
tree33fc8b569ac1355917d3904fca84a75d993aafa6 /main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles
parentcf81cb1c7865810c97afa36f218dd7960c2582d7 (diff)
Fixed 'Bug 681061 - Replace in files tries to open directories and
fails completely'.
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles')
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/FileProvider.cs13
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/FindReplace.cs7
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/Scope.cs15
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/SearchResultWidget.cs16
4 files changed, 34 insertions, 17 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/FileProvider.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/FileProvider.cs
index efeb322023..e53ef1dfae 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/FileProvider.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/FileProvider.cs
@@ -29,6 +29,8 @@ using System.Linq;
using MonoDevelop.Projects;
using MonoDevelop.Ide.Gui;
using System.Text;
+using MonoDevelop.Core;
+using System;
namespace MonoDevelop.Ide.FindInFiles
{
@@ -79,7 +81,14 @@ namespace MonoDevelop.Ide.FindInFiles
Document doc = SearchDocument ();
if (doc != null)
return new StringReader (doc.Editor.Text);
- return new StreamReader (FileName);
+ try {
+ if (!File.Exists (FileName))
+ return null;
+ return new StreamReader (FileName);
+ } catch (Exception e) {
+ LoggingService.LogError ("Error while opening " + FileName, e);
+ return null;
+ }
}
Document SearchDocument ()
@@ -95,6 +104,8 @@ namespace MonoDevelop.Ide.FindInFiles
{
somethingReplaced = false;
TextReader reader = Open ();
+ if (reader == null)
+ return;
buffer = new StringBuilder (reader.ReadToEnd ());
reader.Close ();
document = SearchDocument ();
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/FindReplace.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/FindReplace.cs
index 202d11422f..ffaa27af3e 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/FindReplace.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/FindReplace.cs
@@ -29,6 +29,7 @@ using System.IO;
using System.Text.RegularExpressions;
using System.Collections.Generic;
using MonoDevelop.Core;
+using System.Linq;
namespace MonoDevelop.Ide.FindInFiles
@@ -116,15 +117,17 @@ namespace MonoDevelop.Ide.FindInFiles
IEnumerable<SearchResult> FindAll (IProgressMonitor monitor, FileProvider provider, string pattern, string replacePattern, FilterOptions filter)
{
if (string.IsNullOrEmpty (pattern))
- return new SearchResult[0];
+ return Enumerable.Empty<SearchResult> ();
string content;
try {
TextReader reader = provider.Open ();
+ if (reader == null)
+ return Enumerable.Empty<SearchResult> ();
content = reader.ReadToEnd ();
reader.Close ();
} catch (Exception e) {
LoggingService.LogError ("Error while reading file", e);
- return new SearchResult[0];
+ return Enumerable.Empty<SearchResult> ();
}
if (filter.RegexSearch)
return RegexSearch (monitor, provider, content, replacePattern, filter);
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/Scope.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/Scope.cs
index e6d6f457f2..a530c82772 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/Scope.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/Scope.cs
@@ -102,11 +102,8 @@ namespace MonoDevelop.Ide.FindInFiles
if (IdeApp.Workspace.IsOpen) {
foreach (Project project in IdeApp.Workspace.GetAllProjects ()) {
monitor.Log.WriteLine (GettextCatalog.GetString ("Looking in project '{0}'", project.Name));
- foreach (ProjectFile file in project.Files) {
- if (!File.Exists (file.Name))
- continue;
- if (filterOptions.NameMatches (file.Name))
- yield return new FileProvider (file.Name, project);
+ foreach (ProjectFile file in project.Files.Where (f => filterOptions.NameMatches (f.Name) && File.Exists (f.Name))) {
+ yield return new FileProvider (file.Name, project);
}
}
}
@@ -141,13 +138,9 @@ namespace MonoDevelop.Ide.FindInFiles
{
if (IdeApp.Workspace.IsOpen) {
monitor.Log.WriteLine (GettextCatalog.GetString ("Looking in project '{0}'", project.Name));
- foreach (ProjectFile file in project.Files) {
- if (!File.Exists (file.Name))
- continue;
- if (filterOptions.NameMatches (file.Name))
- yield return new FileProvider (file.Name, project);
- }
+ return project.Files.Where (f => filterOptions.NameMatches (f.Name) && File.Exists (f.Name)).Select (f => new FileProvider (f.Name, project));
}
+ return Enumerable.Empty<FileProvider> ();
}
public override string GetDescription (FilterOptions filterOptions, string pattern, string replacePattern)
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/SearchResultWidget.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/SearchResultWidget.cs
index 05dd0ab493..3df5f8a1fa 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/SearchResultWidget.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/SearchResultWidget.cs
@@ -357,6 +357,8 @@ namespace MonoDevelop.Ide.FindInFiles
if (searchResult == null)
return;
Document doc = GetDocument (searchResult);
+ if (doc == null)
+ return;
int lineNr = doc.OffsetToLineNumber (searchResult.Offset);
fileNameRenderer.Markup = MarkupText (System.IO.Path.GetFileName (searchResult.FileName) + ":" + lineNr, didRead);
}
@@ -530,11 +532,13 @@ namespace MonoDevelop.Ide.FindInFiles
Document doc;
if (!documents.TryGetValue (result.FileName, out doc)) {
TextReader reader = result.FileProvider.Open ();
- doc = Document.CreateImmutableDocument (reader.ReadToEnd ());
+ if (reader == null)
+ return null;
+ doc = Document.CreateImmutableDocument (reader.ReadToEnd ());
doc.MimeType = DesktopService.GetMimeTypeForUri (result.FileName);
reader.Close ();
- documents[result.FileName] = doc;
+ documents [result.FileName] = doc;
}
return doc;
}
@@ -577,6 +581,8 @@ namespace MonoDevelop.Ide.FindInFiles
DocumentLocation GetLocation (SearchResult searchResult)
{
Document doc = GetDocument (searchResult);
+ if (doc == null)
+ return DocumentLocation.Empty;
int lineNr = doc.OffsetToLineNumber (searchResult.Offset);
LineSegment line = doc.GetLine (lineNr);
return new DocumentLocation (lineNr, searchResult.Offset - line.Offset + 1);
@@ -611,6 +617,8 @@ namespace MonoDevelop.Ide.FindInFiles
continue;
DocumentLocation loc = GetLocation (result);
Document doc = GetDocument (result);
+ if (doc == null)
+ continue;
LineSegment line = doc.GetLine (loc.Line);
sb.AppendFormat ("{0} ({1}, {2}):{3}", result.FileName, loc.Line, loc.Column, doc.GetTextAt (line.Offset, line.EditableLength));
@@ -674,9 +682,11 @@ namespace MonoDevelop.Ide.FindInFiles
return null;
treeviewSearchResults.Selection.SelectIter (iter);
- treeviewSearchResults.ScrollToCell (store.GetPath (iter), treeviewSearchResults.Columns[0], false, 0, 0);
+ treeviewSearchResults.ScrollToCell (store.GetPath (iter), treeviewSearchResults.Columns [0], false, 0, 0);
var searchResult = (SearchResult)store.GetValue (iter, SearchResultColumn);
Document doc = GetDocument (searchResult);
+ if (doc == null)
+ return null;
DocumentLocation location = doc.OffsetToLocation (searchResult.Offset);
return new SearchTextFileNavigationPoint (searchResult.FileName, location.Line, location.Column);
}