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