From 1dd1335a4e839373ee50aae2b8b5c63b3b40dfd9 Mon Sep 17 00:00:00 2001 From: anna Date: Fri, 6 Apr 2012 14:57:58 +0200 Subject: [PATCH] inplace editing: undo should treat multiple start/finish labels inside one group correctly (IDEA-84143) --- .../openapi/command/impl/UndoableGroup.java | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) 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; } }