private NuGenFoundItemEventArgs OnFoundItem(NuGenAssembly assembly, NuGenTokenBase tokenObject) { NuGenFoundItemEventArgs eventArgs = new NuGenFoundItemEventArgs(assembly, tokenObject); IAsyncResult asyncResult = CallbackForm.BeginInvoke(FoundItemCallback, this, eventArgs); asyncResult.AsyncWaitHandle.WaitOne(); return(eventArgs); }
private void LocateInProjectExplorerMenuItem_Click(object sender, EventArgs e) { if (foundItemsList.SelectedItems.Count == 1) { ListViewItem selectedItem = foundItemsList.SelectedItems[0]; NuGenTokenBase tokenObject = selectedItem.Tag as NuGenTokenBase; if (tokenObject != null) { //UIHandler.Instance.MainForm.ProjectExplorer.LocateTokenNode(tokenObject); } } }
private static TreeNode SearchTokenNode(TreeNode parentNode, NuGenTokenBase parentTokenObject, string subNodeText, string nodeText) { TreeNode result = SearchNodes(parentNode, parentTokenObject); if (subNodeText != null && result != null) { result.Expand(); result = FindNodeByName(result.Nodes, subNodeText); } if (result != null) { result.Expand(); result = FindNodeByName(result.Nodes, nodeText); } return(result); }
private void Search(object searchTextObject) { bool cancel = false; string searchText = (string)searchTextObject; if (NuGenProject.Instance.Assemblies != null) { List <NuGenAssembly> .Enumerator assemblyEnumerator = NuGenProject.Instance.Assemblies.GetEnumerator(); while (!cancel && assemblyEnumerator.MoveNext()) { Dictionary <uint, NuGenTokenBase> .ValueCollection.Enumerator tokenEnumerator = assemblyEnumerator.Current.AllTokens.Values.GetEnumerator(); if (((assemblyEnumerator.Current.SearchOptions & SearchOptions.Assembly) == SearchOptions.Assembly && assemblyEnumerator.Current.Name != null && assemblyEnumerator.Current.Name.Contains(searchText)) || (assemblyEnumerator.Current.SearchOptions & SearchOptions.TokenValues) == SearchOptions.TokenValues && assemblyEnumerator.Current.Token.ToString("x").Contains(searchText)) { NuGenFoundItemEventArgs eventArgs = OnFoundItem(assemblyEnumerator.Current, assemblyEnumerator.Current); cancel = eventArgs.Cancel; } while (!cancel && tokenEnumerator.MoveNext()) { NuGenTokenBase tokenObject = tokenEnumerator.Current; SearchOptions searchOptions = assemblyEnumerator.Current.SearchOptions; if ((tokenObject.ItemType != SearchOptions.None && (searchOptions & tokenObject.ItemType) == tokenObject.ItemType && ((searchText.Length == 0 || (tokenObject.Name != null && tokenObject.Name.Contains(searchText))))) || ((searchOptions & SearchOptions.TokenValues) == SearchOptions.TokenValues && tokenObject.Token.ToString("x").Contains(searchText) && tokenObject.ItemType != SearchOptions.None)) { NuGenFoundItemEventArgs eventArgs = OnFoundItem(assemblyEnumerator.Current, tokenObject); cancel = eventArgs.Cancel; } } } } }
public NuGenFoundItemEventArgs(NuGenAssembly assembly, NuGenTokenBase foundTokenObject) { Assembly = assembly; FoundTokenObject = foundTokenObject; }
private static TreeNode SearchNodes(TreeNode parentNode, NuGenTokenBase tokenObject) { TreeNode result = null; if (parentNode != null) { switch (tokenObject.ItemType) { case SearchOptions.Assembly: NuGenAssembly assembly = (NuGenAssembly)tokenObject; parentNode.Expand(); result = FindNodeByName(parentNode.Nodes, assembly.FileName); break; case SearchOptions.AssemblyReference: NuGenAssemblyReference assemblyReference = (NuGenAssemblyReference)tokenObject; result = SearchTokenNode(parentNode, assemblyReference.Assembly, " References", assemblyReference.Name); break; case SearchOptions.FieldDefintion: NuGenFieldDefinition fieldDefinition = (NuGenFieldDefinition)tokenObject; result = SearchTokenNode(parentNode, fieldDefinition.BaseTypeDefinition, "Fields", fieldDefinition.Name); break; case SearchOptions.File: NuGenFile file = (NuGenFile)tokenObject; result = SearchTokenNode(parentNode, file.Assembly, " Files", file.Name); break; case SearchOptions.ManifestResource: NuGenManifestResource manifestResource = (NuGenManifestResource)tokenObject; result = SearchTokenNode(parentNode, manifestResource.Assembly, " Manifest Resources", manifestResource.Name); break; case SearchOptions.MethodDefinition: NuGenMethodDefinition methodDefinition = (NuGenMethodDefinition)tokenObject; if (methodDefinition.OwnerProperty == null) { result = SearchTokenNode(parentNode, methodDefinition.BaseTypeDefinition, "Methods", methodDefinition.DisplayName); } else { result = SearchNodes(parentNode, methodDefinition.OwnerProperty); result.Expand(); result = FindNodeByName(result.Nodes, methodDefinition.DisplayName); } break; case SearchOptions.ModuleReference: NuGenModuleReference moduleReference = (NuGenModuleReference)tokenObject; result = SearchTokenNode(parentNode, moduleReference.Assembly, " Module References", moduleReference.Name); break; case SearchOptions.ModuleScope: NuGenModuleScope moduleScope = (NuGenModuleScope)tokenObject; result = SearchTokenNode(parentNode, moduleScope.Assembly, null, moduleScope.Name); break; case SearchOptions.Property: NuGenProperty property = (NuGenProperty)tokenObject; result = SearchTokenNode(parentNode, property.BaseTypeDefinition, "Properties", property.Name); break; case SearchOptions.TypeDefinition: NuGenTypeDefinition typeDefinition = (NuGenTypeDefinition)tokenObject; string typeNamespace = typeDefinition.Namespace; if (typeNamespace.Length == 0) { typeNamespace = NuGenConstants.DefaultNamespaceName; } result = SearchTokenNode(parentNode, typeDefinition.ModuleScope, typeNamespace, typeDefinition.FullName); break; } } return(result); }
public static TreeNode LocateNode(TreeNode startingNode, NuGenTokenBase tokenObject) { return(SearchNodes(startingNode, tokenObject)); }
public void DisplayCallStack(List <FrameWrapper> callStack) { if (callStack != null) { callStackView.BeginUpdate(); callStackView.Items.Clear(); for (int index = 0; index < callStack.Count; index++) { FrameWrapper frame = callStack[index]; ListViewItem item = new ListViewItem(); bool isCodeAvailable = false; FunctionWrapper function = null; try { function = frame.GetFunction(); isCodeAvailable = true; } catch (COMException comException) { //0x80131309 == CORDBG_E_CODE_NOT_AVAILABLE if ((uint)comException.ErrorCode == 0x80131309) { isCodeAvailable = false; } else { throw; } } if (isCodeAvailable) { ModuleWrapper module = function.GetModule(); uint functionToken = function.GetToken(); NuGenTokenBase tokenObject = NuGenHelperFunctions.FindObjectByToken(functionToken, module); NuGenMethodDefinition methodDefinition = tokenObject as NuGenMethodDefinition; if (methodDefinition != null) { bool activeFrame = (index == 0); NuGenFrameInformation frameInformation = new NuGenFrameInformation(NuGenDebugEventHandler.Instance.EventObjects.Thread, methodDefinition, activeFrame, frame); item.Tag = frameInformation; item.Text = string.Format("{0}::{1}", methodDefinition.BaseTypeDefinition.FullName, methodDefinition.DisplayName); if (!frameInformation.IsExactLocation) { item.Text += " - not exact offset"; } } else { string moduleName = module.GetName(); if (module.IsInMemory()) { item.Tag = new NuGenMissingModule(module); } else { item.Tag = new NuGenMissingModule(moduleName); } item.Text = "Unknown method (perhaps a reference is not loaded). Module name: " + moduleName; } } if (!frame.IsILFrame()) { if (isCodeAvailable) { item.Text = "Native frame, IP offset is not available (" + item.Text + ")"; } else { item.Text = "Native frame, IP offset is not available (code is unavailable)."; } } item.ToolTipText = item.Text; callStackView.Items.Add(item); } callStackView.EndUpdate(); } }
public void LocateTokenNode(NuGenTokenBase tokenObject) { ProjectElements.SelectedNode = NuGenTreeViewSearcher.LocateNode(ProjectElements.Nodes[0], tokenObject); }