mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
run intentions under transaction (IDEA-CR-15393)
This commit is contained in:
+18
-21
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2016 JetBrains s.r.o.
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -21,7 +21,6 @@ import com.intellij.codeInsight.intention.HighPriorityAction;
|
||||
import com.intellij.ide.util.MemberChooser;
|
||||
import com.intellij.lang.java.JavaLanguage;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.TransactionGuard;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.fileEditor.ex.IdeDocumentHistory;
|
||||
@@ -158,27 +157,25 @@ public class BindFieldsFromParametersAction extends BaseIntentionAction implemen
|
||||
private static void invoke(final Project project, Editor editor, PsiFile file, boolean isInteractive) {
|
||||
PsiParameter psiParameter = FieldFromParameterUtils.findParameterAtCursor(file, editor);
|
||||
if (!FileModificationService.getInstance().prepareFileForWrite(file)) return;
|
||||
TransactionGuard.getInstance().submitTransactionAndWait(() -> {
|
||||
final PsiMethod method = psiParameter != null ? (PsiMethod)psiParameter.getDeclarationScope() : PsiTreeUtil.getParentOfType(file.findElementAt(editor.getCaretModel().getOffset()), PsiMethod.class);
|
||||
LOG.assertTrue(method != null);
|
||||
final PsiMethod method = psiParameter != null ? (PsiMethod)psiParameter.getDeclarationScope() : PsiTreeUtil.getParentOfType(file.findElementAt(editor.getCaretModel().getOffset()), PsiMethod.class);
|
||||
LOG.assertTrue(method != null);
|
||||
|
||||
final HashSet<String> usedNames = new HashSet<>();
|
||||
final Iterable<PsiParameter> parameters = selectParameters(project, method, copyUnboundedParamsAndClearOriginal(method), isInteractive);
|
||||
final MultiMap<PsiType, PsiParameter> types = new MultiMap<>();
|
||||
for (PsiParameter parameter : parameters) {
|
||||
types.putValue(parameter.getType(), parameter);
|
||||
final HashSet<String> usedNames = new HashSet<>();
|
||||
final Iterable<PsiParameter> parameters = selectParameters(project, method, copyUnboundedParamsAndClearOriginal(method), isInteractive);
|
||||
final MultiMap<PsiType, PsiParameter> types = new MultiMap<>();
|
||||
for (PsiParameter parameter : parameters) {
|
||||
types.putValue(parameter.getType(), parameter);
|
||||
}
|
||||
final CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(project);
|
||||
final boolean preferLongerNames = settings.PREFER_LONGER_NAMES;
|
||||
for (PsiParameter selected : parameters) {
|
||||
try {
|
||||
settings.PREFER_LONGER_NAMES = preferLongerNames || types.get(selected.getType()).size() > 1;
|
||||
processParameter(project, selected, usedNames);
|
||||
} finally {
|
||||
settings.PREFER_LONGER_NAMES = preferLongerNames;
|
||||
}
|
||||
final CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(project);
|
||||
final boolean preferLongerNames = settings.PREFER_LONGER_NAMES;
|
||||
for (PsiParameter selected : parameters) {
|
||||
try {
|
||||
settings.PREFER_LONGER_NAMES = preferLongerNames || types.get(selected.getType()).size() > 1;
|
||||
processParameter(project, selected, usedNames);
|
||||
} finally {
|
||||
settings.PREFER_LONGER_NAMES = preferLongerNames;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+3
-2
@@ -32,6 +32,7 @@ import com.intellij.featureStatistics.FeatureUsageTracker;
|
||||
import com.intellij.featureStatistics.FeatureUsageTrackerImpl;
|
||||
import com.intellij.injected.editor.EditorWindow;
|
||||
import com.intellij.lang.injection.InjectedLanguageManager;
|
||||
import com.intellij.openapi.application.TransactionGuard;
|
||||
import com.intellij.openapi.application.WriteAction;
|
||||
import com.intellij.openapi.command.CommandProcessor;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
@@ -182,7 +183,7 @@ public class ShowIntentionActionsHandler implements CodeInsightActionHandler {
|
||||
(psiFile, editor) -> availableFor(psiFile, editor, action)) : Pair.<PsiFile, Editor>create(hostFile, null);
|
||||
if (pair == null) return false;
|
||||
|
||||
CommandProcessor.getInstance().executeCommand(project, () -> {
|
||||
CommandProcessor.getInstance().executeCommand(project, () -> TransactionGuard.getInstance().submitTransactionAndWait(() -> {
|
||||
Runnable r = () -> action.invoke(project, pair.second, pair.first);
|
||||
try {
|
||||
if (action.startInWriteAction()) {
|
||||
@@ -197,7 +198,7 @@ public class ShowIntentionActionsHandler implements CodeInsightActionHandler {
|
||||
if (hostEditor != null) {
|
||||
DaemonCodeAnalyzer.getInstance(project).updateVisibleHighlighters(hostEditor);
|
||||
}
|
||||
}, text, null);
|
||||
}), text, null);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -60,6 +60,7 @@ import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.actionSystem.ex.ActionManagerEx;
|
||||
import com.intellij.openapi.application.ReadAction;
|
||||
import com.intellij.openapi.application.Result;
|
||||
import com.intellij.openapi.application.TransactionGuard;
|
||||
import com.intellij.openapi.application.WriteAction;
|
||||
import com.intellij.openapi.command.CommandProcessor;
|
||||
import com.intellij.openapi.command.WriteCommandAction;
|
||||
@@ -551,7 +552,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
|
||||
|
||||
@Override
|
||||
public void launchAction(@NotNull final IntentionAction action) {
|
||||
ShowIntentionActionsHandler.chooseActionAndInvoke(getFile(), getEditor(), action, action.getText());
|
||||
TransactionGuard.submitTransaction(getProject(), () -> ShowIntentionActionsHandler.chooseActionAndInvoke(getFile(), getEditor(), action, action.getText()));
|
||||
UIUtil.dispatchAllInvocationEvents();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user