예제 #1
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();
        }
예제 #2
0
        static void Execute(EditCodeVMCreator editCodeVMCreator, Lazy <IAddUpdatedNodesHelperProvider> addUpdatedNodesHelperProvider, Lazy <IUndoCommandService> undoCommandService, IAppService appService, DocumentTreeNodeData[] nodes)
        {
            if (!CanExecute(editCodeVMCreator, nodes))
            {
                return;
            }

            var modNode = GetModuleNode(nodes[0]);

            Debug2.Assert(modNode is not null);
            if (modNode is null)
            {
                return;
            }
            var module = modNode.Document.ModuleDef;

            Debug2.Assert(module is not null);
            if (module is null)
            {
                throw new InvalidOperationException();
            }

            AssemblyDocumentNode?asmNode;

            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       = $"{dnSpy_AsmEditor_Resources.EditCodeAddClass} - {asmNode?.ToString() ?? modNode.ToString()}";

            if (win.ShowDialog() != true)
            {
                vm.Dispose();
                return;
            }
            Debug2.Assert(vm.Result is not null);

            undoCommandService.Value.Add(new AddClassCommand(addUpdatedNodesHelperProvider, modNode, vm.Result));
            vm.Dispose();
        }
예제 #3
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();
		}