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/SearchCollector.cs')
-rwxr-xr-xmain/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/SearchCollector.cs544
1 files changed, 272 insertions, 272 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/SearchCollector.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/SearchCollector.cs
index e33d6099f4..053d55449f 100755
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/SearchCollector.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.FindInFiles/SearchCollector.cs
@@ -1,272 +1,272 @@
-//
-// SearchCollector.cs
-//
-// Author:
-// Mansheng Yang <lightyang0@gmail.com>
-//
-// Copyright (c) 2012 Mansheng Yang
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using ICSharpCode.NRefactory.TypeSystem;
-using MonoDevelop.Core;
-using MonoDevelop.Projects;
-using MonoDevelop.Ide.TypeSystem;
-
-namespace MonoDevelop.Ide.FindInFiles
-{
- public class SearchCollector
- {
-
- public class FileList
- {
- public Project Project
- {
- get;
- private set;
- }
-
- public IProjectContent Content
- {
- get;
- private set;
- }
-
- public IEnumerable<FilePath> Files
- {
- get;
- private set;
- }
-
- public FileList (Project project, IProjectContent content, IEnumerable<FilePath> files)
- {
- Project = project;
- Content = content;
- Files = files;
- }
- }
-
- public static IEnumerable<Project> CollectProjects (Solution solution, IEnumerable<object> entities)
- {
- return new SearchCollector (solution, null, entities).CollectProjects ();
- }
-
- public static IEnumerable<FileList> CollectFiles (Project project, IEnumerable<object> entities)
- {
- return new SearchCollector (project.ParentSolution, project, entities).CollectFiles ();
- }
-
- public static IEnumerable<FileList> CollectFiles (Solution solution, IEnumerable<object> entities)
- {
- return new SearchCollector (solution, null, entities).CollectFiles ();
- }
-
- static IEnumerable<Project> GetAllReferencingProjects (Solution solution, string assemblyName)
- {
- return solution.GetAllProjects ().Where (
- project => TypeSystemService.GetCompilation (project).Assemblies.Any (a => a.AssemblyName == assemblyName));
- }
-
- static FileList CollectDeclaringFiles (IEntity entity, IEnumerable<string> fileNames)
- {
- var project = TypeSystemService.GetProject (entity);
- var paths = fileNames.Distinct().Select (p => (FilePath)p);
- return new SearchCollector.FileList (project, TypeSystemService.GetProjectContext (project), paths);
- }
-
- public static FileList CollectDeclaringFiles (IEntity entity)
- {
- if (entity is ITypeDefinition)
- return CollectDeclaringFiles (entity, (entity as ITypeDefinition).Parts.Select (p => p.Region.FileName));
- if (entity is IMethod)
- return CollectDeclaringFiles (entity, (entity as IMethod).Parts.Select (p => p.Region.FileName));
- return CollectDeclaringFiles (entity, new [] { entity.Region.FileName });
- }
-
- Project searchProject;
- bool searchProjectAdded; // if the searchProject is added, we can stop collecting
- Solution solution;
- IEnumerable<object> entities;
- bool projectOnly; // only collect projects
-
- IDictionary<Project, ISet<string>> collectedFiles = new Dictionary<Project, ISet<string>> ();
- ISet<Project> collectedProjects = new HashSet<Project> ();
-
- ISet<string> searchedAssemblies = new HashSet<string> ();
- ISet<Project> searchedProjects = new HashSet<Project> ();
-
- /// <param name="searchProject">the project to search. use to null to search the whole solution</param>
- SearchCollector (Solution solution, Project searchProject, IEnumerable<object> entities)
- {
- this.solution = solution;
- this.searchProject = searchProject;
- this.entities = entities;
- }
-
- IEnumerable<Project> CollectProjects ()
- {
- projectOnly = true;
- foreach (var o in entities) {
- var entity = o as IEntity;
- if (entity != null) {
- Collect (TypeSystemService.GetProject (entity), entity);
- continue;
- }
- var par = o as IParameter;
- if (par != null) {
- Collect (TypeSystemService.GetProject (par.Owner), par.Owner);
- continue;
- }
- }
- return collectedProjects;
- }
-
- IEnumerable<FileList> CollectFiles ()
- {
- projectOnly = false;
- foreach (var o in entities) {
- if (o is INamespace) {
- Collect (null, null);
- continue;
- }
-
- var par = o as IParameter;
- if (par != null) {
- if (par.Owner != null) {
- Collect (TypeSystemService.GetProject (par.Owner), par.Owner);
- } else {
- Collect (IdeApp.Workbench.ActiveDocument.Project, null);
- }
- } else {
- var entity = o as IEntity;
- if (entity == null)
- continue;
- Collect (TypeSystemService.GetProject (entity), entity);
- }
-
- if (searchProjectAdded) break;
- }
- foreach (var project in collectedProjects)
- yield return new FileList (project, TypeSystemService.GetProjectContext (project), project.Files.Where (f => f.BuildAction == BuildAction.Compile).Select (f => f.FilePath));
-
- foreach (var files in collectedFiles)
- yield return new FileList (files.Key, TypeSystemService.GetProjectContext (files.Key), files.Value.Select (f => (FilePath)f));
- }
-
- void AddProject (Project project)
- {
- if (project == null)
- throw new ArgumentNullException ("project");
-
- searchProjectAdded = (project == searchProject);
-
- // remove duplicate files
- if (collectedProjects.Add (project))
- collectedFiles.Remove (project);
- }
-
- void AddFiles (Project project, IEnumerable<string> files)
- {
- if (project == null)
- throw new ArgumentNullException ("project");
-
- if (collectedProjects.Contains (project))
- return;
-
- ISet<string> fileSet;
- if (!collectedFiles.TryGetValue (project, out fileSet)) {
- fileSet = new HashSet<string> ();
- collectedFiles[project] = fileSet;
- }
-
- foreach (var file in files)
- fileSet.Add (file);
- }
-
- void Collect (Project sourceProject, IEntity entity, bool searchInProject = false)
- {
- if (searchedProjects.Contains(sourceProject))
- return;
-
- if (searchProject != null && sourceProject != searchProject) {
- // searching for a entity not defined in the project
- AddProject (searchProject);
- return;
- }
-
- if (sourceProject == null) {
- if (entity == null) {
- foreach (var project in solution.GetAllProjects ())
- AddProject (project);
- return;
- }
- // entity is defined in a referenced assembly
- var assemblyName = entity.ParentAssembly.AssemblyName;
- if (!searchedAssemblies.Add (assemblyName))
- return;
- foreach (var project in GetAllReferencingProjects (solution, assemblyName))
- AddProject (project);
-
- return;
- }
-
- if (entity == null) {
- AddProject (sourceProject);
- return;
- }
-
- var declaringType = entity.DeclaringTypeDefinition;
- // TODO: possible optimization for protected
- switch (entity.Accessibility) {
- case Accessibility.Public:
- case Accessibility.Protected:
- case Accessibility.ProtectedOrInternal:
- case Accessibility.Internal:
- case Accessibility.ProtectedAndInternal:
-
- if (declaringType != null)
- Collect (sourceProject, entity.DeclaringTypeDefinition, searchInProject);
- else if (searchProject != null || searchInProject)
- AddProject (sourceProject);
- else {
- foreach (var project in ReferenceFinder.GetAllReferencingProjects (solution, sourceProject)) {
- if (entity.Accessibility == Accessibility.Internal || entity.Accessibility == Accessibility.ProtectedAndInternal) {
- var wrapper = TypeSystemService.GetProjectContentWrapper (project);
- if (wrapper == null)
- continue;
- if (!entity.ParentAssembly.InternalsVisibleTo (wrapper.Compilation.MainAssembly))
- continue;
- }
- AddProject (project);
- }
- }
- break;
- default: // private
- if (projectOnly)
- AddProject (sourceProject);
- else if (declaringType != null)
- AddFiles (sourceProject, declaringType.Parts.Select (p => p.Region.FileName));
- break;
- }
- }
- }
-}
-
+////
+//// SearchCollector.cs
+////
+//// Author:
+//// Mansheng Yang <lightyang0@gmail.com>
+////
+//// Copyright (c) 2012 Mansheng Yang
+////
+//// Permission is hereby granted, free of charge, to any person obtaining a copy
+//// of this software and associated documentation files (the "Software"), to deal
+//// in the Software without restriction, including without limitation the rights
+//// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+//// copies of the Software, and to permit persons to whom the Software is
+//// furnished to do so, subject to the following conditions:
+////
+//// The above copyright notice and this permission notice shall be included in
+//// all copies or substantial portions of the Software.
+////
+//// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+//// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+//// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+//// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+//// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+//// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+//// THE SOFTWARE.
+//using System;
+//using System.Collections.Generic;
+//using System.Linq;
+//using ICSharpCode.NRefactory.TypeSystem;
+//using MonoDevelop.Core;
+//using MonoDevelop.Projects;
+//using MonoDevelop.Ide.TypeSystem;
+//
+//namespace MonoDevelop.Ide.FindInFiles
+//{
+// public class SearchCollector
+// {
+//
+// public class FileList
+// {
+// public Project Project
+// {
+// get;
+// private set;
+// }
+//
+// public IProjectContent Content
+// {
+// get;
+// private set;
+// }
+//
+// public IEnumerable<FilePath> Files
+// {
+// get;
+// private set;
+// }
+//
+// public FileList (Project project, IProjectContent content, IEnumerable<FilePath> files)
+// {
+// Project = project;
+// Content = content;
+// Files = files;
+// }
+// }
+//
+// public static IEnumerable<Project> CollectProjects (Solution solution, IEnumerable<object> entities)
+// {
+// return new SearchCollector (solution, null, entities).CollectProjects ();
+// }
+//
+// public static IEnumerable<FileList> CollectFiles (Project project, IEnumerable<object> entities)
+// {
+// return new SearchCollector (project.ParentSolution, project, entities).CollectFiles ();
+// }
+//
+// public static IEnumerable<FileList> CollectFiles (Solution solution, IEnumerable<object> entities)
+// {
+// return new SearchCollector (solution, null, entities).CollectFiles ();
+// }
+//
+// static IEnumerable<Project> GetAllReferencingProjects (Solution solution, string assemblyName)
+// {
+// return solution.GetAllProjects ().Where (
+// project => TypeSystemService.GetCompilation (project).Assemblies.Any (a => a.AssemblyName == assemblyName));
+// }
+//
+// static FileList CollectDeclaringFiles (IEntity entity, IEnumerable<string> fileNames)
+// {
+// var project = TypeSystemService.GetProject (entity);
+// var paths = fileNames.Distinct().Select (p => (FilePath)p);
+// return new SearchCollector.FileList (project, TypeSystemService.GetProjectContext (project), paths);
+// }
+//
+// public static FileList CollectDeclaringFiles (IEntity entity)
+// {
+// if (entity is ITypeDefinition)
+// return CollectDeclaringFiles (entity, (entity as ITypeDefinition).Parts.Select (p => p.Region.FileName));
+// if (entity is IMethod)
+// return CollectDeclaringFiles (entity, (entity as IMethod).Parts.Select (p => p.Region.FileName));
+// return CollectDeclaringFiles (entity, new [] { entity.Region.FileName });
+// }
+//
+// Project searchProject;
+// bool searchProjectAdded; // if the searchProject is added, we can stop collecting
+// Solution solution;
+// IEnumerable<object> entities;
+// bool projectOnly; // only collect projects
+//
+// IDictionary<Project, ISet<string>> collectedFiles = new Dictionary<Project, ISet<string>> ();
+// ISet<Project> collectedProjects = new HashSet<Project> ();
+//
+// ISet<string> searchedAssemblies = new HashSet<string> ();
+// ISet<Project> searchedProjects = new HashSet<Project> ();
+//
+// /// <param name="searchProject">the project to search. use to null to search the whole solution</param>
+// SearchCollector (Solution solution, Project searchProject, IEnumerable<object> entities)
+// {
+// this.solution = solution;
+// this.searchProject = searchProject;
+// this.entities = entities;
+// }
+//
+// IEnumerable<Project> CollectProjects ()
+// {
+// projectOnly = true;
+// foreach (var o in entities) {
+// var entity = o as IEntity;
+// if (entity != null) {
+// Collect (TypeSystemService.GetProject (entity), entity);
+// continue;
+// }
+// var par = o as IParameter;
+// if (par != null) {
+// Collect (TypeSystemService.GetProject (par.Owner), par.Owner);
+// continue;
+// }
+// }
+// return collectedProjects;
+// }
+//
+// IEnumerable<FileList> CollectFiles ()
+// {
+// projectOnly = false;
+// foreach (var o in entities) {
+// if (o is INamespace) {
+// Collect (null, null);
+// continue;
+// }
+//
+// var par = o as IParameter;
+// if (par != null) {
+// if (par.Owner != null) {
+// Collect (TypeSystemService.GetProject (par.Owner), par.Owner);
+// } else {
+// Collect (IdeApp.Workbench.ActiveDocument.Project, null);
+// }
+// } else {
+// var entity = o as IEntity;
+// if (entity == null)
+// continue;
+// Collect (TypeSystemService.GetProject (entity), entity);
+// }
+//
+// if (searchProjectAdded) break;
+// }
+// foreach (var project in collectedProjects)
+// yield return new FileList (project, TypeSystemService.GetProjectContext (project), project.Files.Where (f => f.BuildAction == BuildAction.Compile).Select (f => f.FilePath));
+//
+// foreach (var files in collectedFiles)
+// yield return new FileList (files.Key, TypeSystemService.GetProjectContext (files.Key), files.Value.Select (f => (FilePath)f));
+// }
+//
+// void AddProject (Project project)
+// {
+// if (project == null)
+// throw new ArgumentNullException ("project");
+//
+// searchProjectAdded = (project == searchProject);
+//
+// // remove duplicate files
+// if (collectedProjects.Add (project))
+// collectedFiles.Remove (project);
+// }
+//
+// void AddFiles (Project project, IEnumerable<string> files)
+// {
+// if (project == null)
+// throw new ArgumentNullException ("project");
+//
+// if (collectedProjects.Contains (project))
+// return;
+//
+// ISet<string> fileSet;
+// if (!collectedFiles.TryGetValue (project, out fileSet)) {
+// fileSet = new HashSet<string> ();
+// collectedFiles[project] = fileSet;
+// }
+//
+// foreach (var file in files)
+// fileSet.Add (file);
+// }
+//
+// void Collect (Project sourceProject, IEntity entity, bool searchInProject = false)
+// {
+// if (searchedProjects.Contains(sourceProject))
+// return;
+//
+// if (searchProject != null && sourceProject != searchProject) {
+// // searching for a entity not defined in the project
+// AddProject (searchProject);
+// return;
+// }
+//
+// if (sourceProject == null) {
+// if (entity == null) {
+// foreach (var project in solution.GetAllProjects ())
+// AddProject (project);
+// return;
+// }
+// // entity is defined in a referenced assembly
+// var assemblyName = entity.ParentAssembly.AssemblyName;
+// if (!searchedAssemblies.Add (assemblyName))
+// return;
+// foreach (var project in GetAllReferencingProjects (solution, assemblyName))
+// AddProject (project);
+//
+// return;
+// }
+//
+// if (entity == null) {
+// AddProject (sourceProject);
+// return;
+// }
+//
+// var declaringType = entity.DeclaringTypeDefinition;
+// // TODO: possible optimization for protected
+// switch (entity.Accessibility) {
+// case Accessibility.Public:
+// case Accessibility.Protected:
+// case Accessibility.ProtectedOrInternal:
+// case Accessibility.Internal:
+// case Accessibility.ProtectedAndInternal:
+//
+// if (declaringType != null)
+// Collect (sourceProject, entity.DeclaringTypeDefinition, searchInProject);
+// else if (searchProject != null || searchInProject)
+// AddProject (sourceProject);
+// else {
+// foreach (var project in ReferenceFinder.GetAllReferencingProjects (solution, sourceProject)) {
+// if (entity.Accessibility == Accessibility.Internal || entity.Accessibility == Accessibility.ProtectedAndInternal) {
+// var wrapper = TypeSystemService.GetProjectContentWrapper (project);
+// if (wrapper == null)
+// continue;
+// if (!entity.ParentAssembly.InternalsVisibleTo (wrapper.Compilation.MainAssembly))
+// continue;
+// }
+// AddProject (project);
+// }
+// }
+// break;
+// default: // private
+// if (projectOnly)
+// AddProject (sourceProject);
+// else if (declaringType != null)
+// AddFiles (sourceProject, declaringType.Parts.Select (p => p.Region.FileName));
+// break;
+// }
+// }
+// }
+//}
+//