@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; }
private static boolean shouldUseUnderscore(String literalValue) { String value = LiteralUtils.trimLongSuffix(literalValue); Base base = Base.ofLiteralValue(value); return value.length() >= (base.minimalLength + base.prefix.length()); } }
@CheckForNull public static Integer intLiteralValue(ExpressionTree expression) { if (expression.is(Tree.Kind.INT_LITERAL)) { return intLiteralValue((LiteralTree) expression); } if (expression.is(Tree.Kind.UNARY_MINUS, Tree.Kind.UNARY_PLUS)) { UnaryExpressionTree unaryExp = (UnaryExpressionTree) expression; Integer subExpressionIntValue = intLiteralValue(unaryExp.expression()); return expression.is(Tree.Kind.UNARY_MINUS) ? minus(subExpressionIntValue) : subExpressionIntValue; } return null; }
private static boolean setValueIsSameAsDefaultValue(@Nullable Object defaultValue, Tree valueSet) { if (valueSet.is(Tree.Kind.STRING_LITERAL)) { return LiteralUtils.trimQuotes(((LiteralTree) valueSet).value()).equals(defaultValue); } else if (valueSet.is(Tree.Kind.INT_LITERAL)) { Integer intLiteralValue = LiteralUtils.intLiteralValue((LiteralTree) valueSet); return intLiteralValue != null && intLiteralValue.equals(defaultValue); } return false; }
private static String stringLiteralValue(Object object) { if (object instanceof LiteralTree) { LiteralTree literal = (LiteralTree) object; return LiteralUtils.trimQuotes(literal.value()); } return null; } }
private static boolean isZeroLiteralValue(@Nullable ExpressionTree expressionTree) { if (expressionTree == null) { return false; } Integer integer = LiteralUtils.intLiteralValue(expressionTree); return integer != null && integer == 0; }
private static boolean isLiteralValue(ExpressionTree tree, long value) { Long evaluatedValue = LiteralUtils.longLiteralValue(tree); return evaluatedValue != null && evaluatedValue == value; }
@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(); } }
@Override public void visitWhileStatement(WhileStatementTree tree) { if (LiteralUtils.isTrue(tree.condition())) { checkLoopWithAlwaysTrueCondition(context, tree); } }
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; } }
private String stringLiteralValue(Object object) { if (object instanceof LiteralTree) { LiteralTree literal = (LiteralTree) object; return LiteralUtils.trimQuotes(literal.value()); } return null; } }
private static boolean isZeroLiteralValue(@Nullable ExpressionTree expressionTree) { if (expressionTree == null) { return false; } Integer integer = LiteralUtils.intLiteralValue(expressionTree); return integer != null && integer == 0; }
private static boolean setValueIsSameAsDefaultValue(@Nullable Object defaultValue, Tree valueSet) { if (valueSet.is(Tree.Kind.STRING_LITERAL)) { return LiteralUtils.trimQuotes(((LiteralTree) valueSet).value()).equals(defaultValue); } else if (valueSet.is(Tree.Kind.INT_LITERAL)) { Integer intLiteralValue = LiteralUtils.intLiteralValue((LiteralTree) valueSet); return intLiteralValue != null && intLiteralValue.equals(defaultValue); } return false; }
private static boolean isIntegralOne(ExpressionTree tree) { Long value = LiteralUtils.longLiteralValue(tree); return value != null && value == 1; }
@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 reportIfTrue(ExpressionTree toUnderline) { if (LiteralUtils.isTrue(toUnderline)) { reportIssue(toUnderline, "Disable object deserialization."); } } }
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; } }
private static String stringLiteralValue(Object object) { if (object instanceof LiteralTree) { LiteralTree literal = (LiteralTree) object; return LiteralUtils.trimQuotes(literal.value()); } 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; }
private static Integer eval(ExpressionTree expression, Iterable<ForLoopInitializer> initializers) { Integer intLiteralValue = LiteralUtils.intLiteralValue(expression); if (intLiteralValue == null) { for (ForLoopInitializer initializer : initializers) { if (initializer.hasSameIdentifier(expression)) { intLiteralValue = initializer.value(); } } } return intLiteralValue; }