CodeCommand(Lazy<IUndoCommandService> undoCommandService, Lazy<IAddUpdatedNodesHelperProvider> addUpdatedNodesHelperProvider, IAppService appService, EditCodeVMCreator editCodeVMCreator) : base(appService.DocumentTreeView) { this.undoCommandService = undoCommandService; this.addUpdatedNodesHelperProvider = addUpdatedNodesHelperProvider; this.appService = appService; this.editCodeVMCreator = editCodeVMCreator; }
static bool CanExecute(EditCodeVMCreator editCodeVMCreator, IFileTreeNodeData[] nodes) => editCodeVMCreator.CanCreate && nodes.Length == 1 && nodes[0] is IMethodNode;
internal static void Execute(EditCodeVMCreator editCodeVMCreator, Lazy<IAddUpdatedNodesHelperProvider> addUpdatedNodesHelperProvider, Lazy<IUndoCommandService> undoCommandService, IAppService appService, DocumentTreeNodeData[] nodes, IList<MethodSourceStatement> statements = null) { if (!CanExecute(editCodeVMCreator, nodes)) return; var methodNode = (MethodNode)nodes[0]; var modNode = methodNode.GetModuleNode(); Debug.Assert(modNode != null); if (modNode == null) throw new InvalidOperationException(); var module = modNode.Document.ModuleDef; Debug.Assert(module != null); if (module == null) throw new InvalidOperationException(); var vm = editCodeVMCreator.CreateEditMethodCode(methodNode.MethodDef, statements ?? Array.Empty<MethodSourceStatement>()); var win = new EditCodeDlg(); win.DataContext = vm; win.Owner = appService.MainWindow; win.Title = string.Format("{0} - {1}", win.Title, methodNode.ToString()); if (win.ShowDialog() != true) { vm.Dispose(); return; } Debug.Assert(vm.Result != null); undoCommandService.Value.Add(new EditMethodBodyCodeCommand(addUpdatedNodesHelperProvider, modNode, vm.Result)); vm.Dispose(); }
EditClass2Command(Lazy <IUndoCommandService> undoCommandService, Lazy <IAddUpdatedNodesHelperProvider> addUpdatedNodesHelperProvider, IAppService appService, EditCodeVMCreator editCodeVMCreator) { this.undoCommandService = undoCommandService; this.addUpdatedNodesHelperProvider = addUpdatedNodesHelperProvider; this.appService = appService; this.editCodeVMCreator = editCodeVMCreator; }
static bool CanExecute(EditCodeVMCreator editCodeVMCreator, DocumentTreeNodeData[] nodes) => editCodeVMCreator.CanCreate(CompilationKind.EditClass) && nodes.Length == 1 && (nodes[0] as IMDTokenNode)?.Reference is IMemberDef;
static bool CanExecute(EditCodeVMCreator editCodeVMCreator, DocumentTreeNodeData[] nodes) => editCodeVMCreator.CanCreate(CompilationKind.AddClass) && nodes.Length == 1 && GetModuleNode(nodes[0]) is not null;
static bool IsVisible(EditCodeVMCreator editCodeVMCreator, IList <MethodSourceStatement>?list) => editCodeVMCreator.CanCreate(CompilationKind.EditMethod) && !(list is null) && list.Count != 0 && !(list[0].Method.Body is null) && list[0].Method.Body.Instructions.Count > 0;
EditMenuCommand(Lazy <IUndoCommandManager> undoCommandManager, Lazy <IMethodAnnotations> methodAnnotations, IAppWindow appWindow, EditCodeVMCreator editCodeVMCreator) : base(appWindow.FileTreeView) { this.undoCommandManager = undoCommandManager; this.methodAnnotations = methodAnnotations; this.appWindow = appWindow; this.editCodeVMCreator = editCodeVMCreator; }
static bool CanExecute(EditCodeVMCreator editCodeVMCreator, DocumentTreeNodeData[] nodes) => editCodeVMCreator.CanCreate(CompilationKind.Assembly) && nodes.Length == 1 && (nodes[0] is AssemblyDocumentNode || nodes[0] is ModuleDocumentNode);
static bool CanExecute(EditCodeVMCreator editCodeVMCreator, DocumentTreeNodeData[] nodes) => editCodeVMCreator.CanCreate(CompilationKind.AddClass) && nodes.Length == 1;
static bool IsVisible(EditCodeVMCreator editCodeVMCreator, IList<MethodSourceStatement> list) { return editCodeVMCreator.CanCreate(CompilationKind.EditClass) && list != null && list.Count != 0 && list[0].Method.Body != null && list[0].Method.Body.Instructions.Count > 0; }
internal static bool IsVisibleInternal(EditCodeVMCreator editCodeVMCreator, IMenuItemContext context) => IsVisible(editCodeVMCreator, BodyCommandUtils.GetStatements(context));
EditClass2Command(Lazy<IUndoCommandService> undoCommandService, Lazy<IAddUpdatedNodesHelperProvider> addUpdatedNodesHelperProvider, IAppService appService, EditCodeVMCreator editCodeVMCreator) { this.undoCommandService = undoCommandService; this.addUpdatedNodesHelperProvider = addUpdatedNodesHelperProvider; this.appService = appService; this.editCodeVMCreator = editCodeVMCreator; }
internal static void Execute(EditCodeVMCreator editCodeVMCreator, Lazy<IAddUpdatedNodesHelperProvider> addUpdatedNodesHelperProvider, Lazy<IUndoCommandService> undoCommandService, IAppService appService, DocumentTreeNodeData[] nodes, IList<MethodSourceStatement> statements = null) { if (!CanExecute(editCodeVMCreator, nodes)) return; var node = nodes[0]; var tokNode = node as IMDTokenNode; var defToEdit = tokNode?.Reference as IMemberDef; if (defToEdit == null) return; TypeNode typeNode = null; for (TreeNodeData n = node; n != null;) { var t = n as TypeNode; if (t != null) typeNode = t; n = n.TreeNode.Parent?.Data; } if (typeNode == null) return; var asmNode = nodes[0] as AssemblyDocumentNode; ModuleDocumentNode modNode; if (asmNode != null) { asmNode.TreeNode.EnsureChildrenLoaded(); modNode = asmNode.TreeNode.DataChildren.FirstOrDefault() as ModuleDocumentNode; } else modNode = nodes[0].GetModuleNode(); Debug.Assert(modNode != null); if (modNode == null) return; var vm = editCodeVMCreator.CreateEditClass(defToEdit, statements ?? Array.Empty<MethodSourceStatement>()); var win = new EditCodeDlg(); win.DataContext = vm; win.Owner = appService.MainWindow; win.Title = string.Format("{0} - {1}", dnSpy_AsmEditor_Resources.EditCodeEditClass, typeNode.ToString()); if (win.ShowDialog() != true) { vm.Dispose(); return; } Debug.Assert(vm.Result != null); undoCommandService.Value.Add(new EditClassCommand(addUpdatedNodesHelperProvider, modNode, vm.Result)); vm.Dispose(); }
EditBodyCommand(Lazy <IUndoCommandManager> undoCommandManager, Lazy <IMethodAnnotations> methodAnnotations, IAppWindow appWindow, EditCodeVMCreator editCodeVMCreator) { this.undoCommandManager = undoCommandManager; this.methodAnnotations = methodAnnotations; this.appWindow = appWindow; this.editCodeVMCreator = editCodeVMCreator; }
static void Execute(EditCodeVMCreator editCodeVMCreator, Lazy<IAddUpdatedNodesHelperProvider> addUpdatedNodesHelperProvider, Lazy<IUndoCommandService> undoCommandService, IAppService appService, DocumentTreeNodeData[] nodes) { if (!CanExecute(editCodeVMCreator, nodes)) return; var asmNode = nodes[0] as AssemblyDocumentNode; ModuleDocumentNode modNode; if (asmNode != null) { asmNode.TreeNode.EnsureChildrenLoaded(); modNode = asmNode.TreeNode.DataChildren.FirstOrDefault() as ModuleDocumentNode; } else modNode = nodes[0].GetModuleNode(); Debug.Assert(modNode != null); if (modNode == null) return; var module = modNode.Document.ModuleDef; Debug.Assert(module != null); if (module == null) throw new InvalidOperationException(); if (module.IsManifestModule) asmNode = modNode.TreeNode.Parent?.Data as AssemblyDocumentNode; else asmNode = null; var vm = editCodeVMCreator.CreateAddClass(module); var win = new EditCodeDlg(); win.DataContext = vm; win.Owner = appService.MainWindow; win.Title = string.Format("{0} - {1}", dnSpy_AsmEditor_Resources.EditCodeAddClass, asmNode?.ToString() ?? modNode.ToString()); if (win.ShowDialog() != true) { vm.Dispose(); return; } Debug.Assert(vm.Result != null); undoCommandService.Value.Add(new AddClassCommand(addUpdatedNodesHelperProvider, modNode, vm.Result)); vm.Dispose(); }
static bool CanExecute(EditCodeVMCreator editCodeVMCreator, DocumentTreeNodeData[] nodes) => editCodeVMCreator.CanCreate(CompilationKind.EditMethod) && nodes.Length == 1 && nodes[0] is MethodNode;
static bool CanExecute(EditCodeVMCreator editCodeVMCreator, DocumentTreeNodeData[] nodes) => editCodeVMCreator.CanCreate(CompilationKind.EditAssembly) && nodes.Length == 1 && (nodes[0] is AssemblyDocumentNode || nodes[0] is ModuleDocumentNode);
static bool IsVisible(EditCodeVMCreator editCodeVMCreator, IList <MethodSourceStatement>?list) => editCodeVMCreator.CanCreate(CompilationKind.EditMethod) && list is not null &&
CodeCommand(Lazy <IUndoCommandService> undoCommandService, Lazy <IAddUpdatedNodesHelperProvider> addUpdatedNodesHelperProvider, IAppService appService, EditCodeVMCreator editCodeVMCreator) : base(appService.DocumentTreeView) { this.undoCommandService = undoCommandService; this.addUpdatedNodesHelperProvider = addUpdatedNodesHelperProvider; this.appService = appService; this.editCodeVMCreator = editCodeVMCreator; }
DocumentsCommand(Lazy <IUndoCommandService> undoCommandService, Lazy <IMethodAnnotations> methodAnnotations, IAppService appService, EditCodeVMCreator editCodeVMCreator) { this.undoCommandService = undoCommandService; this.methodAnnotations = methodAnnotations; this.appService = appService; this.editCodeVMCreator = editCodeVMCreator; }
internal static void Execute(EditCodeVMCreator editCodeVMCreator, Lazy <IAddUpdatedNodesHelperProvider> addUpdatedNodesHelperProvider, Lazy <IUndoCommandService> undoCommandService, IAppService appService, DocumentTreeNodeData[] nodes, IList <MethodSourceStatement> statements = null) { if (!CanExecute(editCodeVMCreator, nodes)) { return; } var node = nodes[0]; var tokNode = node as IMDTokenNode; var defToEdit = tokNode?.Reference as IMemberDef; if (defToEdit == null) { return; } TypeNode typeNode = null; for (TreeNodeData n = node; n != null;) { if (n is TypeNode t) { typeNode = t; } n = n.TreeNode.Parent?.Data; } if (typeNode == null) { return; } var asmNode = nodes[0] as AssemblyDocumentNode; ModuleDocumentNode modNode; if (asmNode != null) { asmNode.TreeNode.EnsureChildrenLoaded(); modNode = asmNode.TreeNode.DataChildren.FirstOrDefault() as ModuleDocumentNode; } else { modNode = nodes[0].GetModuleNode(); } Debug.Assert(modNode != null); if (modNode == null) { return; } var vm = editCodeVMCreator.CreateEditClass(defToEdit, statements ?? Array.Empty <MethodSourceStatement>()); var win = new EditCodeDlg(); win.DataContext = vm; win.Owner = appService.MainWindow; win.Title = $"{dnSpy_AsmEditor_Resources.EditCodeEditClass} - {typeNode.ToString()}"; if (win.ShowDialog() != true) { vm.Dispose(); return; } Debug.Assert(vm.Result != null); undoCommandService.Value.Add(new EditClassCommand(addUpdatedNodesHelperProvider, modNode, vm.Result)); vm.Dispose(); }
EditMenuCommand(Lazy <IUndoCommandService> undoCommandService, Lazy <IMethodAnnotations> methodAnnotations, IAppService appService, EditCodeVMCreator editCodeVMCreator) : base(appService.DocumentTreeView) { this.undoCommandService = undoCommandService; this.methodAnnotations = methodAnnotations; this.appService = appService; this.editCodeVMCreator = editCodeVMCreator; }
internal static bool IsVisibleInternal(EditCodeVMCreator editCodeVMCreator, IMenuItemContext context) => IsVisible(editCodeVMCreator, BodyCommandUtils.GetStatements(context, FindByTextPositionOptions.OuterMostStatement));
static bool CanExecute(EditCodeVMCreator editCodeVMCreator, DocumentTreeNodeData[] nodes) => editCodeVMCreator.CanCreate(CompilationKind.Method) && nodes.Length == 1 && nodes[0] is MethodNode;