diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java index 4967228a9617..994a029e4f13 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java @@ -30,7 +30,10 @@ import com.intellij.injected.editor.DocumentWindow; import com.intellij.lang.Language; import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.openapi.actionSystem.DataContext; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.TransactionGuard; +import com.intellij.openapi.application.TransactionKind; import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.*; @@ -176,7 +179,9 @@ public class CodeCompletionHandlerBase { } }; if (autopopup) { - CommandProcessor.getInstance().runUndoTransparentAction(initCmd); + try (AccessToken ignored = TransactionGuard.getInstance().startSynchronousTransaction(TransactionKind.TEXT_EDITING)) { + CommandProcessor.getInstance().runUndoTransparentAction(initCmd); + } CompletionAssertions.checkEditorValid(editor); if (!restarted && shouldSkipAutoPopup(editor, initializationContext[0].getFile())) { CompletionServiceImpl.setCompletionPhase(CompletionPhase.NoCompletion); @@ -626,20 +631,18 @@ public class CodeCompletionHandlerBase { private static void afterItemInsertion(final CompletionProgressIndicator indicator, final Runnable laterRunnable) { if (laterRunnable != null) { - final Runnable runnable1 = new Runnable() { - @Override - public void run() { - if (!indicator.getProject().isDisposed()) { - laterRunnable.run(); - } - indicator.disposeIndicator(); + final Runnable runnable1 = () -> { + if (!indicator.getProject().isDisposed()) { + laterRunnable.run(); } + indicator.disposeIndicator(); }; if (ApplicationManager.getApplication().isUnitTestMode()) { runnable1.run(); } else { - ApplicationManager.getApplication().invokeLater(runnable1); + ApplicationManager.getApplication().invokeLater( + () -> TransactionGuard.getInstance().submitMergeableTransaction(TransactionKind.TEXT_EDITING, runnable1)); } } else { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/actions/BaseCodeCompletionAction.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/actions/BaseCodeCompletionAction.java index 5dccecef4bee..2b08a932280f 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/actions/BaseCodeCompletionAction.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/actions/BaseCodeCompletionAction.java @@ -18,13 +18,14 @@ package com.intellij.codeInsight.completion.actions; import com.intellij.codeInsight.completion.CodeCompletionHandlerBase; import com.intellij.codeInsight.completion.CompletionType; import com.intellij.codeInsight.hint.HintManagerImpl; -import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.TransactionKind; +import com.intellij.openapi.application.WrapInTransaction; import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.DumbAware; +import com.intellij.openapi.project.DumbAwareAction; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiFile; import com.intellij.psi.util.PsiUtilBase; @@ -34,7 +35,8 @@ import java.awt.event.InputEvent; /** * @author peter */ -public abstract class BaseCodeCompletionAction extends AnAction implements HintManagerImpl.ActionToIgnore, DumbAware { +@WrapInTransaction(TransactionKind.Common.TEXT_EDITING) +public abstract class BaseCodeCompletionAction extends DumbAwareAction implements HintManagerImpl.ActionToIgnore { protected BaseCodeCompletionAction() { setEnabledInModalContext(true);