Пример #1
0
        /// <summary>
        /// Performs the actual enumeration and factory invocation.
        /// </summary>
        private static IEnumerable <IVsSolutionHierarchyNode> Enumerate(VsSolutionHierarchyNode parent, bool isSolution)
        {
            int    hr;
            object pVar;

            hr = parent.VsHierarchy.GetProperty(parent.ItemId, (int)(isSolution ? __VSHPROPID.VSHPROPID_FirstVisibleChild : __VSHPROPID.VSHPROPID_FirstChild), out pVar);
            Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(hr);

            if (VSConstants.S_OK == hr)
            {
                uint siblingId = GetItemId(pVar);
                while (siblingId != VSConstants.VSITEMID_NIL)
                {
                    yield return(new VsSolutionHierarchyNode(parent.VsHierarchy, siblingId, new System.Lazy <VsSolutionHierarchyNode>(() => parent)));

                    hr = parent.VsHierarchy.GetProperty(siblingId, (int)(isSolution ? __VSHPROPID.VSHPROPID_NextVisibleSibling : __VSHPROPID.VSHPROPID_NextSibling), out pVar);

                    if (VSConstants.S_OK == hr)
                    {
                        siblingId = GetItemId(pVar);
                    }
                    else
                    {
                        Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(hr);
                        break;
                    }
                }
            }
        }
			public void WhenGettingParentForSolutionNode_ThenReturnsNull()
			{
				var solution = ServiceProvider.GetService<IVsSolution>();
				var hierarchy = solution as IVsHierarchy;

                var node = new VsSolutionHierarchyNode(hierarchy, VSConstants.VSITEMID_ROOT);

				Assert.Null(node.Parent);
			}
			public void WhenIteratingSolutionFolder1_ThenGetsTwoNodes()
			{
				var solution = ServiceProvider.GetService<IVsSolution>();
				var hierarchy = solution as IVsHierarchy;

                var solutionFolder1 = new VsSolutionHierarchyNode(hierarchy, VSConstants.VSITEMID_ROOT).Children
                    .FirstOrDefault(n => n.VsHierarchy.Properties(n.ItemId).DisplayName == "SolutionFolder1");

				Assert.Equal(2, solutionFolder1.Children.Count());
			}
			public void WhenIteratingTopLevelNodes_ThenGetsTwoFolders()
			{
				var solution = ServiceProvider.GetService<IVsSolution>();
				var hierarchy = solution as IVsHierarchy;

				var nodes = new VsSolutionHierarchyNode(hierarchy, VSConstants.VSITEMID_ROOT).Children.Select(n => 
                    n.VsHierarchy.Properties(n.ItemId).DisplayName).ToList();

				Assert.Equal(2, nodes.Count);
			}
			public void WhenGettingParentForSolutionFolder1_ThenReturnsSolution()
			{
				var solution = ServiceProvider.GetService<IVsSolution>();
				var hierarchy = solution as IVsHierarchy;

                var solutionFolder1 = new VsSolutionHierarchyNode(hierarchy, VSConstants.VSITEMID_ROOT).Children
                    .FirstOrDefault(n => n.VsHierarchy.Properties(n.ItemId).DisplayName == "SolutionFolder1");

				Assert.NotNull(solutionFolder1.Parent);
				Assert.Equal("SampleSolution", solutionFolder1.Parent.VsHierarchy.Properties(solutionFolder1.ItemId).DisplayName);
			}
Пример #6
0
            public void WhenGettingAncestorSolutionFolder2_ThenReturnsNull()
            {
                var solution = ServiceProvider.GetService<IVsSolution>();
                var hierarchy = solution as IVsHierarchy;

                var solutionFolder1 = new VsSolutionHierarchyNode(hierarchy, VSConstants.VSITEMID_ROOT).Children
                    .FirstOrDefault(n => n.VsHierarchy.Properties(n.ItemId).DisplayName == "SolutionFolder1");
                var solutionFolder2 = solutionFolder1.Children
                    .FirstOrDefault(n => n.VsHierarchy.Properties(n.ItemId).DisplayName == "SolutionFolder2");

                Assert.Null(solutionFolder2.Parent.Parent.Parent);
            }
Пример #7
0
		/// <summary>
		/// Initializes a new instance of the <see cref="ProjectItemNode"/> class.
		/// </summary>
		/// <param name="kind">The kind of project node.</param>
		/// <param name="hierarchyNode">The underlying hierarchy represented by this node.</param>
		/// <param name="parentNode">The parent node accessor.</param>
		/// <param name="nodeFactory">The factory for child nodes.</param>
		/// <param name="adapter">The adapter service that implements the smart cast <see cref="ITreeNode.As{T}"/>.</param>
		public ProjectItemNode(
			SolutionNodeKind kind,
			IVsSolutionHierarchyNode hierarchyNode,
			Lazy<ITreeNode> parentNode,
			ITreeNodeFactory<IVsSolutionHierarchyNode> nodeFactory,
			IAdapterService adapter)
			: base(kind, hierarchyNode, parentNode, nodeFactory, adapter)
		{
			this.nodeFactory = nodeFactory;
			this.owningProject = new Lazy<IProjectNode>(() =>
			{
				var owningHierarchy = new VsSolutionHierarchyNode(hierarchyNode.VsHierarchy, VSConstants.VSITEMID_ROOT);
				return this.nodeFactory.CreateNode(GetParent(owningHierarchy), owningHierarchy) as IProjectNode;
			});
		}
			public void WhenIteratingClassLibraryProject_ThenGetsFourNodes()
			{
				var solution = ServiceProvider.GetService<IVsSolution>();
				var hierarchy = solution as IVsHierarchy;

                var solutionFolder1 = new VsSolutionHierarchyNode(hierarchy, VSConstants.VSITEMID_ROOT).Children
                    .FirstOrDefault(n => n.VsHierarchy.Properties(n.ItemId).DisplayName == "SolutionFolder1");
				var solutionFolder2 = solutionFolder1.Children
                    .FirstOrDefault(n => n.VsHierarchy.Properties(n.ItemId).DisplayName == "SolutionFolder2");
				var project = solutionFolder2.Children
                    .FirstOrDefault(n => n.VsHierarchy.Properties(n.ItemId).DisplayName == "ClassLibrary");

                var count = project.Children.Count();
				Assert.Equal(4, count, "Expected 4 child nodes for project, but instead got {0}: {1}", count, 
                    string.Join(", ", project.Children.Select(x => x.DisplayName).ToArray()));
			}
