diff options
author | Mike Krüger <mkrueger@novell.com> | 2011-03-21 13:21:56 +0300 |
---|---|---|
committer | Mike Krüger <mkrueger@novell.com> | 2011-03-21 13:21:56 +0300 |
commit | e17f7de75f38e1aa884b228296f8ba0497aa7afc (patch) | |
tree | 33fc8b569ac1355917d3904fca84a75d993aafa6 /main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles | |
parent | cf81cb1c7865810c97afa36f218dd7960c2582d7 (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')
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); } |