private void reportIssue(BinaryExpressionTree bet, boolean leftIsZero, String message, String itemName) { if ((leftIsZero && bet.is(Tree.Kind.GREATER_THAN, Tree.Kind.LESS_THAN_OR_EQUAL_TO)) || (!leftIsZero && bet.is(Tree.Kind.LESS_THAN, Tree.Kind.GREATER_THAN_OR_EQUAL_TO))) { reportIssue(bet, String.format(message, itemName)); } }
private void reportIssue(BinaryExpressionTree bet, boolean leftIsZero, String message, String itemName) { if ((leftIsZero && bet.is(Tree.Kind.GREATER_THAN, Tree.Kind.LESS_THAN_OR_EQUAL_TO)) || (!leftIsZero && bet.is(Tree.Kind.LESS_THAN, Tree.Kind.GREATER_THAN_OR_EQUAL_TO))) { reportIssue(bet, String.format(message, itemName)); } }
@Override public void visitBinaryExpression(BinaryExpressionTree tree) { if (tree.is(Tree.Kind.CONDITIONAL_AND, Tree.Kind.CONDITIONAL_OR)) { blame.add(tree.operatorToken()); } super.visitBinaryExpression(tree); } }
@Override public final void visitBinaryExpression(BinaryExpressionTree tree) { super.visitBinaryExpression(tree); if (tree.is(Tree.Kind.EQUAL_TO, Tree.Kind.NOT_EQUAL_TO)) { checkEqualityExpression(tree); } }
private static boolean isEmptyComparison(BinaryExpressionTree tree) { boolean result; if (isEqualityExpression(tree)) { result = isZero(tree.leftOperand()) || isZero(tree.rightOperand()); } else if (tree.is(Kind.GREATER_THAN_OR_EQUAL_TO) || tree.is(Kind.LESS_THAN)) { result = isZero(tree.leftOperand()) || isOne(tree.rightOperand()); } else if (tree.is(Kind.GREATER_THAN) || tree.is(Kind.LESS_THAN_OR_EQUAL_TO)) { result = isOne(tree.leftOperand()) || isZero(tree.rightOperand()); } else { result = false; } return result; }
@Override public void visitBinaryExpression(BinaryExpressionTree tree) { boolean continueVisit = true; if (tree.is(Tree.Kind.DIVIDE) && isIntOrLong(tree.symbolType())) { continueVisit = checkIntegerDivisionInsideFloatingPointExpression(tree); } if (continueVisit) { super.visitBinaryExpression(tree); } }
private boolean isNanTest(BinaryExpressionTree tree) { Type leftOperandType = tree.leftOperand().symbolType(); if (tree.is(Tree.Kind.NOT_EQUAL_TO) && (leftOperandType.isPrimitive(Type.Primitives.FLOAT) || leftOperandType.isPrimitive(Type.Primitives.DOUBLE))) { return true; } return false; }
private static boolean isLeftShiftOnOne(BinaryExpressionTree tree) { // 1 << 1 is used for bit masks construction and should be excluded. if (tree.is(Tree.Kind.LEFT_SHIFT) && tree.leftOperand().is(Tree.Kind.INT_LITERAL) && tree.rightOperand().is(Tree.Kind.INT_LITERAL)) { String left = ((LiteralTree) tree.leftOperand()).value(); String right = ((LiteralTree) tree.rightOperand()).value(); if ("1".equals(right) && "1".equals(left)) { return true; } } return false; }
private static boolean isLeftShiftOnOne(BinaryExpressionTree tree) { // 1 << 1 is used for bit masks construction and should be excluded. if (tree.is(Tree.Kind.LEFT_SHIFT) && tree.leftOperand().is(Tree.Kind.INT_LITERAL) && tree.rightOperand().is(Tree.Kind.INT_LITERAL)) { String left = ((LiteralTree) tree.leftOperand()).value(); String right = ((LiteralTree) tree.rightOperand()).value(); if ("1".equals(right) && "1".equals(left)) { return true; } } return false; }
private boolean isLeftShiftOnOne(BinaryExpressionTree tree) { // 1 << 1 is used for bit masks construction and should be excluded. if (tree.is(Tree.Kind.LEFT_SHIFT) && tree.leftOperand().is(Tree.Kind.INT_LITERAL) && tree.rightOperand().is(Tree.Kind.INT_LITERAL)) { String left = ((LiteralTree) tree.leftOperand()).value(); String right = ((LiteralTree) tree.rightOperand()).value(); if ("1".equals(right) && "1".equals(left)) { return true; } } return false; }
@Override public void visitBinaryExpression(BinaryExpressionTree tree) { if (tree.is(Tree.Kind.EQUAL_TO, Tree.Kind.NOT_EQUAL_TO) && (isGetClassOnArgument(tree.leftOperand()) || isGetClassOnArgument(tree.rightOperand()))) { typeChecked = true; } else { super.visitBinaryExpression(tree); } }
@Override public void visitBinaryExpression(BinaryExpressionTree tree) { if (tree.is(Tree.Kind.EQUAL_TO, Tree.Kind.NOT_EQUAL_TO)) { checkOperand(tree.leftOperand()); checkOperand(tree.rightOperand()); } super.visitBinaryExpression(tree); }
@Override public void visitBinaryExpression(BinaryExpressionTree tree) { if (tree.is(Tree.Kind.EQUAL_TO, Tree.Kind.NOT_EQUAL_TO)) { checkOperand(tree.leftOperand()); checkOperand(tree.rightOperand()); } super.visitBinaryExpression(tree); }
@Override public void visitBinaryExpression(BinaryExpressionTree tree) { if (tree.is(Tree.Kind.EQUAL_TO, Tree.Kind.NOT_EQUAL_TO) && (isGetClassOnArgument(tree.leftOperand()) || isGetClassOnArgument(tree.rightOperand()))) { typeChecked = true; } else { super.visitBinaryExpression(tree); } }
@Override public void visitBinaryExpression(BinaryExpressionTree tree) { if (tree.is(Tree.Kind.PLUS)) { checkPathDelimiter(tree.leftOperand()); checkPathDelimiter(tree.rightOperand()); } super.visitBinaryExpression(tree); }
@Override public void visitBinaryExpression(BinaryExpressionTree tree) { if (tree.is(Tree.Kind.PLUS)) { checkPathDelimiter(tree.leftOperand()); checkPathDelimiter(tree.rightOperand()); } super.visitBinaryExpression(tree); }
@Override public void visitBinaryExpression(BinaryExpressionTree binaryExpression) { // check that an @Optional is not compared to "null" if (binaryExpression.is(Tree.Kind.EQUAL_TO, Tree.Kind.NOT_EQUAL_TO)) { ExpressionTree left = binaryExpression.leftOperand(); ExpressionTree right = binaryExpression.rightOperand(); if ((isOptional(left) && isNull(right)) || (isNull(left) && isOptional(right))) { context.reportIssue(this, binaryExpression, "Remove this null-check of an \"Optional\"."); } } super.visitBinaryExpression(binaryExpression); }
@Override public void visitBinaryExpression(BinaryExpressionTree tree) { super.visitBinaryExpression(tree); if (tree.is(Tree.Kind.EQUAL_TO, Tree.Kind.NOT_EQUAL_TO)) { Type leftOpType = tree.leftOperand().symbolType(); Type rightOpType = tree.rightOperand().symbolType(); if (!isExcluded(leftOpType, rightOpType) && hasObjectOperand(leftOpType, rightOpType)) { context.addIssue(tree, this, "Change this comparison to use the equals method."); } } }
@Override public void visitNode(Tree tree) { BinaryExpressionTree binaryExpressionTree = (BinaryExpressionTree) tree; if (binaryExpressionTree.is(Tree.Kind.CONDITIONAL_AND, Tree.Kind.CONDITIONAL_OR) && isIndirectEquality(binaryExpressionTree)) { binaryExpressionTree = (BinaryExpressionTree) binaryExpressionTree.leftOperand(); } if ((hasFloatingType(binaryExpressionTree.leftOperand()) || hasFloatingType(binaryExpressionTree.rightOperand())) && !isNanTest(binaryExpressionTree)) { addIssue(binaryExpressionTree, "Equality tests should not be made with floating point values."); } }