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:
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/Scope.cs')
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/Scope.cs116
1 files changed, 69 insertions, 47 deletions
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 fff1d1202b..ca62a49cd9 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/Scope.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/Scope.cs
@@ -33,6 +33,7 @@ using MonoDevelop.Ide.Gui;
using MonoDevelop.Core;
using System.Security.Permissions;
using System.Security;
+using System.Threading.Tasks;
namespace MonoDevelop.Ide.FindInFiles
@@ -44,22 +45,24 @@ namespace MonoDevelop.Ide.FindInFiles
set;
}
- public abstract int GetTotalWork (FilterOptions filterOptions);
- public abstract IEnumerable<FileProvider> GetFiles (IProgressMonitor monitor, FilterOptions filterOptions);
+ public abstract Task<int> GetTotalWork (FilterOptions filterOptions);
+ public abstract Task GetFiles (ProgressMonitor monitor, FilterOptions filterOptions, ResultQueue<FileProvider> results);
public abstract string GetDescription (FilterOptions filterOptions, string pattern, string replacePattern);
}
public class DocumentScope : Scope
{
- public override int GetTotalWork (FilterOptions filterOptions)
+ public override Task<int> GetTotalWork (FilterOptions filterOptions)
{
- return 1;
+ return Task.FromResult (1);
}
- public override IEnumerable<FileProvider> GetFiles (IProgressMonitor monitor, FilterOptions filterOptions)
+ public override Task GetFiles (ProgressMonitor monitor, FilterOptions filterOptions, ResultQueue<FileProvider> results)
{
monitor.Log.WriteLine (GettextCatalog.GetString ("Looking in '{0}'", IdeApp.Workbench.ActiveDocument.FileName));
- yield return new FileProvider(IdeApp.Workbench.ActiveDocument.FileName);
+ results.Enqueue (new FileProvider(IdeApp.Workbench.ActiveDocument.FileName));
+ results.SetComplete ();
+ return Task.FromResult (0);
}
public override string GetDescription(FilterOptions filterOptions, string pattern, string replacePattern)
@@ -73,15 +76,17 @@ namespace MonoDevelop.Ide.FindInFiles
public class SelectionScope : Scope
{
- public override int GetTotalWork (FilterOptions filterOptions)
+ public override Task<int> GetTotalWork (FilterOptions filterOptions)
{
- return 1;
+ return Task.FromResult (1);
}
- public override IEnumerable<FileProvider> GetFiles (IProgressMonitor monitor, FilterOptions filterOptions)
+ public override Task GetFiles (ProgressMonitor monitor, FilterOptions filterOptions, ResultQueue<FileProvider> results)
{
var selection = IdeApp.Workbench.ActiveDocument.Editor.SelectionRange;
- yield return new FileProvider(IdeApp.Workbench.ActiveDocument.FileName, null, selection.Offset, selection.EndOffset);
+ results.Enqueue (new FileProvider (IdeApp.Workbench.ActiveDocument.FileName, null, selection.Offset, selection.EndOffset));
+ results.SetComplete ();
+ return Task.FromResult (0);
}
public override string GetDescription(FilterOptions filterOptions, string pattern, string replacePattern)
@@ -95,40 +100,44 @@ namespace MonoDevelop.Ide.FindInFiles
public class WholeSolutionScope : Scope
{
- public override int GetTotalWork (FilterOptions filterOptions)
+ public override Task<int> GetTotalWork (FilterOptions filterOptions)
{
int result = 0;
if (IdeApp.Workspace.IsOpen)
result = IdeApp.Workspace.GetAllProjects ().Sum (p => p.Files.Count);
- return result;
+ return Task.FromResult (result);
}
- public override IEnumerable<FileProvider> GetFiles (IProgressMonitor monitor, FilterOptions filterOptions)
+ public async override Task GetFiles (ProgressMonitor monitor, FilterOptions filterOptions, ResultQueue<FileProvider> results)
{
if (IdeApp.Workspace.IsOpen) {
var alreadyVisited = new HashSet<string> ();
- foreach (var solutionFolder in IdeApp.Workspace.GetAllSolutionItems().OfType<SolutionFolder>()) {
- monitor.Log.WriteLine (GettextCatalog.GetString ("Looking in solution folder '{0}'", solutionFolder.Name));
- foreach (var file in solutionFolder.Files.Where (f => filterOptions.NameMatches (f.FileName) && File.Exists (f.FullPath))) {
+ var allFiles = IdeApp.Workspace.GetAllSolutionItems ().OfType<SolutionFolder> ().SelectMany (sf => sf.Files).Where (f => filterOptions.NameMatches (f.FileName)).Select (f => f.FullPath).ToArray ();
+ await Task.Factory.StartNew (delegate {
+ foreach (var file in allFiles.Where (f => File.Exists (f.FullPath))) {
if (!IncludeBinaryFiles && !DesktopService.GetFileIsText (file.FullPath))
continue;
if (alreadyVisited.Contains (file.FullPath))
continue;
alreadyVisited.Add (file.FileName);
- yield return new FileProvider (file.FullPath);
+ results.Enqueue (new FileProvider (file.FullPath));
}
- }
- foreach (Project project in IdeApp.Workspace.GetAllProjects ()) {
- monitor.Log.WriteLine (GettextCatalog.GetString ("Looking in project '{0}'", project.Name));
- foreach (ProjectFile file in project.Files.Where (f => filterOptions.NameMatches (f.Name) && File.Exists (f.Name))) {
- if (!IncludeBinaryFiles && !DesktopService.GetFileIsText (file.FilePath))
+ results.SetComplete ();
+ });
+
+ var allProjectFiles = IdeApp.Workspace.GetAllProjects ().SelectMany (project => project.Files).Where (f => filterOptions.NameMatches (f.Name)).Select (f => new Tuple<Project,string>(f.Project,f.Name)).ToArray ();
+ await Task.Factory.StartNew (delegate {
+ foreach (var ft in allProjectFiles.Where (f => File.Exists (f.Item2))) {
+ var file = ft.Item2;
+ if (!IncludeBinaryFiles && !DesktopService.GetFileIsText (file))
continue;
- if (alreadyVisited.Contains (file.Name))
+ if (alreadyVisited.Contains (file))
continue;
- alreadyVisited.Add (file.Name);
- yield return new FileProvider (file.Name, project);
+ alreadyVisited.Add (file);
+ results.Enqueue (new FileProvider (file, ft.Item1));
}
- }
+ results.SetComplete ();
+ });
}
}
@@ -144,9 +153,9 @@ namespace MonoDevelop.Ide.FindInFiles
{
readonly Project project;
- public override int GetTotalWork (FilterOptions filterOptions)
+ public override Task<int> GetTotalWork (FilterOptions filterOptions)
{
- return project.Files.Count;
+ return Task.FromResult (project.Files.Count);
}
public WholeProjectScope (Project project)
@@ -157,21 +166,26 @@ namespace MonoDevelop.Ide.FindInFiles
this.project = project;
}
- public override IEnumerable<FileProvider> GetFiles (IProgressMonitor monitor, FilterOptions filterOptions)
+ public override Task GetFiles (ProgressMonitor monitor, FilterOptions filterOptions, ResultQueue<FileProvider> results)
{
if (IdeApp.Workspace.IsOpen) {
monitor.Log.WriteLine (GettextCatalog.GetString ("Looking in project '{0}'", project.Name));
var alreadyVisited = new HashSet<string> ();
- foreach (ProjectFile file in project.Files.Where (f => filterOptions.NameMatches (f.Name) && File.Exists (f.Name))) {
- if (!IncludeBinaryFiles && !DesktopService.GetFileIsText (file.Name))
- continue;
+ var allFiles = project.Files.Where (f => filterOptions.NameMatches (f.Name) && File.Exists (f.Name)).Select (f => f.Name).ToArray ();
+ return Task.Factory.StartNew (delegate {
+ foreach (string file in allFiles) {
+ if (!IncludeBinaryFiles && !DesktopService.GetFileIsText (file))
+ continue;
- if (alreadyVisited.Contains (file.Name))
- continue;
- alreadyVisited.Add (file.Name);
- yield return new FileProvider (file.Name, project);
- }
+ if (alreadyVisited.Contains (file))
+ continue;
+ alreadyVisited.Add (file);
+ results.Enqueue (new FileProvider (file, project));
+ }
+ results.SetComplete ();
+ });
}
+ return Task.FromResult (0);
}
public override string GetDescription (FilterOptions filterOptions, string pattern, string replacePattern)
@@ -185,18 +199,20 @@ namespace MonoDevelop.Ide.FindInFiles
public class AllOpenFilesScope : Scope
{
- public override int GetTotalWork (FilterOptions filterOptions)
+ public override Task<int> GetTotalWork (FilterOptions filterOptions)
{
- return IdeApp.Workbench.Documents.Count;
+ return Task.FromResult (IdeApp.Workbench.Documents.Count);
}
- public override IEnumerable<FileProvider> GetFiles (IProgressMonitor monitor, FilterOptions filterOptions)
+ public override Task GetFiles (ProgressMonitor monitor, FilterOptions filterOptions, ResultQueue<FileProvider> results)
{
foreach (Document document in IdeApp.Workbench.Documents) {
monitor.Log.WriteLine (GettextCatalog.GetString ("Looking in '{0}'", document.FileName));
if (!string.IsNullOrEmpty (document.FileName) && filterOptions.NameMatches (document.FileName))
- yield return new FileProvider (document.FileName);
+ results.Enqueue (new FileProvider (document.FileName));
}
+ results.SetComplete ();
+ return Task.FromResult (0);
}
public override string GetDescription (FilterOptions filterOptions, string pattern, string replacePattern)
@@ -218,9 +234,11 @@ namespace MonoDevelop.Ide.FindInFiles
set;
}
- public override int GetTotalWork (FilterOptions filterOptions)
+ public override Task<int> GetTotalWork (FilterOptions filterOptions)
{
- return GetFileNames (null, filterOptions).Count ();
+ return Task<int>.Factory.StartNew (delegate {
+ return GetFileNames (null, filterOptions).Count ();
+ });
}
public DirectoryScope (string path, bool recurse)
@@ -229,7 +247,7 @@ namespace MonoDevelop.Ide.FindInFiles
this.recurse = recurse;
}
- IEnumerable<string> GetFileNames (IProgressMonitor monitor, FilterOptions filterOptions)
+ IEnumerable<string> GetFileNames (ProgressMonitor monitor, FilterOptions filterOptions)
{
if (monitor != null)
monitor.Log.WriteLine (GettextCatalog.GetString ("Looking in '{0}'", path));
@@ -282,9 +300,13 @@ namespace MonoDevelop.Ide.FindInFiles
}
}
- public override IEnumerable<FileProvider> GetFiles (IProgressMonitor monitor, FilterOptions filterOptions)
- {
- return GetFileNames (monitor, filterOptions).Select (file => new FileProvider (file));
+ public override Task GetFiles (ProgressMonitor monitor, FilterOptions filterOptions, ResultQueue<FileProvider> results)
+ {
+ return Task.Factory.StartNew (delegate {
+ foreach (var r in GetFileNames (monitor, filterOptions).Select (file => new FileProvider (file)))
+ results.Enqueue (r);
+ results.SetComplete ();
+ });
}
public override string GetDescription (FilterOptions filterOptions, string pattern, string replacePattern)