void AddNode(List <TreeViewItem> items, Stack <string> namesStack, DependencyNode node, int depth) { var name = node.GetPrettyName(); if (namesStack.Contains(name)) { // circular dependency return; } var id = items.Count; items.Add(new TreeViewItem { id = id, depth = depth, displayName = name }); // TODO add assembly name m_NodeDictionary.Add(id, node); // if the tree is too deep, serialization will exceed the 7 levels limit. if (!node.HasValidChildren()) { items.Add(new TreeViewItem { id = id + 1, depth = depth + 1, displayName = "<Serialization Limit>" }); } else { namesStack.Push(name); for (int i = 0; i < node.GetNumChildren(); i++) { AddNode(items, namesStack, node.GetChild(i), depth + 1); } namesStack.Pop(); } }