From 5fc02f38a4c54b8d2aeb7fcca8b86bb284635be9 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Thu, 21 Jul 2016 17:47:10 +0200 Subject: [PATCH] inline method: don't repeat field initializer (IDEA-158832) --- .../inline/InlineMethodProcessor.java | 3 +++ ...ineMultipleOccurrencesInFieldInitializer.java | 16 ++++++++++++++++ ...tipleOccurrencesInFieldInitializer.java.after | 13 +++++++++++++ .../refactoring/inline/InlineMethodTest.java | 4 ++++ 4 files changed, 36 insertions(+) create mode 100644 java/java-tests/testData/refactoring/inlineMethod/InlineMultipleOccurrencesInFieldInitializer.java create mode 100644 java/java-tests/testData/refactoring/inlineMethod/InlineMultipleOccurrencesInFieldInitializer.java.after diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java index 2ac01c3cbad9..b9dbcd8836a0 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java @@ -1357,6 +1357,9 @@ public class InlineMethodProcessor extends BaseRefactoringProcessor { inlineEnumConstantParameter(refsVector, ref); continue; } + if (myAddedClassInitializers.containsKey(field)) { + continue; + } field.normalizeDeclaration(); final PsiExpression initializer = field.getInitializer(); LOG.assertTrue(initializer != null); diff --git a/java/java-tests/testData/refactoring/inlineMethod/InlineMultipleOccurrencesInFieldInitializer.java b/java/java-tests/testData/refactoring/inlineMethod/InlineMultipleOccurrencesInFieldInitializer.java new file mode 100644 index 000000000000..11e7acd467f1 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineMethod/InlineMultipleOccurrencesInFieldInitializer.java @@ -0,0 +1,16 @@ + +class Foo { + + public static final Bar[] bars= new Bar[] {Bar.callMe("a", 0, "A", "B", "C"), Bar.callMe("b", 1, "A", "B")}; +} + + +class Bar { + + public Bar(String a, int nr, String... args) { + } + + public static Bar callMe(String a, int nr, String ... args) { + return new Bar(a, nr, args); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineMethod/InlineMultipleOccurrencesInFieldInitializer.java.after b/java/java-tests/testData/refactoring/inlineMethod/InlineMultipleOccurrencesInFieldInitializer.java.after new file mode 100644 index 000000000000..6a5a757b7430 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineMethod/InlineMultipleOccurrencesInFieldInitializer.java.after @@ -0,0 +1,13 @@ + +class Foo { + + public static final Bar[] bars= new Bar[] {new Bar("a", 0, "A", "B", "C"), new Bar("b", 1, "A", "B")}; +} + + +class Bar { + + public Bar(String a, int nr, String... args) { + } + +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java index 30c32410e834..459dcfd60bb2 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java @@ -326,6 +326,10 @@ public class InlineMethodTest extends LightRefactoringTestCase { doTest(); } + public void testInlineMultipleOccurrencesInFieldInitializer() throws Exception { + doTest(); + } + private void doTestInlineThisOnly() { @NonNls String fileName = "/refactoring/inlineMethod/" + getTestName(false) + ".java"; configureByFile(fileName);