public IEnumerable <AsmTreeNode> LoadNodeChildrenInteractive(AsmTreeNode node)
 {
     if (node.NodeType == AssemblyTreeNodeType.Assembly)
     {
         var assembly = (AssemblyDefinition)node.IlDefinition;
         var set      = new HashSet <string>();
         return(assembly
                .MainModule
                .GetTypes()
                .OrderBy(x => x.Namespace)
                .Select(x => new AsmTreeNode(this, assembly)
         {
             NodeType = AssemblyTreeNodeType.Namespace,
             FullName = x.Namespace
         })
                .Where(x =>
         {
             var inSet = set.Contains(x.FullName);
             set.Add(x.FullName);
             return !inSet && !string.IsNullOrWhiteSpace(x.FullName);
         }));
     }
     else if (node.NodeType == AssemblyTreeNodeType.Namespace)
     {
         return(WalkNamespaceChildren(node));
     }
     else if (node.NodeType == AssemblyTreeNodeType.Type)
     {
         return(WalkTypeChildren(node));
     }
     else
     {
         return(Enumerable.Empty <AsmTreeNode>());
     }
 }
        private IEnumerable <AsmTreeNode> WalkTypeChildren(AsmTreeNode node)
        {
            var type = (TypeDefinition)node.IlDefinition;

            foreach (var method in type.Methods)
            {
                var wrappedMethod = new MonoCecilMethod(method);
                yield return(new AsmTreeNode(this, wrappedMethod)
                {
                    FullName = wrappedMethod.ToString(),
                    NodeType = AssemblyTreeNodeType.Method
                });
            }
        }
        private IEnumerable <AsmTreeNode> WalkNamespaceChildren(AsmTreeNode node)
        {
            var assembly = (AssemblyDefinition)node.IlDefinition;

            foreach (var type in assembly.MainModule.Types)
            {
                if (type.Namespace == node.FullName)
                {
                    yield return(new AsmTreeNode(this, type)
                    {
                        FullName = type.FullName,
                        NodeType = AssemblyTreeNodeType.Type
                    });
                }
            }
        }