Пример #9
0
        public void WhenGettingIdFromExtension_ThenAlwaysReturnsSameValue()
        {
            var solution = ServiceProvider.GetService<IVsSolution>();
            var hierarchy = solution as IVsHierarchy;

            var solutionFolder1 = new VsSolutionHierarchyNode(hierarchy, VSConstants.VSITEMID_ROOT).Children.FirstOrDefault(n =>
                n.VsHierarchy.Properties(n.ItemId).DisplayName == "SolutionFolder1");

            Assert.Equal(solutionFolder1.ItemId, solutionFolder1.VsHierarchy.Properties(solutionFolder1.ItemId).ItemId);

            var solutionFolder2 = solutionFolder1.Children.FirstOrDefault(n => n.VsHierarchy.Properties(n.ItemId).DisplayName == "SolutionFolder2");
            var project = solutionFolder2.Children.FirstOrDefault(n => n.VsHierarchy.Properties(n.ItemId).DisplayName == "ClassLibrary");

            Assert.Equal(solutionFolder2.ItemId, solutionFolder2.VsHierarchy.Properties(solutionFolder2.ItemId).ItemId);
            Assert.Equal(project.ItemId, project.VsHierarchy.Properties(project.ItemId).ItemId);
        }
Пример #10
0
            public void WhenGettingOwningHierarchyForItem_ThenReturnsProject()
            {
                var solution = ServiceProvider.GetService<IVsSolution>();
                var hierarchy = solution as IVsHierarchy;

                var item = new VsSolutionHierarchyNode(hierarchy, VSConstants.VSITEMID_ROOT)
                    .Children
                    .Traverse(TraverseKind.DepthFirst, node => node.Children)
                    .First(node => node.DisplayName == "SolutionItem.txt");

                Assert.NotNull(item);

                Console.WriteLine("Owning hierarchy is project? {0}", (item.VsHierarchy is IVsProject));
                Console.WriteLine("Parent display name: {0}", item.Parent.DisplayName);
                Console.WriteLine("Owning hierarchy project kind: {0}", ((EnvDTE.Project)item.Parent.ExtensibilityObject).Kind);

                Console.WriteLine("Owning hierarchy is solution folder? {0}",
                    ((EnvDTE.Project)item.Parent.ExtensibilityObject).Kind.Equals(EnvDTE80.ProjectKinds.vsProjectKindSolutionFolder, StringComparison.OrdinalIgnoreCase));
            }
			public void WhenIteratingClassLibraryProjectFolderFolder_ThenGetsOneNode()
			{
				var solution = ServiceProvider.GetService<IVsSolution>();
				var hierarchy = solution as IVsHierarchy;

                var solutionFolder1 = new VsSolutionHierarchyNode(hierarchy, VSConstants.VSITEMID_ROOT).Children
                    .FirstOrDefault(n => n.VsHierarchy.Properties(n.ItemId).DisplayName == "SolutionFolder1");
				var solutionFolder2 = solutionFolder1.Children
                    .FirstOrDefault(n => n.VsHierarchy.Properties(n.ItemId).DisplayName == "SolutionFolder2");
				var project = solutionFolder2.Children
                    .FirstOrDefault(n => n.VsHierarchy.Properties(n.ItemId).DisplayName == "ClassLibrary");

				var folder = project.Children.FirstOrDefault(n => n.VsHierarchy.Properties(n.ItemId).DisplayName == "Folder");

				folder = folder.Children.FirstOrDefault(n => n.VsHierarchy.Properties(n.ItemId).DisplayName == "Folder");

				Assert.Equal(1, folder.Children.Count());
			}
Пример #12
0
 public VsSolutionHierarchyNodeIterator(VsSolutionHierarchyNode parent)
 {
     this.parent = parent;
 }
Пример #13
0
		int IVsSolutionEvents.OnBeforeCloseProject(IVsHierarchy pHierarchy, int fRemoved)
		{
			// Quickly exit if there are no subscribers.
			if (this.ProjectClosing == null)
				return VSConstants.S_OK;

            var project = GetProject(pHierarchy);

			//This event is also fired when a solution folder is added/loaded
			if (project != null && !(project.Object is SolutionFolder))
			{
                var node = new VsSolutionHierarchyNode(pHierarchy, VSConstants.VSITEMID_ROOT);
				if (this.nodeFactory.Value.Supports(node))
				{
					this.ProjectClosing(this,
						new ProjectEventArgs(new Lazy<IProjectNode>(() =>
							GetNode(node).As<IProjectNode>())));
				}
			}

			return VSConstants.S_OK;
		}