예제 #1
0
			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;
			}
예제 #2
0
 static bool CanExecute(EditCodeVMCreator editCodeVMCreator, IFileTreeNodeData[] nodes) =>
 editCodeVMCreator.CanCreate && nodes.Length == 1 && nodes[0] is IMethodNode;
예제 #3
0
		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();
		}
예제 #4
0
 EditClass2Command(Lazy <IUndoCommandService> undoCommandService, Lazy <IAddUpdatedNodesHelperProvider> addUpdatedNodesHelperProvider, IAppService appService, EditCodeVMCreator editCodeVMCreator)
 {
     this.undoCommandService            = undoCommandService;
     this.addUpdatedNodesHelperProvider = addUpdatedNodesHelperProvider;
     this.appService        = appService;
     this.editCodeVMCreator = editCodeVMCreator;
 }
예제 #5
0
 static bool CanExecute(EditCodeVMCreator editCodeVMCreator, DocumentTreeNodeData[] nodes) =>
 editCodeVMCreator.CanCreate(CompilationKind.EditClass) &&
 nodes.Length == 1 &&
 (nodes[0] as IMDTokenNode)?.Reference is IMemberDef;
예제 #6
0
 static bool CanExecute(EditCodeVMCreator editCodeVMCreator, DocumentTreeNodeData[] nodes) =>
 editCodeVMCreator.CanCreate(CompilationKind.AddClass) && nodes.Length == 1 && GetModuleNode(nodes[0]) is not null;
예제 #7
0
파일: Commands.cs 프로젝트: xisuo67/dnSpy
 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;
예제 #8
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;
 }
예제 #9
0
		static bool CanExecute(EditCodeVMCreator editCodeVMCreator, DocumentTreeNodeData[] nodes) =>
			editCodeVMCreator.CanCreate(CompilationKind.Assembly) && nodes.Length == 1 && (nodes[0] is AssemblyDocumentNode || nodes[0] is ModuleDocumentNode);
예제 #10
0
 static bool CanExecute(EditCodeVMCreator editCodeVMCreator, DocumentTreeNodeData[] nodes) =>
 editCodeVMCreator.CanCreate(CompilationKind.AddClass) && nodes.Length == 1;
예제 #11
0
		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;
		}
예제 #12
0
		internal static bool IsVisibleInternal(EditCodeVMCreator editCodeVMCreator, IMenuItemContext context) => IsVisible(editCodeVMCreator, BodyCommandUtils.GetStatements(context));
예제 #13
0
		EditClass2Command(Lazy<IUndoCommandService> undoCommandService, Lazy<IAddUpdatedNodesHelperProvider> addUpdatedNodesHelperProvider, IAppService appService, EditCodeVMCreator editCodeVMCreator) {
			this.undoCommandService = undoCommandService;
			this.addUpdatedNodesHelperProvider = addUpdatedNodesHelperProvider;
			this.appService = appService;
			this.editCodeVMCreator = editCodeVMCreator;
		}
예제 #14
0
		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();
		}
예제 #15
0
		static bool CanExecute(EditCodeVMCreator editCodeVMCreator, DocumentTreeNodeData[] nodes) =>
			editCodeVMCreator.CanCreate(CompilationKind.EditClass) &&
			nodes.Length == 1 &&
			(nodes[0] as IMDTokenNode)?.Reference is IMemberDef;
예제 #16
0
 EditBodyCommand(Lazy <IUndoCommandManager> undoCommandManager, Lazy <IMethodAnnotations> methodAnnotations, IAppWindow appWindow, EditCodeVMCreator editCodeVMCreator)
 {
     this.undoCommandManager = undoCommandManager;
     this.methodAnnotations  = methodAnnotations;
     this.appWindow          = appWindow;
     this.editCodeVMCreator  = editCodeVMCreator;
 }
예제 #17
0
 internal static bool IsVisibleInternal(EditCodeVMCreator editCodeVMCreator, IMenuItemContext context) => IsVisible(editCodeVMCreator, BodyCommandUtils.GetStatements(context));
예제 #18
0
		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();
		}
예제 #19
0
파일: Commands.cs 프로젝트: xisuo67/dnSpy
 static bool CanExecute(EditCodeVMCreator editCodeVMCreator, DocumentTreeNodeData[] nodes) =>
 editCodeVMCreator.CanCreate(CompilationKind.EditMethod) && nodes.Length == 1 && nodes[0] is MethodNode;
예제 #20
0
		static bool CanExecute(EditCodeVMCreator editCodeVMCreator, DocumentTreeNodeData[] nodes) =>
			editCodeVMCreator.CanCreate(CompilationKind.AddClass) && nodes.Length == 1;
예제 #21
0
 static bool CanExecute(EditCodeVMCreator editCodeVMCreator, DocumentTreeNodeData[] nodes) =>
 editCodeVMCreator.CanCreate(CompilationKind.EditAssembly) && nodes.Length == 1 && (nodes[0] is AssemblyDocumentNode || nodes[0] is ModuleDocumentNode);
예제 #22
0
 static bool IsVisible(EditCodeVMCreator editCodeVMCreator, IList <MethodSourceStatement>?list) =>
 editCodeVMCreator.CanCreate(CompilationKind.EditMethod) &&
 list is not null &&
예제 #23
0
 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;
 }
예제 #24
0
 DocumentsCommand(Lazy <IUndoCommandService> undoCommandService, Lazy <IMethodAnnotations> methodAnnotations, IAppService appService, EditCodeVMCreator editCodeVMCreator)
 {
     this.undoCommandService = undoCommandService;
     this.methodAnnotations  = methodAnnotations;
     this.appService         = appService;
     this.editCodeVMCreator  = editCodeVMCreator;
 }
예제 #25
0
        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();
        }
예제 #26
0
 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;
 }
예제 #27
0
 internal static bool IsVisibleInternal(EditCodeVMCreator editCodeVMCreator, IMenuItemContext context) => IsVisible(editCodeVMCreator, BodyCommandUtils.GetStatements(context, FindByTextPositionOptions.OuterMostStatement));
예제 #28
0
		static bool CanExecute(EditCodeVMCreator editCodeVMCreator, DocumentTreeNodeData[] nodes) =>
			editCodeVMCreator.CanCreate(CompilationKind.Method) && nodes.Length == 1 && nodes[0] is MethodNode;