From 5f77cfc57b5a574201a1578f1aed602362f8a027 Mon Sep 17 00:00:00 2001 From: reddyashish <43763136+reddyashish@users.noreply.github.com> Date: Thu, 6 Feb 2025 13:35:46 -0800 Subject: [PATCH] [DYN-7942] Catch exception during undo operation. (#15812) --- src/DynamoCore/Core/UndoRedoRecorder.cs | 15 ++++++++++++--- test/DynamoCoreTests/UndoRedoRecorderTests.cs | 4 ++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/DynamoCore/Core/UndoRedoRecorder.cs b/src/DynamoCore/Core/UndoRedoRecorder.cs index d5606fb03de..a15673ed514 100644 --- a/src/DynamoCore/Core/UndoRedoRecorder.cs +++ b/src/DynamoCore/Core/UndoRedoRecorder.cs @@ -6,6 +6,7 @@ using Dynamo.Graph.Connectors; using Dynamo.Graph.Nodes; using Dynamo.Graph.Workspaces; +using Dynamo.Logging; namespace Dynamo.Core { @@ -56,7 +57,7 @@ internal interface IUndoRedoRecorderClient ModelBase GetModelForElement(XmlElement modelData); } - internal class UndoRedoRecorder + internal class UndoRedoRecorder : LogSourceBase { #region Private Class Data Members @@ -241,7 +242,15 @@ public XmlElement PopFromUndoGroup() "UndoStack cannot be popped with non-empty RedoStack"); } - return PopActionGroupFromUndoStack(); + try + { + return PopActionGroupFromUndoStack(); + } + catch (InvalidOperationException ex) + { + Log(ex); + return null; + } } #endregion @@ -310,7 +319,7 @@ private void SetNodeAction(XmlNode childNode, string action) childNode.Attributes.Append(actionAttribute); } - private XmlElement PopActionGroupFromUndoStack() + internal XmlElement PopActionGroupFromUndoStack() { if (CanUndo == false) { diff --git a/test/DynamoCoreTests/UndoRedoRecorderTests.cs b/test/DynamoCoreTests/UndoRedoRecorderTests.cs index 0c0fcb05c9d..06a3742cea1 100644 --- a/test/DynamoCoreTests/UndoRedoRecorderTests.cs +++ b/test/DynamoCoreTests/UndoRedoRecorderTests.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Xml; @@ -565,7 +565,7 @@ public void TestClearingStacks01() public void TestPopFromUndoGroup() { //Assert that it cannot pop from an empty undostack - Assert.Throws(() => { recorder.PopFromUndoGroup(); }); + Assert.Throws(() => { recorder.PopActionGroupFromUndoStack(); }); //Add models workspace.AddModel(new DummyModel(1, 10));