private List <TreeNode> BuildSymbolTree(IBaseNode rootEntityNode, TreeNode rootTreeNode, IBaseNode selectedEntityNode) { List <TreeNode> result = new List <TreeNode>(); foreach (IBaseNode childEntityNode in rootEntityNode.Children) { if (typeof(DoxygenNode).Equals(childEntityNode.GetType())) { DoxygenNode doxyNode = (DoxygenNode)childEntityNode; DoxygenEntity entity = doxyNode.Entity; if (!AllowedDoxyEntities.Contains(entity.Kind)) { continue; } TreeNode parentNode; if (childEntityNode.ShowChildren) { parentNode = new TreeNode(entity.DisplayName); parentNode.Tag = childEntityNode; rootTreeNode.Nodes.Add(parentNode); if (selectedEntityNode != null) { if (selectedEntityNode.CompareTo(childEntityNode) == 0) { result.Add(parentNode); } } } else { parentNode = rootTreeNode; } result.AddRange(BuildSymbolTree(childEntityNode, parentNode, selectedEntityNode)); } } return(result); }