public static void ExpandHandler(TreeNode expandedNode, TreeViewHandler treeViewHandler) { if (expandedNode.HasVirtualNode()) { var processor = new NodeDevirtualizer(expandedNode, treeViewHandler); processor.ProcessNode(); VirtualNodeHandler.VirtualNodes--; expandedNode.Nodes.Remove(expandedNode.FindVirtualNode()); } }
public void LoadAssembly(ModuleDefMD manifestModule, string path, bool clear) { AnalysisHandler.Reset(); RefNode = null; CurrentModule = null; if (clear) { CurrentTreeView.Nodes.Clear(); } TreeNode file = NewFile(manifestModule, path); file.AddTo(CurrentTreeView); ModuleDefMD module = manifestModule; NameSpaceList.Clear(); TreeNode moduleNode = NewModule(module); moduleNode.AddTo(file); CurrentModule = moduleNode; if (module.Types.Any()) { foreach (TypeDef type in module.Types.OrderBy(t => t.Name.ToLower())) { new TypeHandler(this).HandleType(type, false); } } CurrentModule = moduleNode; if (module.GetAssemblyRefs().Any()) { new ReferenceHandler(this).HandleReferences(module.GetAssemblyRefs()); } var processor = new NodeDevirtualizer(RefNode, this); processor.ProcessNode(); processor.WorkerFinished += processor_WorkerFinished; RefNode = processor.Node; }
private void BrowseAndExpandMember() { object member = _searchPath.FirstOrDefault(); if (member == null) { CurrentTreeView.Focus(); _currentSearchNode.EnsureVisible(); CurrentTreeView.SelectedNode = _currentSearchNode; MainForm.HandleExpand = true; return; } if (member is TypeDef) { _currentSearchNode = _currentSearchNode.Nodes.Cast<TreeNode>().First(n => n.Text == NewType(member as TypeDef).Text); _currentSearchNode.Expand(); } else if (member is MethodDef) { var method = (MethodDef) member; TreeNode newNode = _currentSearchNode.Nodes.Cast<TreeNode>().FirstOrDefault(n => n.Text == NewMethod(method).Text); if (newNode != null) _currentSearchNode = newNode; else { foreach (TreeNode node in _currentSearchNode.Nodes.Cast<TreeNode>().Where(n => n.Tag is PropertyDef || n.Tag is EventDef)) { newNode = node.Nodes.Cast<TreeNode>().FirstOrDefault(n => n.Text == NewMethod(method).Text); if (newNode != null) { _currentSearchNode = newNode; break; } } if (newNode == null) { _searchPath.Clear(); BrowseAndExpandMember(); } } treeView_NodeMouseClick(this, new TreeNodeMouseClickEventArgs(_currentSearchNode, MouseButtons.Left, 1, _currentSearchNode.Bounds.X, _currentSearchNode.Bounds.Y)); DataGridViewHandler.SelectTab(); } else if (member is FieldDef) { _currentSearchNode = _currentSearchNode.Nodes.Cast<TreeNode>().First(n => n.Text == NewField(member as FieldDef).Text); treeView_NodeMouseClick(this, new TreeNodeMouseClickEventArgs(_currentSearchNode, MouseButtons.Left, 1, _currentSearchNode.Bounds.X, _currentSearchNode.Bounds.Y)); DataGridViewHandler.SelectTab(); } else if (member is PropertyDef) { _currentSearchNode = _currentSearchNode.Nodes.Cast<TreeNode>().First(n => n.Text == NewProperty(member as PropertyDef).Text); _currentSearchNode.Expand(); } else if (member is EventDef) { _currentSearchNode = _currentSearchNode.Nodes.Cast<TreeNode>().First(n => n.Text == NewEvent(member as EventDef).Text); _currentSearchNode.Expand(); } _searchPath.RemoveAt(0); if (_currentSearchNode.HasVirtualNode()) { var processor = new NodeDevirtualizer(_currentSearchNode, this); processor.WorkerFinished += searchProcessor_WorkerFinished; processor.ProcessNode(); VirtualNodeHandler.VirtualNodes--; _currentSearchNode.Nodes.Remove(_currentSearchNode.FindVirtualNode()); } else { BrowseAndExpandMember(); } }
public void LoadAssembly(ModuleDefMD manifestModule, string path, bool clear) { AnalysisHandler.Reset(); RefNode = null; CurrentModule = null; if (clear) CurrentTreeView.Nodes.Clear(); TreeNode file = NewFile(manifestModule, path); file.AddTo(CurrentTreeView); ModuleDefMD module = manifestModule; NameSpaceList.Clear(); TreeNode moduleNode = NewModule(module); moduleNode.AddTo(file); CurrentModule = moduleNode; if (module.Types.Any()) { foreach (TypeDef type in module.Types.OrderBy(t => t.Name.ToLower())) { new TypeHandler(this).HandleType(type, false); } } CurrentModule = moduleNode; if (module.GetAssemblyRefs().Any()) { new ReferenceHandler(this).HandleReferences(module.GetAssemblyRefs()); } var processor = new NodeDevirtualizer(RefNode, this); processor.ProcessNode(); processor.WorkerFinished += processor_WorkerFinished; RefNode = processor.Node; }
private void BrowseAndExpandMember() { object member = _searchPath.FirstOrDefault(); if (member == null) { CurrentTreeView.Focus(); _currentSearchNode.EnsureVisible(); CurrentTreeView.SelectedNode = _currentSearchNode; MainForm.HandleExpand = true; return; } if (member is TypeDef) { _currentSearchNode = _currentSearchNode.Nodes.Cast <TreeNode>().First(n => n.Text == NewType(member as TypeDef).Text); _currentSearchNode.Expand(); } else if (member is MethodDef) { var method = (MethodDef)member; TreeNode newNode = _currentSearchNode.Nodes.Cast <TreeNode>().FirstOrDefault(n => n.Text == NewMethod(method).Text); if (newNode != null) { _currentSearchNode = newNode; } else { foreach (TreeNode node in _currentSearchNode.Nodes.Cast <TreeNode>().Where(n => n.Tag is PropertyDef || n.Tag is EventDef)) { newNode = node.Nodes.Cast <TreeNode>().FirstOrDefault(n => n.Text == NewMethod(method).Text); if (newNode != null) { _currentSearchNode = newNode; break; } } if (newNode == null) { _searchPath.Clear(); BrowseAndExpandMember(); } } treeView_NodeMouseClick(this, new TreeNodeMouseClickEventArgs(_currentSearchNode, MouseButtons.Left, 1, _currentSearchNode.Bounds.X, _currentSearchNode.Bounds.Y)); DataGridViewHandler.SelectTab(); } else if (member is FieldDef) { _currentSearchNode = _currentSearchNode.Nodes.Cast <TreeNode>().First(n => n.Text == NewField(member as FieldDef).Text); treeView_NodeMouseClick(this, new TreeNodeMouseClickEventArgs(_currentSearchNode, MouseButtons.Left, 1, _currentSearchNode.Bounds.X, _currentSearchNode.Bounds.Y)); DataGridViewHandler.SelectTab(); } else if (member is PropertyDef) { _currentSearchNode = _currentSearchNode.Nodes.Cast <TreeNode>().First(n => n.Text == NewProperty(member as PropertyDef).Text); _currentSearchNode.Expand(); } else if (member is EventDef) { _currentSearchNode = _currentSearchNode.Nodes.Cast <TreeNode>().First(n => n.Text == NewEvent(member as EventDef).Text); _currentSearchNode.Expand(); } _searchPath.RemoveAt(0); if (_currentSearchNode.HasVirtualNode()) { var processor = new NodeDevirtualizer(_currentSearchNode, this); processor.WorkerFinished += searchProcessor_WorkerFinished; processor.ProcessNode(); VirtualNodeHandler.VirtualNodes--; _currentSearchNode.Nodes.Remove(_currentSearchNode.FindVirtualNode()); } else { BrowseAndExpandMember(); } }