diff --git a/platform/platform-impl/src/com/intellij/openapi/command/impl/UndoableGroup.java b/platform/platform-impl/src/com/intellij/openapi/command/impl/UndoableGroup.java index 1aa9b6f5b917..b925661ed9ae 100644 --- a/platform/platform-impl/src/com/intellij/openapi/command/impl/UndoableGroup.java +++ b/platform/platform-impl/src/com/intellij/openapi/command/impl/UndoableGroup.java @@ -173,22 +173,31 @@ class UndoableGroup { } boolean isInsideStartFinishGroup(boolean isUndo, boolean isInsideStartFinishGroup) { - final FinishMarkAction finishMark = getFinishMark(); - final StartMarkAction startMark = getStartMark(); - if (startMark == null || finishMark == null) { + final List finishMarks = new ArrayList(); + final List startMarks = new ArrayList(); + for (UndoableAction action : myActions) { + if (action instanceof StartMarkAction) { + startMarks.add((StartMarkAction)action); + } else if (action instanceof FinishMarkAction) { + finishMarks.add((FinishMarkAction)action); + } + } + final int startNmb = startMarks.size(); + final int finishNmb = finishMarks.size(); + if (startNmb != finishNmb) { if (isUndo) { - if (finishMark != null) { + if (finishNmb > startNmb) { return true; } - else if (startMark != null) { + else { return false; } } else { - if (startMark != null) { + if (startNmb > finishNmb) { return true; } - else if (finishMark != null) { + else { return false; } }