From ce301ddbeca693569553ab14fcd5b3bb41872f2b Mon Sep 17 00:00:00 2001 From: hneemann Date: Sat, 19 Oct 2019 10:37:03 +0200 Subject: [PATCH] adds more details to the undo exception, see #364 --- .../de/neemann/digital/undo/UndoManager.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/main/java/de/neemann/digital/undo/UndoManager.java b/src/main/java/de/neemann/digital/undo/UndoManager.java index 30d15516c..4f08a77e7 100644 --- a/src/main/java/de/neemann/digital/undo/UndoManager.java +++ b/src/main/java/de/neemann/digital/undo/UndoManager.java @@ -66,7 +66,7 @@ public class UndoManager> { modificationCounter = modifications.size(); fireChangedEvent(); } catch (ModifyException e) { - throw createTrace(e); + throw createTrace(e, null); } } @@ -87,7 +87,7 @@ public class UndoManager> { modificationCounter++; fireChangedEvent(); } catch (ModifyException e) { - throw createTrace(e); + throw createTrace(e, null); } } } @@ -106,27 +106,34 @@ public class UndoManager> { */ public void undo() throws ModifyException { if (undoAvailable()) { + Modification lastWorkingModification = null; try { A newActual = initial.createDeepCopy(); - for (int i = 0; i < modificationCounter - 1; i++) - modifications.get(i).modify(newActual); + for (int i = 0; i < modificationCounter - 1; i++) { + Modification m = modifications.get(i); + m.modify(newActual); + lastWorkingModification = m; + } modificationCounter--; actual = newActual; fireChangedEvent(); } catch (ModifyException e) { - throw createTrace(e); + throw createTrace(e, lastWorkingModification); } } } - private ModifyException createTrace(ModifyException cause) { + private ModifyException createTrace(ModifyException cause, Modification lastWorkingModification) { StringBuilder sb = new StringBuilder("Exception during event processing"); for (int i = 0; i < modifications.size(); i++) { if (i == modificationCounter) sb.append("\n>"); else sb.append("\n "); - sb.append(modifications.get(i).toString()); + Modification m = modifications.get(i); + sb.append(m.toString()); + if (m == lastWorkingModification) + sb.append("\n -> exception in the following modification!"); } if (modificationCounter == modifications.size()) sb.append("\n>");