diff options
author | Mike Krüger <mkrueger@xamarin.com> | 2012-10-30 15:37:42 +0400 |
---|---|---|
committer | Mike Krüger <mkrueger@xamarin.com> | 2012-10-30 15:37:42 +0400 |
commit | 2d9f1d3fa5390088e6cd25affba6850a0295baaf (patch) | |
tree | efb4601b20c0349ec0b829a3cac070572bfd7ad6 /main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/FileSearchCategory.cs | |
parent | 4e9e8cccd7321f50f2a47685f63ee02e9b648852 (diff) |
[Ide] Optimized search categories.
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/FileSearchCategory.cs')
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/FileSearchCategory.cs | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/FileSearchCategory.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/FileSearchCategory.cs index 1acb0c8ebd..3ea77b3d91 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/FileSearchCategory.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/FileSearchCategory.cs @@ -74,13 +74,13 @@ namespace MonoDevelop.Components.MainToolbar WorkerResult lastResult; string[] validTags = new [] { "f", "file"}; - public override Task<ISearchDataSource> GetResults (SearchPopupSearchPattern searchPattern, CancellationToken token) + public override Task<ISearchDataSource> GetResults (SearchPopupSearchPattern searchPattern, int resultsCount, CancellationToken token) { return Task.Factory.StartNew (delegate { + if (searchPattern.Tag != null && !validTags.Contains (searchPattern.Tag)) + return null; try { - if (searchPattern.Tag != null && !validTags.Contains (searchPattern.Tag)) - return null; - WorkerResult newResult = new WorkerResult (widget); + var newResult = new WorkerResult (widget); newResult.pattern = searchPattern.Pattern; newResult.IncludeFiles = true; newResult.IncludeTypes = true; @@ -90,11 +90,8 @@ namespace MonoDevelop.Components.MainToolbar newResult.matcher = StringMatcher.GetMatcher (toMatch, false); newResult.FullSearch = true; - foreach (SearchResult result in AllResults (lastResult, newResult)) { - token.ThrowIfCancellationRequested (); - newResult.results.AddResult (result); - } - newResult.results.Sort (new DataItemComparer (token)); + AllResults (lastResult, newResult, token); + newResult.results.SortUpToN (new DataItemComparer (token), resultsCount); lastResult = newResult; return (ISearchDataSource)newResult.results; } catch { @@ -104,7 +101,7 @@ namespace MonoDevelop.Components.MainToolbar }, token); } - IEnumerable<SearchResult> AllResults (WorkerResult lastResult, WorkerResult newResult) + void AllResults (WorkerResult lastResult, WorkerResult newResult, CancellationToken token) { // Search files if (newResult.IncludeFiles) { @@ -112,10 +109,11 @@ namespace MonoDevelop.Components.MainToolbar bool startsWithLastFilter = lastResult != null && lastResult.pattern != null && newResult.pattern.StartsWith (lastResult.pattern) && lastResult.filteredFiles != null; IEnumerable<ProjectFile> allFiles = startsWithLastFilter ? lastResult.filteredFiles : files; foreach (ProjectFile file in allFiles) { + token.ThrowIfCancellationRequested (); SearchResult curResult = newResult.CheckFile (file); if (curResult != null) { newResult.filteredFiles.Add (file); - yield return curResult; + newResult.results.Add (curResult); } } } |