diff options
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.java | 47 |
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) { |