IDEA-94471 for intention ('Remove unnecessary parentheses' is not suggested inside array access)

This commit is contained in:
Bas Leijdekkers
2012-11-12 14:07:31 +01:00
parent 129070d210
commit 4e7b79f2a8
6 changed files with 38 additions and 2 deletions
@@ -218,11 +218,20 @@ public class ParenthesesUtils {
return;
}
final PsiElement parent = parenthesizedExpression.getParent();
if (!(parent instanceof PsiExpression) || parent instanceof PsiParenthesizedExpression) {
if (!(parent instanceof PsiExpression) || parent instanceof PsiParenthesizedExpression ||
parent instanceof PsiArrayInitializerExpression) {
final PsiExpression newExpression = (PsiExpression)parenthesizedExpression.replace(body);
removeParentheses(newExpression, ignoreClarifyingParentheses);
return;
}
else if (parent instanceof PsiArrayAccessExpression) {
// use addAfter() + delete() instead of replace() to
// workaround automatic insertion of parentheses by psi
final PsiExpression newExpression = (PsiExpression)parent.addAfter(body, parenthesizedExpression);
parenthesizedExpression.delete();
removeParentheses(newExpression, ignoreClarifyingParentheses);
return;
}
final PsiExpression parentExpression = (PsiExpression)parent;
final int parentPrecedence = getPrecedence(parentExpression);
final int childPrecedence = getPrecedence(body);
@@ -402,7 +411,8 @@ public class ParenthesesUtils {
}
public static boolean areParenthesesNeeded(PsiExpression expression, PsiExpression parentExpression) {
if (parentExpression instanceof PsiParenthesizedExpression) {
if (parentExpression instanceof PsiParenthesizedExpression || parentExpression instanceof PsiArrayAccessExpression ||
parentExpression instanceof PsiArrayInitializerExpression) {
return false;
}
final int parentPrecedence = getPrecedence(parentExpression);
@@ -0,0 +1,7 @@
package com.siyeh.ipp.parentheses;
class ArrayAccessExpression {
private static boolean placeEqualsLastArg(Object place, Object[] args) {
return args.length > 0 && place.equals(args[(ar<caret>gs.length - 1)]);// here are unnecessary parentheses inside args[...]
}
}
@@ -0,0 +1,7 @@
package com.siyeh.ipp.parentheses;
class ArrayAccessExpression {
private static boolean placeEqualsLastArg(Object place, Object[] args) {
return args.length > 0 && place.equals(args[args.length - 1]);// here are unnecessary parentheses inside args[...]
}
}
@@ -0,0 +1,5 @@
package com.siyeh.ipp.parentheses;
class ArrayInitializer {{
final Object[] objects = {(<caret>2 + 2), 1};
}}
@@ -0,0 +1,5 @@
package com.siyeh.ipp.parentheses;
class ArrayInitializer {{
final Object[] objects = {2 + 2, 1};
}}
@@ -15,6 +15,8 @@ public class UnnecessaryParenthesesIntentionTest extends IPPTestCase {
public void testStringParentheses() { assertIntentionNotAvailable(); }
public void testComparisonParentheses() { assertIntentionNotAvailable(); }
public void testNotCommutative2() { doTest(); }
public void testArrayInitializer() { doTest(); }
public void testArrayAccessExpression() { doTest(); }
@Override
protected String getRelativePath() {