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