summaryrefslogtreecommitdiff
path: root/plugins/IntentionPowerPak/src/com/siyeh/ipp/psiutils/ParenthesesUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/IntentionPowerPak/src/com/siyeh/ipp/psiutils/ParenthesesUtils.java')
-rw-r--r--plugins/IntentionPowerPak/src/com/siyeh/ipp/psiutils/ParenthesesUtils.java49
1 files changed, 29 insertions, 20 deletions
diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/psiutils/ParenthesesUtils.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/psiutils/ParenthesesUtils.java
index b4d97f52687d..ab2971af6b81 100644
--- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/psiutils/ParenthesesUtils.java
+++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/psiutils/ParenthesesUtils.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2012 Dave Griffith, Bas Leijdekkers
+ * Copyright 2003-2013 Dave Griffith, Bas Leijdekkers
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -81,7 +81,7 @@ public class ParenthesesUtils {
return expression;
}
- public static boolean isCommutativeBinaryOperator(@NotNull IElementType token) {
+ public static boolean isCommutativeOperator(@NotNull IElementType token) {
return !(token.equals(JavaTokenType.MINUS) ||
token.equals(JavaTokenType.DIV) ||
token.equals(JavaTokenType.PERC) ||
@@ -185,8 +185,8 @@ public class ParenthesesUtils {
removeParensFromPostfixExpression(postfixExpression, ignoreClarifyingParentheses);
}
if (expression instanceof PsiPolyadicExpression) {
- final PsiPolyadicExpression binaryExpression = (PsiPolyadicExpression)expression;
- removeParensFromPolyadicExpression(binaryExpression, ignoreClarifyingParentheses);
+ final PsiPolyadicExpression polyadicExpression = (PsiPolyadicExpression)expression;
+ removeParensFromPolyadicExpression(polyadicExpression, ignoreClarifyingParentheses);
}
if (expression instanceof PsiInstanceOfExpression) {
final PsiInstanceOfExpression instanceofExpression = (PsiInstanceOfExpression)expression;
@@ -225,12 +225,15 @@ public class ParenthesesUtils {
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 PsiArrayAccessExpression arrayAccessExpression = (PsiArrayAccessExpression)parent;
+ if (parenthesizedExpression == arrayAccessExpression.getIndexExpression()) {
+ // 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);
@@ -245,15 +248,15 @@ public class ParenthesesUtils {
}
else if (parentPrecedence == childPrecedence) {
if (parentExpression instanceof PsiPolyadicExpression && body instanceof PsiPolyadicExpression) {
- final PsiPolyadicExpression parentBinaryExpression = (PsiPolyadicExpression)parentExpression;
- final IElementType parentOperator = parentBinaryExpression.getOperationTokenType();
- final PsiPolyadicExpression bodyBinaryExpression = (PsiPolyadicExpression)body;
- final IElementType bodyOperator = bodyBinaryExpression.getOperationTokenType();
- final PsiType parentType = parentBinaryExpression.getType();
+ final PsiPolyadicExpression parentPolyadicExpression = (PsiPolyadicExpression)parentExpression;
+ final IElementType parentOperator = parentPolyadicExpression.getOperationTokenType();
+ final PsiPolyadicExpression bodyPolyadicExpression = (PsiPolyadicExpression)body;
+ final IElementType bodyOperator = bodyPolyadicExpression.getOperationTokenType();
+ final PsiType parentType = parentPolyadicExpression.getType();
final PsiType bodyType = body.getType();
if (parentType != null && parentType.equals(bodyType) && parentOperator.equals(bodyOperator)) {
- final PsiExpression[] parentOperands = parentBinaryExpression.getOperands();
- if (PsiTreeUtil.isAncestor(parentOperands[0], body, true) || isCommutativeBinaryOperator(bodyOperator)) {
+ final PsiExpression[] parentOperands = parentPolyadicExpression.getOperands();
+ if (PsiTreeUtil.isAncestor(parentOperands[0], body, true) || isCommutativeOperator(bodyOperator)) {
// use addAfter() + delete() instead of replace() to
// workaround automatic insertion of parentheses by psi
final PsiExpression newExpression = (PsiExpression)parent.addAfter(body, parenthesizedExpression);
@@ -407,12 +410,18 @@ public class ParenthesesUtils {
if (child == null) {
return true;
}
+ if (parent instanceof PsiArrayAccessExpression) {
+ final PsiArrayAccessExpression arrayAccessExpression = (PsiArrayAccessExpression)parent;
+ final PsiExpression indexExpression = arrayAccessExpression.getIndexExpression();
+ if (expression == indexExpression) {
+ return false;
+ }
+ }
return areParenthesesNeeded(child, (PsiExpression)parent);
}
public static boolean areParenthesesNeeded(PsiExpression expression, PsiExpression parentExpression) {
- if (parentExpression instanceof PsiParenthesizedExpression || parentExpression instanceof PsiArrayAccessExpression ||
- parentExpression instanceof PsiArrayInitializerExpression) {
+ if (parentExpression instanceof PsiParenthesizedExpression || parentExpression instanceof PsiArrayInitializerExpression) {
return false;
}
final int parentPrecedence = getPrecedence(parentExpression);
@@ -451,7 +460,7 @@ public class ParenthesesUtils {
final PsiExpression[] parentOperands = parentPolyadicExpression.getOperands();
if (!PsiTreeUtil.isAncestor(parentOperands[0], expression, false)) {
final IElementType parentOperator = parentPolyadicExpression.getOperationTokenType();
- if (!isCommutativeBinaryOperator(parentOperator)) {
+ if (!isCommutativeOperator(parentOperator)) {
return true;
}
}