-
Notifications
You must be signed in to change notification settings - Fork 0
/
ProjectTreeBuilder.cs
47 lines (44 loc) · 1.56 KB
/
ProjectTreeBuilder.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
using System.Linq;
using EnvDTE;
using EnvDTE80;
using Solution = Microsoft.CodeAnalysis.Solution;
namespace Analysis
{
public static class ProjectTreeBuilder
{
public static void AddProjectsToTree(Solution solution,ref Tree tree)
{
var projects = solution.Projects.ToList();
var allreadyAddedProjects = tree.DescendantNodes().OfType<ProjectNode>().ToList();
foreach (var project in projects)
{
var existingProject = allreadyAddedProjects.WithName(project.Name);
if (existingProject != null)
{
existingProject.Documents = project.Documents.ToList();
}
else
{
existingProject = new ProjectNode(project);
tree.AddChild(existingProject);
}
}
}
public static
Tree GetSolutionFoldersTree(DTE dte)
{
var tree = new Tree();
var projects = (dte.Solution as Solution2)?.Projects;
if (projects == null) return tree;
foreach (Project project in projects)
{
if (project?.Kind != ProjectKinds.vsProjectKindSolutionFolder) continue;
var node = new Node(project.Name);
var subProjects = project.ProjectItems.Cast<ProjectItem>().Select(p => new ProjectNode(p));
node.AddChilds(subProjects);
tree.AddChild(node);
}
return tree;
}
}
}