private static SyntaxToken operatorToken(Tree tree) { if (tree instanceof BinaryExpressionTree) { return ((BinaryExpressionTree) tree).operatorToken(); } return ((AssignmentExpressionTree) tree).operatorToken(); }
private static SyntaxToken operatorToken(Tree tree) { if (tree instanceof BinaryExpressionTree) { return ((BinaryExpressionTree) tree).operatorToken(); } return ((AssignmentExpressionTree) tree).operatorToken(); }
@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 void visitBinaryExpression(BinaryExpressionTree tree) { if (tree.is(Tree.Kind.CONDITIONAL_AND, Tree.Kind.CONDITIONAL_OR)) { blame.add(tree.operatorToken()); } super.visitBinaryExpression(tree); } }
@Override public void visitBinaryExpression(BinaryExpressionTree tree) { Tree.Kind peek = stack.peek(); Tree.Kind kind = tree.kind(); if (requiresParenthesis(peek, kind)) { raiseIssue(tree.operatorToken().line(), tree); } stack.push(kind); super.visitBinaryExpression(tree); stack.pop(); }
@Override public void visitBinaryExpression(BinaryExpressionTree tree) { Tree.Kind peek = stack.peek(); Tree.Kind kind = tree.kind(); if (requiresParenthesis(peek, kind)) { raiseIssue(tree.operatorToken().line(), tree); } stack.push(kind); super.visitBinaryExpression(tree); stack.pop(); }
@Override public void visitBinaryExpression(BinaryExpressionTree tree) { Tree.Kind peek = stack.peek(); Tree.Kind kind = tree.kind(); if (requiresParenthesis(peek, kind)) { raiseIssue(tree.operatorToken().line(), tree); } stack.push(kind); super.visitBinaryExpression(tree); stack.pop(); }
private JavaType binaryExpressionType(BinaryExpressionTree tree, JavaType left, JavaType right) { JavaSymbol symbol = resolve.findMethod(semanticModel.getEnv(tree), symbols.predefClass.type, tree.operatorToken().text(), ImmutableList.of(left, right)).symbol(); if (symbol.kind != JavaSymbol.MTH) { // not found return Symbols.unknownType; } return ((MethodJavaType) symbol.type).resultType; }
@Override public void visitNode(Tree tree) { BinaryExpressionTree binaryExpressionTree = (BinaryExpressionTree) tree; if (isBoolean(binaryExpressionTree.leftOperand())) { String operator = binaryExpressionTree.operatorToken().text(); String replacement = REPLACEMENTS.get(operator); addIssue(tree, "Correct this \"" + operator + "\" to \"" + replacement + "\"."); } }
private JavaType binaryExpressionType(BinaryExpressionTree tree, JavaType left, JavaType right) { JavaSymbol symbol = resolve.findMethod(semanticModel.getEnv(tree), symbols.predefClass.type, tree.operatorToken().text(), ImmutableList.of(left, right)).symbol(); if (symbol.kind != JavaSymbol.MTH) { // not found return Symbols.unknownType; } return ((MethodJavaType) symbol.type).resultType; }
@Override public void visitNode(Tree tree) { ExpressionTree expression = ExpressionUtils.skipParentheses(((UnaryExpressionTree) tree).expression()); if (expression.is( Tree.Kind.EQUAL_TO, Tree.Kind.NOT_EQUAL_TO, Tree.Kind.LESS_THAN, Tree.Kind.GREATER_THAN, Tree.Kind.LESS_THAN_OR_EQUAL_TO, Tree.Kind.GREATER_THAN_OR_EQUAL_TO)) { context.reportIssue(this, tree, "Use the opposite operator (\"" + OPERATORS.get(((BinaryExpressionTree) expression).operatorToken().text()) + "\") instead."); } }
@Override public void visitNode(Tree tree) { ExpressionTree expression = ExpressionUtils.skipParentheses(((UnaryExpressionTree) tree).expression()); if (expression.is( Tree.Kind.EQUAL_TO, Tree.Kind.NOT_EQUAL_TO, Tree.Kind.LESS_THAN, Tree.Kind.GREATER_THAN, Tree.Kind.LESS_THAN_OR_EQUAL_TO, Tree.Kind.GREATER_THAN_OR_EQUAL_TO)) { context.reportIssue(this, tree, "Use the opposite operator (\"" + OPERATORS.get(((BinaryExpressionTree) expression).operatorToken().text()) + "\") instead."); } }
@Override public void visitNode(Tree tree) { BinaryExpressionTree binaryExpression = (BinaryExpressionTree) tree; if (isInvalidTest(binaryExpression.leftOperand(), binaryExpression.rightOperand())) { reportIssue(binaryExpression.operatorToken(), "Only the sign of the result should be examined."); } }
@Override public void visitNode(Tree tree) { BinaryExpressionTree binaryExpression = (BinaryExpressionTree) tree; if (isInvalidTest(binaryExpression.leftOperand(), binaryExpression.rightOperand())) { reportIssue(binaryExpression.operatorToken(), "Only the sign of the result should be examined."); } }
@Override public void visitNode(Tree tree) { BinaryExpressionTree binaryExpressionTree = (BinaryExpressionTree) tree; if (hasEquivalentOperand(binaryExpressionTree)) { addIssue(binaryExpressionTree.rightOperand(), "Identical sub-expressions on both sides of operator \"" + binaryExpressionTree.operatorToken().text() + "\""); } }
@Override public void visitBinaryExpression(BinaryExpressionTree tree) { addKind(tree.leftOperand(), UastNode.Kind.LEFT_OPERAND); addKind(tree.operatorToken(), UastNode.Kind.OPERATOR); addKind(tree.rightOperand(), UastNode.Kind.RIGHT_OPERAND); super.visitBinaryExpression(tree); }
@Override protected void checkEqualityExpression(BinaryExpressionTree tree) { Type leftOpType = tree.leftOperand().symbolType(); Type rightOpType = tree.rightOperand().symbolType(); if (!isNullComparison(leftOpType, rightOpType) && (isStringType(leftOpType, rightOpType) || isBoxedType(leftOpType, rightOpType))) { reportIssue(tree.operatorToken()); } }
@Override protected void checkEqualityExpression(BinaryExpressionTree tree) { Type leftOpType = tree.leftOperand().symbolType(); Type rightOpType = tree.rightOperand().symbolType(); if (!isNullComparison(leftOpType, rightOpType) && (isStringType(leftOpType, rightOpType) || isBoxedType(leftOpType, rightOpType))) { reportIssue(tree.operatorToken()); } }
private void checkModulusAndIntLiteral(ExpressionTree operand1, ExpressionTree operand2) { if (operand1.is(Tree.Kind.REMAINDER)) { BinaryExpressionTree modulusExp = (BinaryExpressionTree) operand1; Integer intValue = LiteralUtils.intLiteralValue(operand2); ExpressionTree leftOperand = modulusExp.leftOperand(); ExpressionTree rightOperand = modulusExp.rightOperand(); boolean usesMethodParam = isMethodParameter(leftOperand) || isMethodParameter(rightOperand); boolean usesSize = isSizeAccessor(leftOperand) || isSizeAccessor(rightOperand); if (intValue != null && intValue != 0 && usesMethodParam && !usesSize) { String sign = intValue > 0 ? "positive" : "negative"; reportIssue(modulusExp.operatorToken(), "The results of this modulus operation may not be " + sign + "."); } } }
@Override protected void checkEqualityExpression(BinaryExpressionTree tree) { ExpressionTree leftExpression = tree.leftOperand(); ExpressionTree rightExpression = tree.rightOperand(); Type leftOpType = leftExpression.symbolType(); Type rightOpType = rightExpression.symbolType(); if (!isExcluded(leftOpType, rightOpType) && hasObjectOperand(leftOpType, rightOpType) && neitherIsThis(leftExpression, rightExpression) && bothImplementsEqualsMethod(leftOpType, rightOpType) && neitherIsPublicStaticFinal(leftExpression, rightExpression)) { reportIssue(tree.operatorToken()); } }