From 1b0fe6e744ffa0b975c67fdf28a2dd9ae98d15da Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 13 Dec 2016 17:01:08 +0100 Subject: [PATCH] disallow model changes during undo confirmation dialog (EA-92445 - ISE: DocumentUndoProvider$MyEditorDocumentListener.beforeDocumentChange) --- .../intellij/openapi/command/impl/UndoRedo.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/command/impl/UndoRedo.java b/platform/platform-impl/src/com/intellij/openapi/command/impl/UndoRedo.java index 37363ee907b1..0fb1b2db0a08 100644 --- a/platform/platform-impl/src/com/intellij/openapi/command/impl/UndoRedo.java +++ b/platform/platform-impl/src/com/intellij/openapi/command/impl/UndoRedo.java @@ -17,6 +17,7 @@ package com.intellij.openapi.command.impl; import com.intellij.CommonBundle; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.TransactionGuard; import com.intellij.openapi.command.undo.DocumentReference; import com.intellij.openapi.command.undo.UndoableAction; import com.intellij.openapi.editor.Document; @@ -194,14 +195,18 @@ abstract class UndoRedo { } private boolean askUser() { - String actionText = getActionName(myUndoableGroup.getCommandName()); + final boolean[] isOk = new boolean[1]; + TransactionGuard.getInstance().submitTransactionAndWait(() -> { + String actionText = getActionName(myUndoableGroup.getCommandName()); - if (actionText.length() > 80) { - actionText = actionText.substring(0, 80) + "... "; - } + if (actionText.length() > 80) { + actionText = actionText.substring(0, 80) + "... "; + } - return Messages.showOkCancelDialog(myManager.getProject(), actionText + "?", getActionName(), - Messages.getQuestionIcon()) == Messages.OK; + isOk[0] = Messages.showOkCancelDialog(myManager.getProject(), actionText + "?", getActionName(), + Messages.getQuestionIcon()) == Messages.OK; + }); + return isOk[0]; } private boolean restore(EditorAndState pair) {