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>");