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();
            }
        }