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 53feada2a7b8..4ccfb96f5888 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java @@ -777,6 +777,8 @@ public class InlineMethodProcessor extends BaseRefactoringProcessor { PsiExpression expr = InlineUtil.inlineVariable(variable, initializer, javaRef); + InlineUtil.tryToInlineArrayCreationForVarargs(expr); + //Q: move the following code to some util? (addition to inline?) if (expr instanceof PsiThisExpression) { if (expr.getParent() instanceof PsiReferenceExpression) { @@ -864,6 +866,17 @@ public class InlineMethodProcessor extends BaseRefactoringProcessor { } else if (initializer instanceof PsiCallExpression) { if (accessCount > 1) return false; + if (initializer instanceof PsiNewExpression) { + final PsiArrayInitializerExpression arrayInitializer = ((PsiNewExpression)initializer).getArrayInitializer(); + if (arrayInitializer != null) { + for (PsiExpression expression : arrayInitializer.getInitializers()) { + if (!canInlineParmOrThisVariable(expression, shouldBeFinal, strictlyFinal, accessCount, false)) { + return false; + } + } + return true; + } + } final PsiExpressionList argumentList = ((PsiCallExpression)initializer).getArgumentList(); if (argumentList == null) return false; final PsiExpression[] expressions = argumentList.getExpressions(); diff --git a/java/java-tests/testData/refactoring/inlineMethod/FlatVarargs.java b/java/java-tests/testData/refactoring/inlineMethod/FlatVarargs.java new file mode 100644 index 000000000000..97a35f7210e0 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineMethod/FlatVarargs.java @@ -0,0 +1,16 @@ +class Varargs { + void xxx() { + foo(new String[] {"aa", "hh"}); + } + + void foo(String... ss) { + bar(ss); + } + + void bar(String s, String ss){ + + } + + void bar(String... ss) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineMethod/FlatVarargs.java.after b/java/java-tests/testData/refactoring/inlineMethod/FlatVarargs.java.after new file mode 100644 index 000000000000..f713b4d6d19a --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineMethod/FlatVarargs.java.after @@ -0,0 +1,12 @@ +class Varargs { + void xxx() { + bar(new String[] {"aa", "hh"}); + } + + void bar(String s, String ss){ + + } + + void bar(String... ss) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineMethod/FlatVarargs1.java b/java/java-tests/testData/refactoring/inlineMethod/FlatVarargs1.java new file mode 100644 index 000000000000..2e47b2321da7 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineMethod/FlatVarargs1.java @@ -0,0 +1,12 @@ +class Varargs { + void xxx() { + foo(new String[] {"aa", "hh"}); + } + + void foo(String... ss) { + bar(ss); + } + + void bar(String... ss) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineMethod/FlatVarargs1.java.after b/java/java-tests/testData/refactoring/inlineMethod/FlatVarargs1.java.after new file mode 100644 index 000000000000..2d057b1e4d19 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineMethod/FlatVarargs1.java.after @@ -0,0 +1,8 @@ +class Varargs { + void xxx() { + bar("aa", "hh"); + } + + void bar(String... ss) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineMethod/Varargs.java.after b/java/java-tests/testData/refactoring/inlineMethod/Varargs.java.after index cb489b6f3c3f..62867aee1cc0 100644 --- a/java/java-tests/testData/refactoring/inlineMethod/Varargs.java.after +++ b/java/java-tests/testData/refactoring/inlineMethod/Varargs.java.after @@ -4,7 +4,6 @@ public class Varargs { } public void foo() { - String[] texts = new String[]{"i", "d", "e", "a"}; - String s = join("", texts); + String s = join("", "i", "d", "e", "a"); } } \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineMethod/Varargs1.java.after b/java/java-tests/testData/refactoring/inlineMethod/Varargs1.java.after index 90369d828877..35ca65a4df7b 100644 --- a/java/java-tests/testData/refactoring/inlineMethod/Varargs1.java.after +++ b/java/java-tests/testData/refactoring/inlineMethod/Varargs1.java.after @@ -1,8 +1,7 @@ class BugTest { { - String[] s = new String[] {""}; - for (String s1 : s) { + for (String s1 : new String[] {""}) { } } 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 ba9102562781..6fd0a6d74a00 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java @@ -98,6 +98,9 @@ public class InlineMethodTest extends LightCodeInsightTestCase { public void testVarargs1() throws Exception { doTest(); } + public void testFlatVarargs() throws Exception {doTest();} + public void testFlatVarargs1() throws Exception {doTest();} + public void testEnumConstructor() throws Exception { doTest(); } public void testEnumConstantConstructorParameter() throws Exception { // IDEADEV-26133