From 0f7021bfe0f8e6ea41cf29d035ce29096e1855ce Mon Sep 17 00:00:00 2001 From: Pavel Dolgov Date: Thu, 6 Jul 2017 15:53:04 +0300 Subject: [PATCH] Java: Restored folding of nested function calls when extracting method (IDEA-175221, IDEA-167255) --- .../extractMethod/ParametersFolder.java | 2 +- .../extractMethod/FoldingWithFunctionCall.java | 12 ++++++++++++ .../FoldingWithFunctionCall_after.java | 16 ++++++++++++++++ .../java/refactoring/ExtractMethodTest.java | 4 ++++ 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/refactoring/extractMethod/FoldingWithFunctionCall.java create mode 100644 java/java-tests/testData/refactoring/extractMethod/FoldingWithFunctionCall_after.java diff --git a/java/java-analysis-impl/src/com/intellij/refactoring/extractMethod/ParametersFolder.java b/java/java-analysis-impl/src/com/intellij/refactoring/extractMethod/ParametersFolder.java index b7593b26aa87..bba1f6a1dd51 100644 --- a/java/java-analysis-impl/src/com/intellij/refactoring/extractMethod/ParametersFolder.java +++ b/java/java-analysis-impl/src/com/intellij/refactoring/extractMethod/ParametersFolder.java @@ -245,7 +245,7 @@ public class ParametersFolder { if (!isMethodNameExpression(expression)) { expressions.add((PsiExpression)expression); } - expression = parent instanceof PsiExpression ? parent : null; + expression = PsiTreeUtil.getParentOfType(expression, PsiExpression.class); } } else { diff --git a/java/java-tests/testData/refactoring/extractMethod/FoldingWithFunctionCall.java b/java/java-tests/testData/refactoring/extractMethod/FoldingWithFunctionCall.java new file mode 100644 index 000000000000..e9ddaf23e8d6 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethod/FoldingWithFunctionCall.java @@ -0,0 +1,12 @@ +import java.util.List; +class C { + void foo(int[] a, List b) { + int i = 1; + int n = bar(a[i], b.get(i)); + System.out.println(n); + } + + int bar(int a, int b) { + return a + b; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethod/FoldingWithFunctionCall_after.java b/java/java-tests/testData/refactoring/extractMethod/FoldingWithFunctionCall_after.java new file mode 100644 index 000000000000..2d213651d8e8 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethod/FoldingWithFunctionCall_after.java @@ -0,0 +1,16 @@ +import java.util.List; +class C { + void foo(int[] a, List b) { + int i = 1; + int n = newMethod(bar(a[i], b.get(i))); + System.out.println(n); + } + + private int newMethod(int bar) { + return bar; + } + + int bar(int a, int b) { + return a + b; + } +} \ 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 369f866f9b1b..a4125ba0cdc6 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodTest.java @@ -448,6 +448,10 @@ public class ExtractMethodTest extends LightCodeInsightTestCase { doTest(); } + public void testFoldingWithFunctionCall() throws Exception { + doTest(); + } + public void testDontSkipVariablesUsedInLeftSideOfAssignments() throws Exception { doTest(); }