private static IEnumerable<uint> GetProjectItemIds(IVsHierarchy hierarchy, uint itemId)
{
var items = new Queue<uint>();
if (hierarchy != null)
{
items.Enqueue(itemId);
}
while (items.Count > 0)
{
uint item = items.Dequeue();
yield return item;
item = GetItemFirstChild(hierarchy, item);
if (item == VSConstants.VSITEMID_NIL)
{
continue;
}
if (ItemHasChildren(hierarchy, item))
{
items.Enqueue(item);
}
else
{
yield return item;
}
while (TryGetItemNextSibling(hierarchy, item, out item))
{
if (item == VSConstants.VSITEMID_NIL)
{
break;
}
if (ItemHasChildren(hierarchy, item))
{
items.Enqueue(item);
}
else
{
yield return item;
}
}
}
}