private static boolean isLiteralValue(ExpressionTree tree, long value) { Long evaluatedValue = LiteralUtils.longLiteralValue(tree); return evaluatedValue != null && evaluatedValue == value; }
private static boolean isIntegralOne(ExpressionTree tree) { Long value = LiteralUtils.longLiteralValue(tree); return value != null && value == 1; }
private static boolean isIntegralOne(ExpressionTree tree) { Long value = LiteralUtils.longLiteralValue(tree); return value != null && value == 1; }
private static boolean isLiteralValue(ExpressionTree tree, long value) { Long evaluatedValue = LiteralUtils.longLiteralValue(tree); return evaluatedValue != null && evaluatedValue == value; }
private boolean isLiteralValue(ExpressionTree tree, long value) { Long evaluatedValue = LiteralUtils.longLiteralValue(tree); return evaluatedValue != null && evaluatedValue.longValue() == value; }
@Override public void visitNode(Tree tree) { Long identityElement = getBitwiseOperationIdentityElement(tree); Long evaluatedExpression = LiteralUtils.longLiteralValue(getExpression(tree)); if (evaluatedExpression != null && identityElement.equals(evaluatedExpression)) { addIssue(tree, "Remove this silly bit operation."); } }
private void checkShift(ExpressionTree tree, ExpressionTree shift, @Nullable String identifier) { Long literalValue = LiteralUtils.longLiteralValue(shift); if (literalValue != null) { int numericalBase = getNumericalBase(tree); long numberBits = literalValue.longValue(); long reducedNumberBits = numberBits % numericalBase; if (isInvalidShift(reducedNumberBits, numberBits, numericalBase)) { addIssue(tree, getMessage(reducedNumberBits, reducedNumberBits, numericalBase, identifier)); } } }
private void checkShift(ExpressionTree tree, ExpressionTree shift, @Nullable String identifier, SyntaxToken operatorToken, int treeIndex) { Long literalValue = LiteralUtils.longLiteralValue(shift); if (literalValue != null) { int numericalBase = getNumericalBase(tree); long reducedNumberBits = literalValue % numericalBase; if (isInvalidShift(reducedNumberBits, literalValue, numericalBase, operatorToken, treeIndex)) { reportIssue(operatorToken, getMessage(reducedNumberBits, numericalBase, identifier)); } } }
private void checkShift(ExpressionTree tree, ExpressionTree shift, @Nullable String identifier, SyntaxToken operatorToken, int treeIndex) { Long literalValue = LiteralUtils.longLiteralValue(shift); if (literalValue != null) { int numericalBase = getNumericalBase(tree); long reducedNumberBits = literalValue % numericalBase; if (isInvalidShift(reducedNumberBits, literalValue, numericalBase, operatorToken, treeIndex)) { reportIssue(operatorToken, getMessage(reducedNumberBits, numericalBase, identifier)); } } }
private static boolean isDefault(ExpressionTree expression, boolean isPrimitive) { if(!isPrimitive) { return expression.is(Kind.NULL_LITERAL); } switch (expression.kind()) { case CHAR_LITERAL: String charValue = ((LiteralTree) expression).value(); return "'\\u0000'".equals(charValue) || "'\\0'".equals(charValue); case BOOLEAN_LITERAL: return LiteralUtils.isFalse(expression); case INT_LITERAL: case LONG_LITERAL: Long value = LiteralUtils.longLiteralValue(expression); return value != null && value == 0; case FLOAT_LITERAL: case DOUBLE_LITERAL: return Double.doubleToLongBits(Double.valueOf(((LiteralTree) expression).value())) == 0; default: return false; } }
@Override public void visitNode(Tree tree) { BinaryExpressionTree binaryTree = (BinaryExpressionTree) tree; if (tree.is(Tree.Kind.GREATER_THAN)) { checkForIssue(tree, binaryTree.leftOperand(), LiteralUtils.longLiteralValue(binaryTree.rightOperand())); } else { checkForIssue(tree, binaryTree.rightOperand(), LiteralUtils.longLiteralValue(binaryTree.leftOperand())); } }
@Override public void visitNode(Tree tree) { BinaryExpressionTree binaryTree = (BinaryExpressionTree) tree; if (tree.is(Tree.Kind.GREATER_THAN)) { checkForIssue(tree, binaryTree.leftOperand(), LiteralUtils.longLiteralValue(binaryTree.rightOperand())); } else { checkForIssue(tree, binaryTree.rightOperand(), LiteralUtils.longLiteralValue(binaryTree.leftOperand())); } }
@Nullable private static Object getDefaultValueFromTree(@Nullable ExpressionTree expressionTree) { if(expressionTree == null) { return null; } if (expressionTree.is(Tree.Kind.STRING_LITERAL)) { return LiteralUtils.trimQuotes(((LiteralTree) expressionTree).value()); } if (expressionTree.is(Tree.Kind.INT_LITERAL)) { return LiteralUtils.intLiteralValue(expressionTree); } if (expressionTree.is(Tree.Kind.LONG_LITERAL)) { return LiteralUtils.longLiteralValue(expressionTree); } return null; }
@Nullable private static Object getDefaultValueFromTree(@Nullable ExpressionTree expressionTree) { if(expressionTree == null) { return null; } if (expressionTree.is(Tree.Kind.STRING_LITERAL)) { return LiteralUtils.trimQuotes(((LiteralTree) expressionTree).value()); } if (expressionTree.is(Tree.Kind.INT_LITERAL)) { return LiteralUtils.intLiteralValue(expressionTree); } if (expressionTree.is(Tree.Kind.LONG_LITERAL)) { return LiteralUtils.longLiteralValue(expressionTree); } return null; }
@Override public void visitNode(Tree tree) { ExpressionTree expression; SyntaxToken operatorToken; if (tree.is(Kind.OR, Kind.XOR, Kind.AND)) { BinaryExpressionTree binary = (BinaryExpressionTree) tree; expression = binary.rightOperand(); operatorToken = binary.operatorToken(); } else { AssignmentExpressionTree assignment = (AssignmentExpressionTree) tree; expression = assignment.expression(); operatorToken = assignment.operatorToken(); } Long evaluatedExpression = LiteralUtils.longLiteralValue(expression); if (evaluatedExpression != null && getBitwiseOperationIdentityElement(tree).equals(evaluatedExpression)) { reportIssue(operatorToken, "Remove this silly bit operation."); } }
@Override public void visitNode(Tree tree) { ExpressionTree expression; SyntaxToken operatorToken; if (tree.is(Kind.OR, Kind.XOR, Kind.AND)) { BinaryExpressionTree binary = (BinaryExpressionTree) tree; expression = binary.rightOperand(); operatorToken = binary.operatorToken(); } else { AssignmentExpressionTree assignment = (AssignmentExpressionTree) tree; expression = assignment.expression(); operatorToken = assignment.operatorToken(); } Long evaluatedExpression = LiteralUtils.longLiteralValue(expression); if (evaluatedExpression != null && getBitwiseOperationIdentityElement(tree).equals(evaluatedExpression)) { reportIssue(operatorToken, "Remove this silly bit operation."); } }
@CheckForNull final SymbolicValue retrieveSymbolicValue(ExpressionTree tree) { ExpressionTree currentTree = tree; if (isSuperOrThisMemberSelect(tree)) { currentTree = ((MemberSelectExpressionTree) currentTree).identifier(); } if (currentTree.is(Tree.Kind.IDENTIFIER)) { IdentifierTree identifierTree = (IdentifierTree) currentTree; Symbol symbol = identifierTree.symbol(); if (symbol.isVariableSymbol()) { return new SymbolicValue.SymbolicVariableValue((Symbol.VariableSymbol) symbol); } } else { Long value = LiteralUtils.longLiteralValue(currentTree); if (value != null) { return new SymbolicValue.SymbolicLongValue(value); } } return null; }
@Override public ProgramState checkPostStatement(CheckerContext context, Tree syntaxNode) { // TODO handle float and double switch (syntaxNode.kind()) { case INT_LITERAL: return handleNumericalLiteral(context, LiteralUtils.intLiteralValue((ExpressionTree) syntaxNode)); case LONG_LITERAL: return handleNumericalLiteral(context, LiteralUtils.longLiteralValue((ExpressionTree) syntaxNode)); case UNARY_MINUS: case UNARY_PLUS: return handleNumericalLiteral(context, (UnaryExpressionTree) syntaxNode); case IDENTIFIER: return handleNumericalConstant(context, (IdentifierTree) syntaxNode); case METHOD_INVOCATION: return handleMinMaxInvocation(context, (MethodInvocationTree) syntaxNode); default: return context.getState(); } }
private void checkIndexOfInvocation(MethodInvocationTree mit, ExpressionTree other) { if (INDEX_OF_METHOD.matches(mit)) { String replaceMessage; ExpressionTree firstPar = mit.arguments().get(0); if (firstPar.is(Tree.Kind.STRING_LITERAL)) { replaceMessage = ((LiteralTree) firstPar).value(); } else if (firstPar.is(Tree.Kind.IDENTIFIER)) { replaceMessage = ((IdentifierTree) firstPar).name(); } else { replaceMessage = "xxx"; } Long otherValue = LiteralUtils.longLiteralValue(other); if (otherValue != null && otherValue != -1 && otherValue != 0) { reportIssue(ExpressionUtils.methodName(mit), "Use \".indexOf(" + replaceMessage + ",n) > -1\" instead."); } } }
private void checkIndexOfInvocation(MethodInvocationTree mit, ExpressionTree other) { if (INDEX_OF_METHOD.matches(mit)) { String replaceMessage; ExpressionTree firstPar = mit.arguments().get(0); if (firstPar.is(Tree.Kind.STRING_LITERAL)) { replaceMessage = ((LiteralTree) firstPar).value(); } else if (firstPar.is(Tree.Kind.IDENTIFIER)) { replaceMessage = ((IdentifierTree) firstPar).name(); } else { replaceMessage = "xxx"; } Long otherValue = LiteralUtils.longLiteralValue(other); if (otherValue != null && otherValue != -1 && otherValue != 0) { reportIssue(ExpressionUtils.methodName(mit), "Use \".indexOf(" + replaceMessage + ",n) > -1\" instead."); } } }