diff --git a/platform/platform-impl/src/com/intellij/openapi/command/impl/MockEditorChangeAction.java b/platform/platform-impl/src/com/intellij/openapi/command/impl/MockEditorChangeAction.java index ab2a7d9b3ee2..32dbde6f8667 100644 --- a/platform/platform-impl/src/com/intellij/openapi/command/impl/MockEditorChangeAction.java +++ b/platform/platform-impl/src/com/intellij/openapi/command/impl/MockEditorChangeAction.java @@ -2,14 +2,19 @@ package com.intellij.openapi.command.impl; +import com.intellij.openapi.command.undo.AdjustableUndoableAction; import com.intellij.openapi.command.undo.BasicUndoableAction; import com.intellij.openapi.command.undo.DocumentReference; +import com.intellij.openapi.command.undo.MutableActionChangeRange; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; +import java.util.Collections; +import java.util.List; + @ApiStatus.Experimental -final class MockEditorChangeAction extends BasicUndoableAction { +final class MockEditorChangeAction extends BasicUndoableAction implements AdjustableUndoableAction { MockEditorChangeAction(@NotNull DocumentReference docRef) { super(docRef); @@ -22,4 +27,9 @@ final class MockEditorChangeAction extends BasicUndoableAction { @Override public void redo() { } + + @Override + public @NotNull List getChangeRanges(@NotNull DocumentReference reference) { + return Collections.emptyList(); + } } diff --git a/platform/platform-impl/src/com/intellij/openapi/command/impl/SharedUndoRedoStacksHolder.java b/platform/platform-impl/src/com/intellij/openapi/command/impl/SharedUndoRedoStacksHolder.java index 3676bc1afdf1..8a91e6e29516 100644 --- a/platform/platform-impl/src/com/intellij/openapi/command/impl/SharedUndoRedoStacksHolder.java +++ b/platform/platform-impl/src/com/intellij/openapi/command/impl/SharedUndoRedoStacksHolder.java @@ -11,10 +11,12 @@ import java.util.*; @ApiStatus.Internal final class SharedUndoRedoStacksHolder extends UndoRedoStacksHolderBase { private final SharedAdjustableUndoableActionsHolder myAdjustableUndoableActionsHolder; + private final boolean myIsPerClientSupported; - SharedUndoRedoStacksHolder(boolean isUndo, SharedAdjustableUndoableActionsHolder undoableActionsHolder) { + SharedUndoRedoStacksHolder(SharedAdjustableUndoableActionsHolder undoableActionsHolder, boolean isPerClientSupported, boolean isUndo) { super(isUndo); myAdjustableUndoableActionsHolder = undoableActionsHolder; + myIsPerClientSupported = isPerClientSupported; } void addToStack(@NotNull DocumentReference reference, @NotNull ImmutableActionChangeRange changeRange) { @@ -58,6 +60,9 @@ final class SharedUndoRedoStacksHolder extends UndoRedoStacksHolderBase rangesToMove) { + if (!myIsPerClientSupported) { + return MovementAvailability.ALREADY_MOVED; + } UndoRedoList stack = getStack(reference); ImmutableActionChangeRange[] affected = getAffectedRanges(stack, rangesToMove); if (affected == null) { diff --git a/platform/platform-impl/src/com/intellij/openapi/command/impl/UndoManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/command/impl/UndoManagerImpl.java index 481582e2a7cb..0d25e950f561 100644 --- a/platform/platform-impl/src/com/intellij/openapi/command/impl/UndoManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/command/impl/UndoManagerImpl.java @@ -81,8 +81,8 @@ public class UndoManagerImpl extends UndoManager { protected UndoManagerImpl(@Nullable ComponentManager componentManager) { myProject = componentManager instanceof Project project ? project : null; myAdjustableUndoableActionsHolder = new SharedAdjustableUndoableActionsHolder(); - mySharedUndoStacksHolder = new SharedUndoRedoStacksHolder(true, myAdjustableUndoableActionsHolder); - mySharedRedoStacksHolder = new SharedUndoRedoStacksHolder(false, myAdjustableUndoableActionsHolder); + mySharedUndoStacksHolder = new SharedUndoRedoStacksHolder(myAdjustableUndoableActionsHolder, isPerClientSupported(), true); + mySharedRedoStacksHolder = new SharedUndoRedoStacksHolder(myAdjustableUndoableActionsHolder, isPerClientSupported(), false); } @Override @@ -335,6 +335,11 @@ public class UndoManagerImpl extends UndoManager { return true; } + @ApiStatus.Internal + protected boolean isPerClientSupported() { + return true; + } + @ApiStatus.Internal protected final int getStackSize(@Nullable DocumentReference docRef, boolean isUndo) { UndoClientState state = Objects.requireNonNull(getClientState(), "undo/redo is not available");