From b7eddbbbc393f72dbba5753bca1a227a602b0643 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Fri, 22 Apr 2016 19:04:56 +0200 Subject: [PATCH] extract method: fold parameters after array acces was detected (IDEA-155094) --- .../refactoring/extractMethod/ParametersFolder.java | 11 ++++------- .../extractMethod/ArrayAccessWithTopExpression.java | 8 ++++++++ .../ArrayAccessWithTopExpression_after.java | 12 ++++++++++++ .../com/intellij/refactoring/ExtractMethodTest.java | 4 ++++ 4 files changed, 28 insertions(+), 7 deletions(-) create mode 100644 java/java-tests/testData/refactoring/extractMethod/ArrayAccessWithTopExpression.java create mode 100644 java/java-tests/testData/refactoring/extractMethod/ArrayAccessWithTopExpression_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 50a5e91903d0..b7e0e48f8c4b 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 @@ -118,15 +118,12 @@ public class ParametersFolder { PsiExpression mostRanked = null; for (int i = mentionedInExpressions.size() - 1; i >= 0; i--) { PsiExpression expression = mentionedInExpressions.get(i); - if (expression instanceof PsiArrayAccessExpression) { - mostRanked = expression; - if (!isConditional(expression, scope)) { - myFoldingSelectedByDefault = true; - break; - } + boolean arrayAccess = expression instanceof PsiArrayAccessExpression && !isConditional(expression, scope); + if (arrayAccess) { + myFoldingSelectedByDefault = true; } final int r = findUsedVariables(data, inputVariables, expression).size(); - if (currentRank < r) { + if (currentRank < r || arrayAccess && currentRank == r) { currentRank = r; mostRanked = expression; } diff --git a/java/java-tests/testData/refactoring/extractMethod/ArrayAccessWithTopExpression.java b/java/java-tests/testData/refactoring/extractMethod/ArrayAccessWithTopExpression.java new file mode 100644 index 000000000000..453e376880d5 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethod/ArrayAccessWithTopExpression.java @@ -0,0 +1,8 @@ +class Test { + { + int i = 0; + double[] doubles = null; + + double progressResult = doubles[0] / i; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethod/ArrayAccessWithTopExpression_after.java b/java/java-tests/testData/refactoring/extractMethod/ArrayAccessWithTopExpression_after.java new file mode 100644 index 000000000000..11b7df990b29 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethod/ArrayAccessWithTopExpression_after.java @@ -0,0 +1,12 @@ +class Test { + { + int i = 0; + double[] doubles = null; + + newMethod(doubles[0] / i); + } + + private void newMethod(double v) { + double progressResult = v; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java b/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java index 7df6b43c8fb7..35946793c3a8 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java @@ -500,6 +500,10 @@ public class ExtractMethodTest extends LightCodeInsightTestCase { doTest(); } + public void testArrayAccessWithTopExpression() throws Exception { + doTest(); + } + public void testArrayAccessWithDuplicates() throws Exception { doDuplicatesTest(); }