diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/dataflow/ConstantValueVariableUseInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/dataflow/ConstantValueVariableUseInspection.java
index 17a7c31f4e27..189ed68fb9b2 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/dataflow/ConstantValueVariableUseInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/dataflow/ConstantValueVariableUseInspection.java
@@ -26,6 +26,7 @@ import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.InspectionGadgetsFix;
import com.siyeh.ig.PsiReplacementUtil;
import com.siyeh.ig.psiutils.ExpressionUtils;
+import com.siyeh.ig.psiutils.ParenthesesUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -58,7 +59,6 @@ public class ConstantValueVariableUseInspection extends BaseInspection {
myText = text;
}
-
@Override
@NotNull
public String getName() {
@@ -121,25 +121,28 @@ public class ConstantValueVariableUseInspection extends BaseInspection {
if (body == null) {
return false;
}
- if (!(condition instanceof PsiBinaryExpression)) {
+ if (!(condition instanceof PsiPolyadicExpression)) {
return false;
}
- final PsiBinaryExpression binaryExpression =
- (PsiBinaryExpression)condition;
- final IElementType tokenType =
- binaryExpression.getOperationTokenType();
- final PsiExpression lhs = binaryExpression.getLOperand();
- final PsiExpression rhs = binaryExpression.getROperand();
+ final PsiPolyadicExpression polyadicExpression = (PsiPolyadicExpression)condition;
+ final IElementType tokenType = polyadicExpression.getOperationTokenType();
if (JavaTokenType.ANDAND == tokenType) {
- return checkCondition(lhs, body) ||
- checkCondition(rhs, body);
+ for (PsiExpression operand : polyadicExpression.getOperands()) {
+ if (checkCondition(operand, body)) {
+ return true;
+ }
+ }
+ return false;
}
if (JavaTokenType.EQEQ != tokenType) {
return false;
}
- if (rhs == null) {
+ final PsiExpression[] operands = polyadicExpression.getOperands();
+ if (operands.length != 2) {
return false;
}
+ final PsiExpression lhs = operands[0];
+ final PsiExpression rhs = operands[1];
if (PsiUtil.isConstantExpression(lhs)) {
return checkConstantValueVariableUse(rhs, lhs, body);
}
@@ -162,6 +165,7 @@ public class ConstantValueVariableUseInspection extends BaseInspection {
return false;
}
}
+ expression = ParenthesesUtils.stripParentheses(expression);
if (!(expression instanceof PsiReferenceExpression)) {
return false;
}
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/dataflow/constant_value_variable_use/ConstantValueVariableUse.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/dataflow/constant_value_variable_use/ConstantValueVariableUse.java
index 9764bc816d83..8c24aab1d08b 100644
--- a/plugins/InspectionGadgets/test/com/siyeh/igtest/dataflow/constant_value_variable_use/ConstantValueVariableUse.java
+++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/dataflow/constant_value_variable_use/ConstantValueVariableUse.java
@@ -6,7 +6,7 @@ public class ConstantValueVariableUse {
public static void test(double number) {
if (number == -0.0) { // is true for -0.0
f(number);
- }8
+ }
if (number == 1.0) {
f(number);
}
@@ -16,4 +16,10 @@ public class ConstantValueVariableUse {
System.out.println("signedZero = " + signedZero);
}
+ void m(int i) {
+ if ((i) == 2 && true && true) { // polyadic
+ f(i);
+ }
+ }
+
}
\ No newline at end of file