From e72e82507647319de2e2078c81944dffba9ffb02 Mon Sep 17 00:00:00 2001 From: Pavel Dolgov Date: Tue, 5 Sep 2017 17:08:42 +0300 Subject: [PATCH] Java: Refactoring - improve readability of ExtractMethodHandler and related classes (IDEA-144957) --- .../extractMethod/ExtractMethodHandler.java | 37 ++++++---- .../extractMethod/ExtractMethodProcessor.java | 2 +- .../ExtractMethodObjectHandler.java | 73 +++++++++++-------- .../refactoring/ExtractMethodObjectTest.java | 2 +- ...ethodObjectWithMultipleExitPointsTest.java | 2 +- .../java/refactoring/ExtractMethodTest.java | 2 +- 6 files changed, 66 insertions(+), 52 deletions(-) diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodHandler.java b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodHandler.java index 375d7a66964b..03fd595c3d49 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodHandler.java @@ -157,31 +157,36 @@ public class ExtractMethodHandler implements RefactoringActionHandler, ContextAw private static boolean invokeOnElements(final Project project, final Editor editor, @NotNull final ExtractMethodProcessor processor, final boolean directTypes) { if (!CommonRefactoringUtil.checkReadOnlyStatus(project, processor.getTargetClass().getContainingFile())) return false; if (processor.showDialog(directTypes)) { - run(project, editor, processor); + extractMethod(project, processor); DuplicatesImpl.processDuplicates(processor, project, editor); return true; } return false; } - public static void run(@NotNull final Project project, final Editor editor, final ExtractMethodProcessor processor) { + public static void extractMethod(@NotNull final Project project, final ExtractMethodProcessor processor) { CommandProcessor.getInstance().executeCommand(project, - () -> PostprocessReformattingAspect.getInstance(project).postponeFormattingInside(() -> { - try { - final RefactoringEventData beforeData = new RefactoringEventData(); - beforeData.addElements(processor.myElements); - project.getMessageBus().syncPublisher(RefactoringEventListener.REFACTORING_EVENT_TOPIC).refactoringStarted("refactoring.extract.method", beforeData); + () -> PostprocessReformattingAspect.getInstance(project).postponeFormattingInside( + () -> doRefactoring(project, processor)), REFACTORING_NAME, null); + } - processor.doRefactoring(); + private static void doRefactoring(@NotNull Project project, ExtractMethodProcessor processor) { + try { + final RefactoringEventData beforeData = new RefactoringEventData(); + beforeData.addElements(processor.myElements); + project.getMessageBus().syncPublisher( + RefactoringEventListener.REFACTORING_EVENT_TOPIC).refactoringStarted("refactoring.extract.method", beforeData); - final RefactoringEventData data = new RefactoringEventData(); - data.addElement(processor.getExtractedMethod()); - project.getMessageBus().syncPublisher(RefactoringEventListener.REFACTORING_EVENT_TOPIC).refactoringDone("refactoring.extract.method", data); - } - catch (IncorrectOperationException e) { - LOG.error(e); - } - }), REFACTORING_NAME, null); + processor.doRefactoring(); + + final RefactoringEventData data = new RefactoringEventData(); + data.addElement(processor.getExtractedMethod()); + project.getMessageBus().syncPublisher(RefactoringEventListener.REFACTORING_EVENT_TOPIC) + .refactoringDone("refactoring.extract.method", data); + } + catch (IncorrectOperationException e) { + LOG.error(e); + } } @Nullable diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java index 12322e640ea3..c08fd88c1803 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java @@ -755,7 +755,7 @@ public class ExtractMethodProcessor implements MatchProvider { public void testRun() throws IncorrectOperationException { testPrepare(); testNullness(); - ExtractMethodHandler.run(myProject, myEditor, this); + ExtractMethodHandler.extractMethod(myProject, this); } @TestOnly 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 150fdd8f407a..13ac78885722 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectHandler.java @@ -82,14 +82,14 @@ public class ExtractMethodObjectHandler implements RefactoringActionHandler, Con if (!extractProcessor.prepare()) return; if (!CommonRefactoringUtil.checkReadOnlyStatus(project, extractProcessor.getTargetClass().getContainingFile())) return; if (extractProcessor.showDialog()) { - run(project, editor, processor, extractProcessor); + extractMethodObject(project, editor, processor, extractProcessor); } } - public static void run(@NotNull final Project project, - final Editor editor, - @NotNull final ExtractMethodObjectProcessor processor, - @NotNull final ExtractMethodObjectProcessor.MyExtractMethodProcessor extractProcessor) { + public static void extractMethodObject(@NotNull final Project project, + final Editor editor, + @NotNull final ExtractMethodObjectProcessor processor, + @NotNull final ExtractMethodObjectProcessor.MyExtractMethodProcessor extractProcessor) { final RangeMarker marker; if (editor != null) { final int offset = editor.getCaretModel().getOffset(); @@ -98,33 +98,9 @@ public class ExtractMethodObjectHandler implements RefactoringActionHandler, Con marker = null; } CommandProcessor.getInstance().executeCommand(project, - () -> PostprocessReformattingAspect.getInstance(project).postponeFormattingInside(() -> { - try { - ApplicationManager.getApplication().runWriteAction(() -> extractProcessor.doRefactoring()); - processor.run(); - ApplicationManager.getApplication().runWriteAction(() -> processor.runChangeSignature()); - } - catch (IncorrectOperationException e) { - LOG.error(e); - } - - PsiDocumentManager.getInstance(project).commitAllDocuments(); - if (processor.isCreateInnerClass()) { - processor.moveUsedMethodsToInner(); - PsiDocumentManager.getInstance(project).commitAllDocuments(); - if (editor != null) { - DuplicatesImpl.processDuplicates(extractProcessor, project, editor); - } - } - ApplicationManager.getApplication().runWriteAction(() -> { - if (processor.isCreateInnerClass()) { - processor.changeInstanceAccess(project); - } - final PsiElement method = processor.getMethod(); - LOG.assertTrue(method != null); - method.delete(); - }); - }), ExtractMethodObjectProcessor.REFACTORING_NAME, ExtractMethodObjectProcessor.REFACTORING_NAME); + () -> doRefactoring(project, editor, processor, extractProcessor), + ExtractMethodObjectProcessor.REFACTORING_NAME, + ExtractMethodObjectProcessor.REFACTORING_NAME); if (editor != null) { editor.getCaretModel().moveToOffset(marker.getStartOffset()); marker.dispose(); @@ -132,6 +108,39 @@ public class ExtractMethodObjectHandler implements RefactoringActionHandler, Con } } + private static void doRefactoring(@NotNull Project project, + Editor editor, + @NotNull ExtractMethodObjectProcessor processor, + @NotNull ExtractMethodObjectProcessor.MyExtractMethodProcessor extractProcessor) { + PostprocessReformattingAspect.getInstance(project).postponeFormattingInside(() -> { + try { + ApplicationManager.getApplication().runWriteAction(() -> extractProcessor.doRefactoring()); + processor.run(); + ApplicationManager.getApplication().runWriteAction(() -> processor.runChangeSignature()); + } + catch (IncorrectOperationException e) { + LOG.error(e); + } + + PsiDocumentManager.getInstance(project).commitAllDocuments(); + if (processor.isCreateInnerClass()) { + processor.moveUsedMethodsToInner(); + PsiDocumentManager.getInstance(project).commitAllDocuments(); + if (editor != null) { + DuplicatesImpl.processDuplicates(extractProcessor, project, editor); + } + } + ApplicationManager.getApplication().runWriteAction(() -> { + if (processor.isCreateInnerClass()) { + processor.changeInstanceAccess(project); + } + final PsiElement method = processor.getMethod(); + LOG.assertTrue(method != null); + method.delete(); + }); + }); + } + public void invoke(@NotNull final Project project, @NotNull final PsiElement[] elements, final DataContext dataContext) { throw new UnsupportedOperationException(); } diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodObjectTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodObjectTest.java index 6f3ded5dd1d8..64039c0cbdf5 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodObjectTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodObjectTest.java @@ -50,7 +50,7 @@ public class ExtractMethodObjectTest extends LightRefactoringTestCase { extractProcessor.prepare(); extractProcessor.testPrepare(); - ExtractMethodObjectHandler.run(getProject(), getEditor(), processor, extractProcessor); + ExtractMethodObjectHandler.extractMethodObject(getProject(), getEditor(), processor, extractProcessor); checkResultByFile("/refactoring/extractMethodObject/" + testName + ".java" + ".after"); } diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodObjectWithMultipleExitPointsTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodObjectWithMultipleExitPointsTest.java index 940b8af05a00..c6f16cd1aef6 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodObjectWithMultipleExitPointsTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodObjectWithMultipleExitPointsTest.java @@ -61,7 +61,7 @@ public class ExtractMethodObjectWithMultipleExitPointsTest extends LightRefactor processor.setCreateInnerClass(createInnerClass); - ExtractMethodObjectHandler.run(getProject(), getEditor(), processor, extractProcessor); + ExtractMethodObjectHandler.extractMethodObject(getProject(), getEditor(), processor, extractProcessor); checkResultByFile("/refactoring/extractMethodObject/multipleExitPoints/" + testName + ".java" + ".after"); diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodTest.java index a33e72e7f3a3..431214df3b67 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodTest.java @@ -1210,7 +1210,7 @@ public class ExtractMethodTest extends LightCodeInsightTestCase { if (newNameOfFirstParam != null) { processor.changeParamName(0, newNameOfFirstParam); } - ExtractMethodHandler.run(project, editor, processor); + ExtractMethodHandler.extractMethod(project, processor); } if (replaceAllDuplicates) {