summaryrefslogtreecommitdiff
path: root/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectHandler.java')
-rw-r--r--java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectHandler.java47
1 files changed, 31 insertions, 16 deletions
diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectHandler.java b/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectHandler.java
index d8fb3fd6ef87..459a7030457f 100644
--- a/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectHandler.java
+++ b/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectHandler.java
@@ -30,9 +30,7 @@ import com.intellij.openapi.editor.ScrollType;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Pass;
import com.intellij.openapi.util.TextRange;
-import com.intellij.psi.PsiDocumentManager;
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiFile;
+import com.intellij.psi.*;
import com.intellij.psi.impl.source.PostprocessReformattingAspect;
import com.intellij.refactoring.HelpID;
import com.intellij.refactoring.RefactoringActionHandler;
@@ -55,7 +53,10 @@ public class ExtractMethodObjectHandler implements RefactoringActionHandler {
});
}
- private void invokeOnElements(@NotNull final Project project, @NotNull final Editor editor, @NotNull PsiFile file, @NotNull PsiElement[] elements) {
+ private static void invokeOnElements(@NotNull final Project project,
+ @NotNull final Editor editor,
+ @NotNull PsiFile file,
+ @NotNull PsiElement[] elements) {
if (elements.length == 0) {
String message = RefactoringBundle
.getCannotRefactorMessage(RefactoringBundle.message("selected.block.should.represent.a.set.of.statements.or.an.expression"));
@@ -63,17 +64,18 @@ public class ExtractMethodObjectHandler implements RefactoringActionHandler {
return;
}
- final ExtractMethodObjectProcessor processor = new ExtractMethodObjectProcessor(project, editor, elements, "");
- final ExtractMethodObjectProcessor.MyExtractMethodProcessor extractProcessor = processor.getExtractProcessor();
try {
- if (!extractProcessor.prepare()) return;
+ extractMethodObject(project, editor, new ExtractMethodObjectProcessor(project, editor, elements, ""));
}
catch (PrepareFailedException e) {
CommonRefactoringUtil.showErrorHint(project, editor, e.getMessage(), ExtractMethodObjectProcessor.REFACTORING_NAME, HelpID.EXTRACT_METHOD_OBJECT);
ExtractMethodHandler.highlightPrepareError(e, file, editor, project);
- return;
}
+ }
+ static void extractMethodObject(Project project, Editor editor, ExtractMethodObjectProcessor processor) throws PrepareFailedException {
+ final ExtractMethodObjectProcessor.MyExtractMethodProcessor extractProcessor = processor.getExtractProcessor();
+ if (!extractProcessor.prepare()) return;
if (!CommonRefactoringUtil.checkReadOnlyStatus(project, extractProcessor.getTargetClass().getContainingFile())) return;
if (extractProcessor.showDialog()) {
run(project, editor, processor, extractProcessor);
@@ -81,11 +83,16 @@ public class ExtractMethodObjectHandler implements RefactoringActionHandler {
}
public static void run(@NotNull final Project project,
- @NotNull final Editor editor,
+ final Editor editor,
@NotNull final ExtractMethodObjectProcessor processor,
@NotNull final ExtractMethodObjectProcessor.MyExtractMethodProcessor extractProcessor) {
- final int offset = editor.getCaretModel().getOffset();
- final RangeMarker marker = editor.getDocument().createRangeMarker(new TextRange(offset, offset));
+ final RangeMarker marker;
+ if (editor != null) {
+ final int offset = editor.getCaretModel().getOffset();
+ marker = editor.getDocument().createRangeMarker(new TextRange(offset, offset));
+ } else {
+ marker = null;
+ }
CommandProcessor.getInstance().executeCommand(project, new Runnable() {
public void run() {
PostprocessReformattingAspect.getInstance(project).postponeFormattingInside(new Runnable() {
@@ -98,7 +105,11 @@ public class ExtractMethodObjectHandler implements RefactoringActionHandler {
}
});
processor.run();
- processor.runChangeSignature();
+ ApplicationManager.getApplication().runWriteAction(new Runnable() {
+ public void run() {
+ processor.runChangeSignature();
+ }
+ });
}
catch (IncorrectOperationException e) {
LOG.error(e);
@@ -110,7 +121,9 @@ public class ExtractMethodObjectHandler implements RefactoringActionHandler {
if (processor.isCreateInnerClass()) {
processor.moveUsedMethodsToInner();
PsiDocumentManager.getInstance(project).commitAllDocuments();
- DuplicatesImpl.processDuplicates(extractProcessor, project, editor);
+ if (editor != null) {
+ DuplicatesImpl.processDuplicates(extractProcessor, project, editor);
+ }
}
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override
@@ -125,9 +138,11 @@ public class ExtractMethodObjectHandler implements RefactoringActionHandler {
});
}
}, ExtractMethodObjectProcessor.REFACTORING_NAME, ExtractMethodObjectProcessor.REFACTORING_NAME);
- editor.getCaretModel().moveToOffset(marker.getStartOffset());
- marker.dispose();
- editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE);
+ if (editor != null) {
+ editor.getCaretModel().moveToOffset(marker.getStartOffset());
+ marker.dispose();
+ editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE);
+ }
}
public void invoke(@NotNull final Project project, @NotNull final PsiElement[] elements, final DataContext dataContext) {