diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/psiutils/ParenthesesUtils.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/psiutils/ParenthesesUtils.java index bfddee9de188..67b5f539a39d 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/psiutils/ParenthesesUtils.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/psiutils/ParenthesesUtils.java @@ -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); diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/parentheses/ArrayAccessExpression.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/parentheses/ArrayAccessExpression.java new file mode 100644 index 000000000000..9e3e7b550bb3 --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/parentheses/ArrayAccessExpression.java @@ -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[...] + } +} \ No newline at end of file diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/parentheses/ArrayAccessExpression_after.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/parentheses/ArrayAccessExpression_after.java new file mode 100644 index 000000000000..2fee41b9d592 --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/parentheses/ArrayAccessExpression_after.java @@ -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[...] + } +} \ No newline at end of file diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/parentheses/ArrayInitializer.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/parentheses/ArrayInitializer.java new file mode 100644 index 000000000000..2091c431b255 --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/parentheses/ArrayInitializer.java @@ -0,0 +1,5 @@ +package com.siyeh.ipp.parentheses; + +class ArrayInitializer {{ + final Object[] objects = {(2 + 2), 1}; +}} \ No newline at end of file diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/parentheses/ArrayInitializer_after.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/parentheses/ArrayInitializer_after.java new file mode 100644 index 000000000000..85585af4d931 --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/parentheses/ArrayInitializer_after.java @@ -0,0 +1,5 @@ +package com.siyeh.ipp.parentheses; + +class ArrayInitializer {{ + final Object[] objects = {2 + 2, 1}; +}} \ No newline at end of file diff --git a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/parenthesis/UnnecessaryParenthesesIntentionTest.java b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/parenthesis/UnnecessaryParenthesesIntentionTest.java index 181730c0dcca..77bc9e5abede 100644 --- a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/parenthesis/UnnecessaryParenthesesIntentionTest.java +++ b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/parenthesis/UnnecessaryParenthesesIntentionTest.java @@ -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() {