33using System . Diagnostics ;
44using System . Linq ;
55using System . Threading . Tasks ;
6- using System . Windows . Automation . Peers ;
76using Microsoft . Internal . VisualStudio . PlatformUI ;
87using Microsoft . VisualStudio ;
98using 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