public void FollowNode(ITreeNodeData node, bool newTab, bool?useCodeRef) { var tokNode = node as IMDTokenNode; var @ref = tokNode?.Reference; var entityNode = node as EntityNode; var srcRef = entityNode?.SourceRef; bool code = useCodeRef ?? srcRef != null; if (code) { if (srcRef == null) { return; } fileTabManager.FollowReference(srcRef.Value.Method, newTab, true, a => { if (!a.HasMovedCaret && a.Success && srcRef != null) { a.HasMovedCaret = GoTo(a.Tab, srcRef.Value.Method, srcRef.Value.ILOffset, srcRef.Value.Reference); } }); } else { if (@ref == null) { return; } fileTabManager.FollowReference(@ref, newTab); } }
public static bool GoToIL(IFileTabManager fileTabManager, IDnSpyFile file, uint token, uint ilOffset, bool newTab) { if (file == null) return false; var method = file.ModuleDef.ResolveToken(token) as MethodDef; if (method == null) return false; var serMod = SerializedDnModuleCreator.Create(fileTabManager.FileTreeView, method.Module); var key = new SerializedDnToken(serMod, method.MDToken); bool found = fileTabManager.FileTreeView.FindNode(method.Module) != null; if (found) { fileTabManager.FollowReference(method, newTab, true, e => { Debug.Assert(e.Tab.UIContext is ITextEditorUIContext); if (e.Success && !e.HasMovedCaret) { MoveCaretTo(e.Tab.UIContext as ITextEditorUIContext, key, ilOffset); e.HasMovedCaret = true; } }); return true; } Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => { fileTabManager.FollowReference(method, newTab, true, e => { Debug.Assert(e.Tab.UIContext is ITextEditorUIContext); if (e.Success && !e.HasMovedCaret) { MoveCaretTo(e.Tab.UIContext as ITextEditorUIContext, key, ilOffset); e.HasMovedCaret = true; } }); })); return true; }
static void Execute(IFileTabManager fileTabManager, ResourceRef resRef) { if (resRef == null) return; var modNode = fileTabManager.FileTreeView.FindNode(resRef.Module); Debug.Assert(modNode != null); if (modNode == null) return; modNode.TreeNode.EnsureChildrenLoaded(); var resDirNode = modNode.TreeNode.DataChildren.FirstOrDefault(a => a is IResourcesFolderNode); Debug.Assert(resDirNode != null); if (resDirNode == null) return; resDirNode.TreeNode.EnsureChildrenLoaded(); var resSetNode = resDirNode.TreeNode.DataChildren.FirstOrDefault(a => a is IResourceElementSetNode && ((IResourceElementSetNode)a).Name == resRef.Filename); Debug.Assert(resSetNode != null); if (resSetNode == null) return; resSetNode.TreeNode.EnsureChildrenLoaded(); var resNode = resSetNode.TreeNode.DataChildren.FirstOrDefault(a => a is IResourceElementNode && ((IResourceElementNode)a).Name == resRef.ResourceName); Debug.Assert(resNode != null); if (resNode == null) return; fileTabManager.FollowReference(resNode); }
public override void Execute(IMenuItemContext context) { var ep = GetEntryPoint(fileTabManager, context); if (ep != null) { fileTabManager.FollowReference(ep); } }
public override void Execute(IMenuItemContext context) { var ep = GetModuleCctor(context); if (ep != null) { fileTabManager.FollowReference(ep); } }
static void ExecuteInternal(IFileTabManager fileTabManager, MDTableContext context) { var @ref = GetAddressReference(context); if (@ref != null) { fileTabManager.FollowReference(@ref); } }
public static bool GoToIL(IModuleIdProvider moduleIdProvider, IFileTabManager fileTabManager, IDnSpyFile file, uint token, uint ilOffset, bool newTab) { if (file == null) { return(false); } var method = file.ModuleDef.ResolveToken(token) as MethodDef; if (method == null) { return(false); } var modId = moduleIdProvider.Create(method.Module); var key = new ModuleTokenId(modId, method.MDToken); bool found = fileTabManager.FileTreeView.FindNode(method.Module) != null; if (found) { fileTabManager.FollowReference(method, newTab, true, e => { Debug.Assert(e.Tab.UIContext is IDocumentViewer); if (e.Success && !e.HasMovedCaret) { MoveCaretTo(e.Tab.UIContext as IDocumentViewer, key, ilOffset); e.HasMovedCaret = true; } }); return(true); } Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => { fileTabManager.FollowReference(method, newTab, true, e => { Debug.Assert(e.Tab.UIContext is IDocumentViewer); if (e.Success && !e.HasMovedCaret) { MoveCaretTo(e.Tab.UIContext as IDocumentViewer, key, ilOffset); e.HasMovedCaret = true; } }); })); return(true); }
public void OnNewArgs(IAppCommandLineArgs args) { if (!SelectMember(args)) { var mod = GetLoadedFiles(args).FirstOrDefault(); if (mod != null) { fileTabManager.FollowReference((object)mod.Assembly ?? mod); } else { foreach (var filename in args.Filenames) { var key = new FilenameKey(filename); var file = fileTabManager.FileTreeView.FileManager.GetFiles().FirstOrDefault(a => a.Key.Equals(key)); if (file != null) { fileTabManager.FollowReference(file); break; } } } } }
public void FollowResult(ISearchResult searchResult, bool newTab) { var @ref = searchResult == null ? null : searchResult.Reference; if (@ref != null) { fileTabManager.FollowReference(@ref, newTab, true, a => { if (!a.HasMovedCaret && a.Success) { var bodyResult = searchResult.ObjectInfo as BodyResult; if (bodyResult != null) { a.HasMovedCaret = GoTo(a.Tab, searchResult.Object as MethodDef, bodyResult.ILOffset); } } }); } }
static void Execute(IFileTabManager fileTabManager, ResourceRef resRef) { if (resRef == null) { return; } var modNode = fileTabManager.FileTreeView.FindNode(resRef.Module); Debug.Assert(modNode != null); if (modNode == null) { return; } modNode.TreeNode.EnsureChildrenLoaded(); var resDirNode = modNode.TreeNode.DataChildren.FirstOrDefault(a => a is IResourcesFolderNode); Debug.Assert(resDirNode != null); if (resDirNode == null) { return; } resDirNode.TreeNode.EnsureChildrenLoaded(); var resSetNode = resDirNode.TreeNode.DataChildren.FirstOrDefault(a => a is IResourceElementSetNode && ((IResourceElementSetNode)a).Name == resRef.Filename); Debug.Assert(resSetNode != null); if (resSetNode == null) { return; } resSetNode.TreeNode.EnsureChildrenLoaded(); var resNode = resSetNode.TreeNode.DataChildren.FirstOrDefault(a => a is IResourceElementNode && ((IResourceElementNode)a).Name == resRef.ResourceName); Debug.Assert(resNode != null); if (resNode == null) { return; } fileTabManager.FollowReference(resNode); }
internal static void GoToFile(IFileTabManager fileTabManager, IDnSpyFile file, bool newTab) { if (file == null) { return; } var obj = (object)file.ModuleDef ?? file; // The file could've been added lazily to the list so add a short delay before we select it Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => fileTabManager.FollowReference(obj, newTab))); }