extract method: fold parameters after array acces was detected (IDEA-155094)

This commit is contained in:
Anna.Kozlova
2016-04-22 19:31:27 +02:00
parent 5984dae7ac
commit b7eddbbbc3
4 changed files with 28 additions and 7 deletions
@@ -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;
}
@@ -0,0 +1,8 @@
class Test {
{
int i = 0;
double[] doubles = null;
<selection>double progressResult = doubles[0] / i;</selection>
}
}
@@ -0,0 +1,12 @@
class Test {
{
int i = 0;
double[] doubles = null;
newMethod(doubles[0] / i);
}
private void newMethod(double v) {
double progressResult = v;
}
}
@@ -500,6 +500,10 @@ public class ExtractMethodTest extends LightCodeInsightTestCase {
doTest();
}
public void testArrayAccessWithTopExpression() throws Exception {
doTest();
}
public void testArrayAccessWithDuplicates() throws Exception {
doDuplicatesTest();
}