Skip to content

Commit 7d555d2

Browse files
Adds the 'IsNonVisibleItem' property to the 'SolutionItem' class.
1 parent e0d1596 commit 7d555d2

File tree

3 files changed

+63
-4
lines changed

3 files changed

+63
-4
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using Microsoft.VisualStudio.Shell;
2+
using Microsoft.VisualStudio.Shell.Interop;
3+
4+
namespace Community.VisualStudio.Toolkit.Shared.Helpers
5+
{
6+
/// <summary>
7+
/// Extensions for the <see cref="IVsHierarchyItem"/> interface.
8+
/// </summary>
9+
public static class VsHierarchyExtensions
10+
{
11+
/// <summary>
12+
/// Returns the <see cref="IVsHierarchy"/> for the <see cref="IVsHierarchyItemIdentity"/>
13+
/// </summary>
14+
/// <param name="item"></param>
15+
/// <returns></returns>
16+
public static IVsHierarchy GetHierarchy(this IVsHierarchyItemIdentity item) =>
17+
item.IsNestedItem ? item.NestedHierarchy : item.Hierarchy;
18+
19+
/// <summary>
20+
/// Returns the 'ItemId' for the <see cref="IVsHierarchyItemIdentity"/>
21+
/// </summary>
22+
/// <param name="item"></param>
23+
/// <returns></returns>
24+
public static uint GetItemId(this IVsHierarchyItemIdentity item) =>
25+
item.IsNestedItem ? item.NestedItemID : item.ItemID;
26+
27+
/// <summary>
28+
/// Returns the <see cref="IVsHierarchy"/> for the <see cref="IVsHierarchyItem"/>
29+
/// </summary>
30+
/// <param name="item"></param>
31+
/// <returns></returns>
32+
public static IVsHierarchy GetHierarchy(this IVsHierarchyItem item) =>
33+
item.HierarchyIdentity.GetHierarchy();
34+
35+
/// <summary>
36+
/// Returns the 'ItemId' for the <see cref="IVsHierarchyItem"/>
37+
/// </summary>
38+
/// <param name="item"></param>
39+
/// <returns></returns>
40+
public static uint GetItemId(this IVsHierarchyItem item) =>
41+
item.HierarchyIdentity.GetItemId();
42+
}
43+
}

src/toolkit/Community.VisualStudio.Toolkit.Shared/Solution/SolutionItem.cs

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
using System.Diagnostics;
44
using System.Linq;
55
using System.Threading.Tasks;
6-
using System.Windows.Automation.Peers;
6+
using Community.VisualStudio.Toolkit.Shared.Helpers;
77
using Microsoft.Internal.VisualStudio.PlatformUI;
88
using Microsoft.VisualStudio;
99
using Microsoft.VisualStudio.Shell;
@@ -23,6 +23,7 @@ public class SolutionItem
2323
private IVsHierarchy _hierarchy = default!; // Initialized to non-null via the `Update()` method.
2424
private string? _fullPath;
2525
private uint _itemId;
26+
private Lazy<bool> _isNonVisibleItem = default!; // Initialized to non-null via the `Update()` method.
2627

2728
/// <summary>
2829
/// Creates a new instance of the solution item.
@@ -38,9 +39,18 @@ internal void Update(IVsHierarchyItem item)
3839
{
3940
ThreadHelper.ThrowIfNotOnUIThread();
4041
_item = item;
41-
_hierarchy = item.HierarchyIdentity.IsNestedItem ? item.HierarchyIdentity.NestedHierarchy : item.HierarchyIdentity.Hierarchy;
42-
_itemId = item.HierarchyIdentity.IsNestedItem ? item.HierarchyIdentity.NestedItemID : item.HierarchyIdentity.ItemID;
42+
_hierarchy = item.GetHierarchy();
43+
_itemId = item.GetItemId();
4344
_fullPath = GetFullPath();
45+
_isNonVisibleItem = new Lazy<bool>(() =>
46+
{
47+
if (HierarchyUtilities.TryGetHierarchyProperty(_hierarchy, _itemId, (int)__VSHPROPID.VSHPROPID_IsNonMemberItem, out bool isNonMemberItem)
48+
&& isNonMemberItem)
49+
{
50+
return isNonMemberItem;
51+
}
52+
return false;
53+
});
4454
}
4555

4656
/// <summary>
@@ -73,6 +83,11 @@ internal void Update(IVsHierarchyItem item)
7383
/// </summary>
7484
public IEnumerable<SolutionItem?> Children => _children ??= _item.Children.Select(t => FromHierarchyItem(t));
7585

86+
/// <summary>
87+
/// Returns whether the item is normally visible in soltuion explorer
88+
/// </summary>
89+
public bool IsNonVisibleItem => _isNonVisibleItem.Value;
90+
7691
/// <summary>
7792
/// Gets information from the underlying data types.
7893
/// </summary>
@@ -128,7 +143,7 @@ public void GetItemInfo(out IVsHierarchy hierarchy, out uint itemId, out IVsHier
128143
{
129144
throw new ArgumentNullException(nameof(hierarchy));
130145
}
131-
146+
132147
ThreadHelper.ThrowIfNotOnUIThread();
133148
IVsHierarchyItem item = hierarchy.ToHierarchyItem(itemId);
134149

src/toolkit/Community.VisualStudio.Toolkit.Shared/VSSDK.Helpers.Shared.projitems

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
</PropertyGroup>
1111
<ItemGroup>
1212
<Compile Include="$(MSBuildThisFileDirectory)Debugger\Debugger.cs" />
13+
<Compile Include="$(MSBuildThisFileDirectory)Helpers\IVsHierarchyItem.cs" />
1314
<Compile Include="$(MSBuildThisFileDirectory)Windows\IToolWindowPaneAware.cs" />
1415
<Compile Include="$(MSBuildThisFileDirectory)Windows\ToolkitToolWindowPane.cs" />
1516
<Compile Include="$(MSBuildThisFileDirectory)\Attributes\ProvideBraceCompletionAttribute.cs" />

0 commit comments

Comments
 (0)