From ff958e1fdd61a6e5fcdbe297b85b384589e9d68d Mon Sep 17 00:00:00 2001 From: Pavel Dolgov Date: Mon, 9 Jul 2018 13:05:23 +0300 Subject: [PATCH] Java: Preserve comments when extracting method with duplicates (IDEA-194463) --- .../extractMethod/ParametrizedDuplicates.java | 4 ++-- .../DuplicatePreserveComments.java | 13 +++++++++++++ .../DuplicatePreserveComments_after.java | 17 +++++++++++++++++ .../java/refactoring/ExtractMethodTest.java | 4 ++++ 4 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/refactoring/extractMethod/DuplicatePreserveComments.java create mode 100644 java/java-tests/testData/refactoring/extractMethod/DuplicatePreserveComments_after.java diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethod/ParametrizedDuplicates.java b/java/java-impl/src/com/intellij/refactoring/extractMethod/ParametrizedDuplicates.java index 153257c7b31d..382082cf7f6c 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethod/ParametrizedDuplicates.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethod/ParametrizedDuplicates.java @@ -57,8 +57,8 @@ public class ParametrizedDuplicates { private ParametrizedDuplicates(@NotNull PsiElement[] pattern, @NotNull ExtractMethodProcessor originalProcessor) { - pattern = getFilteredElements(pattern); - PsiElement firstElement = pattern.length != 0 ? pattern[0] : null; + PsiElement[] filteredPattern = getFilteredElements(pattern); + PsiElement firstElement = filteredPattern.length != 0 ? filteredPattern[0] : null; if (firstElement instanceof PsiStatement) { PsiElement[] copy = copyElements(pattern); myElements = wrapWithCodeBlock(copy, originalProcessor.getInputVariables()); diff --git a/java/java-tests/testData/refactoring/extractMethod/DuplicatePreserveComments.java b/java/java-tests/testData/refactoring/extractMethod/DuplicatePreserveComments.java new file mode 100644 index 000000000000..9e490316aed5 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethod/DuplicatePreserveComments.java @@ -0,0 +1,13 @@ +class C { + void foo() { + /*a*/ // b + System.out.println(1); + /*c*/ // d + } + + void bar() { + /*x*/ + System.out.println(1); + /*z*/ + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethod/DuplicatePreserveComments_after.java b/java/java-tests/testData/refactoring/extractMethod/DuplicatePreserveComments_after.java new file mode 100644 index 000000000000..d1657300d5dc --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethod/DuplicatePreserveComments_after.java @@ -0,0 +1,17 @@ +class C { + void foo() { + newMethod(); + } + + private void newMethod() { + /*a*/ // b + System.out.println(1); + /*c*/ // d + } + + void bar() { + /*x*/ + newMethod(); + /*z*/ + } +} \ No newline at end of file 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 e23854f8944d..c4f512d268a7 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodTest.java @@ -1287,6 +1287,10 @@ public class ExtractMethodTest extends LightCodeInsightTestCase { doDuplicatesTest(); } + public void testDuplicatePreserveComments() throws Exception { + doDuplicatesTest(); + } + public void testBeforeCommentAfterSelectedFragment() throws Exception { doTest(); }