diff --git a/platform/core-impl/src/com/intellij/openapi/application/TransactionGuardImpl.java b/platform/core-impl/src/com/intellij/openapi/application/TransactionGuardImpl.java index 6cb6f597bffd..884a66ad51d6 100644 --- a/platform/core-impl/src/com/intellij/openapi/application/TransactionGuardImpl.java +++ b/platform/core-impl/src/com/intellij/openapi/application/TransactionGuardImpl.java @@ -146,7 +146,7 @@ public class TransactionGuardImpl extends TransactionGuard { if (!canRunTransactionNow(transaction, true)) { LOG.error("Cannot run synchronous submitTransactionAndWait from invokeLater. " + "Please use asynchronous submit*Transaction. " + - "See TransactionGuard FAQ for details."); + "See TransactionGuard FAQ for details. Transaction: " + runnable); } runSyncTransaction(transaction); return; diff --git a/platform/editor-ui-api/src/com/intellij/openapi/actionSystem/AnAction.java b/platform/editor-ui-api/src/com/intellij/openapi/actionSystem/AnAction.java index b0d172d82fa9..7af6ed05b513 100644 --- a/platform/editor-ui-api/src/com/intellij/openapi/actionSystem/AnAction.java +++ b/platform/editor-ui-api/src/com/intellij/openapi/actionSystem/AnAction.java @@ -319,6 +319,10 @@ public abstract class AnAction implements PossiblyDumbAware { return this instanceof DumbAware; } + public boolean startInTransaction() { + return true; + } + public interface TransparentUpdate { } diff --git a/platform/platform-api/src/com/intellij/openapi/actionSystem/ex/ActionUtil.java b/platform/platform-api/src/com/intellij/openapi/actionSystem/ex/ActionUtil.java index adf416078311..d4bae6056d62 100644 --- a/platform/platform-api/src/com/intellij/openapi/actionSystem/ex/ActionUtil.java +++ b/platform/platform-api/src/com/intellij/openapi/actionSystem/ex/ActionUtil.java @@ -190,14 +190,28 @@ public class ActionUtil { } public static void performActionDumbAware(AnAction action, AnActionEvent e) { - TransactionGuard.getInstance().submitTransactionAndWait(() -> { - try { - action.actionPerformed(e); + Runnable runnable = new Runnable() { + @Override + public void run() { + try { + action.actionPerformed(e); + } + catch (IndexNotReadyException e1) { + showDumbModeWarning(e); + } } - catch (IndexNotReadyException e1) { - showDumbModeWarning(e); + + @Override + public String toString() { + return action + " of " + action.getClass(); } - }); + }; + + if (action.startInTransaction()) { + TransactionGuard.getInstance().submitTransactionAndWait(runnable); + } else { + runnable.run(); + } } @NotNull diff --git a/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/EditorAction.java b/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/EditorAction.java index a6a92aa498af..c3d1fa5db9ca 100644 --- a/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/EditorAction.java +++ b/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/EditorAction.java @@ -44,6 +44,11 @@ public abstract class EditorAction extends AnAction implements DumbAware { setEnabledInModalContext(true); } + @Override + public boolean startInTransaction() { + return false; + } + public final EditorActionHandler setupHandler(@NotNull EditorActionHandler newHandler) { ensureHandlersLoaded(); EditorActionHandler tmp = myHandler;