use transactions in completion

This commit is contained in:
peter
2016-03-08 20:04:39 +01:00
parent 66b7aec250
commit e529d91ba8
2 changed files with 17 additions and 12 deletions
@@ -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 {
@@ -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);