mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Java: Show "Extract Method" dialog in transaction only when needed (IDEA-186521)
This commit is contained in:
@@ -36,4 +36,6 @@ public interface AbstractExtractDialog {
|
||||
boolean isOK();
|
||||
|
||||
default boolean isPreviewUsages() {return false;}
|
||||
|
||||
default boolean showInTransaction() {return false;}
|
||||
}
|
||||
@@ -697,4 +697,9 @@ public class ExtractMethodDialog extends RefactoringDialog implements AbstractEx
|
||||
public PsiType getReturnType() {
|
||||
return mySelector != null ? mySelector.getSelectedType() : myReturnType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean showInTransaction() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
+17
-8
@@ -16,6 +16,7 @@ import com.intellij.ide.DataManager;
|
||||
import com.intellij.ide.util.PropertiesComponent;
|
||||
import com.intellij.ide.util.PsiClassListCellRenderer;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.TransactionGuard;
|
||||
import com.intellij.openapi.command.WriteCommandAction;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
@@ -26,10 +27,7 @@ import com.intellij.openapi.editor.colors.EditorColorsManager;
|
||||
import com.intellij.openapi.editor.markup.TextAttributes;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.Pass;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.util.*;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.wm.WindowManager;
|
||||
@@ -577,10 +575,21 @@ public class ExtractMethodProcessor implements MatchProvider {
|
||||
|
||||
public boolean showDialog(final boolean direct) {
|
||||
AbstractExtractDialog dialog = createExtractMethodDialog(direct);
|
||||
dialog.show();
|
||||
if (!dialog.isOK()) return false;
|
||||
apply(dialog);
|
||||
return true;
|
||||
Ref<Boolean> result = Ref.create(Boolean.FALSE);
|
||||
Runnable showAndApply = () -> {
|
||||
dialog.show();
|
||||
if (dialog.isOK()) {
|
||||
apply(dialog);
|
||||
result.set(Boolean.TRUE);
|
||||
}
|
||||
};
|
||||
if (dialog.showInTransaction()) {
|
||||
TransactionGuard.getInstance().submitTransactionAndWait(showAndApply);
|
||||
}
|
||||
else {
|
||||
showAndApply.run();
|
||||
}
|
||||
return result.get();
|
||||
}
|
||||
|
||||
protected void apply(final AbstractExtractDialog dialog) {
|
||||
|
||||
Reference in New Issue
Block a user