Skip to content

Commit a37ebbb

Browse files
Merge pull request #403 from StevenRasmussen/is-non-visible-item
Adds the 'IsNonVisibleItem' property to the 'SolutionItem' class.
2 parents e0d1596 + 95335a6 commit a37ebbb

File tree

2 files changed

+45
-4
lines changed

2 files changed

+45
-4
lines changed

src/toolkit/Community.VisualStudio.Toolkit.Shared/ExtensionMethods/IVsHierarchyExtensions.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,5 +132,37 @@ public static bool IsSharedProject(this IVsHierarchy hierarchy)
132132

133133
return hierarchy.GetSharedAssetsProject() != null;
134134
}
135+
136+
/// <summary>
137+
/// Returns the <see cref="IVsHierarchy"/> for the <see cref="IVsHierarchyItemIdentity"/>
138+
/// </summary>
139+
/// <param name="item"></param>
140+
/// <returns></returns>
141+
public static IVsHierarchy GetHierarchy(this IVsHierarchyItemIdentity item) =>
142+
item.IsNestedItem ? item.NestedHierarchy : item.Hierarchy;
143+
144+
/// <summary>
145+
/// Returns the 'ItemId' for the <see cref="IVsHierarchyItemIdentity"/>
146+
/// </summary>
147+
/// <param name="item"></param>
148+
/// <returns></returns>
149+
public static uint GetItemId(this IVsHierarchyItemIdentity item) =>
150+
item.IsNestedItem ? item.NestedItemID : item.ItemID;
151+
152+
/// <summary>
153+
/// Returns the <see cref="IVsHierarchy"/> for the <see cref="IVsHierarchyItem"/>
154+
/// </summary>
155+
/// <param name="item"></param>
156+
/// <returns></returns>
157+
public static IVsHierarchy GetHierarchy(this IVsHierarchyItem item) =>
158+
item.HierarchyIdentity.GetHierarchy();
159+
160+
/// <summary>
161+
/// Returns the 'ItemId' for the <see cref="IVsHierarchyItem"/>
162+
/// </summary>
163+
/// <param name="item"></param>
164+
/// <returns></returns>
165+
public static uint GetItemId(this IVsHierarchyItem item) =>
166+
item.HierarchyIdentity.GetItemId();
135167
}
136168
}

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

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using System.Diagnostics;
44
using System.Linq;
55
using System.Threading.Tasks;
6-
using System.Windows.Automation.Peers;
76
using Microsoft.Internal.VisualStudio.PlatformUI;
87
using Microsoft.VisualStudio;
98
using Microsoft.VisualStudio.Shell;
@@ -23,6 +22,7 @@ public class SolutionItem
2322
private IVsHierarchy _hierarchy = default!; // Initialized to non-null via the `Update()` method.
2423
private string? _fullPath;
2524
private uint _itemId;
25+
private Lazy<bool> _isNonVisibleItem = default!; // Initialized to non-null via the `Update()` method.
2626

2727
/// <summary>
2828
/// Creates a new instance of the solution item.
@@ -38,9 +38,13 @@ internal void Update(IVsHierarchyItem item)
3838
{
3939
ThreadHelper.ThrowIfNotOnUIThread();
4040
_item = item;
41-
_hierarchy = item.HierarchyIdentity.IsNestedItem ? item.HierarchyIdentity.NestedHierarchy : item.HierarchyIdentity.Hierarchy;
42-
_itemId = item.HierarchyIdentity.IsNestedItem ? item.HierarchyIdentity.NestedItemID : item.HierarchyIdentity.ItemID;
41+
_hierarchy = item.GetHierarchy();
42+
_itemId = item.GetItemId();
4343
_fullPath = GetFullPath();
44+
_isNonVisibleItem = new Lazy<bool>(() =>
45+
{
46+
return HierarchyUtilities.TryGetHierarchyProperty(_hierarchy, _itemId, (int)__VSHPROPID.VSHPROPID_IsNonMemberItem, out bool isNonMemberItem) && isNonMemberItem;
47+
});
4448
}
4549

4650
/// <summary>
@@ -73,6 +77,11 @@ internal void Update(IVsHierarchyItem item)
7377
/// </summary>
7478
public IEnumerable<SolutionItem?> Children => _children ??= _item.Children.Select(t => FromHierarchyItem(t));
7579

80+
/// <summary>
81+
/// Returns whether the item is normally hidden in solution explorer and only visible when Show All Files is enabled.
82+
/// </summary>
83+
public bool IsNonVisibleItem => _isNonVisibleItem.Value;
84+
7685
/// <summary>
7786
/// Gets information from the underlying data types.
7887
/// </summary>
@@ -128,7 +137,7 @@ public void GetItemInfo(out IVsHierarchy hierarchy, out uint itemId, out IVsHier
128137
{
129138
throw new ArgumentNullException(nameof(hierarchy));
130139
}
131-
140+
132141
ThreadHelper.ThrowIfNotOnUIThread();
133142
IVsHierarchyItem item = hierarchy.ToHierarchyItem(itemId);
134143

0 commit comments

Comments
 (0)