private static boolean isBooleanLiteral(ExpressionTree tree) { return tree.getKind() == Kind.BOOLEAN_LITERAL; }
private static boolean isNull(ExpressionTree tree) { return tree.getKind() == Kind.NULL_LITERAL; }
@Override public boolean matches(ExpressionTree expressionTree, VisitorState state) { if (expressionTree.getKind() == Tree.Kind.BOOLEAN_LITERAL) { return value == (Boolean) (((LiteralTree) expressionTree).getValue()); } return false; } };
private static boolean isSuper(ExpressionTree tree) { return tree.getKind() == Kind.IDENTIFIER && ((IdentifierTree) tree).getName().contentEquals("super"); } }
@Override public boolean matches(ExpressionTree expressionTree, VisitorState state) { if (expressionTree.getKind() == Kind.INT_LITERAL) { return ((Integer) ((LiteralTree) expressionTree).getValue()).equals(value); } return false; } };
@Nullable private ExpressionTree getEffectiveTree(ExpressionTree tree) { return tree.getKind() == Kind.IDENTIFIER ? effectivelyFinalValues.get(ASTHelpers.getSymbol(tree)) : tree; } }
@Override public Boolean visitReturn(ReturnTree node, Void unused) { return node.getExpression().getKind() == NULL_LITERAL; }
private boolean match(ExpressionTree a, ExpressionTree b, VisitorState state) { return PROTO_STRING_METHOD.matches(a, state) && b.getKind() != Kind.NULL_LITERAL; } }
private static boolean isIdentifierWithName(ExpressionTree tree, String name) { return tree.getKind() == IDENTIFIER && ((IdentifierTree) tree).getName().contentEquals(name); }
@Override public boolean matches(ExpressionTree thisExpression, VisitorState state) { if (thisExpression.getKind().equals(Kind.IDENTIFIER)) { IdentifierTree identifier = (IdentifierTree) thisExpression; if (identifier.getName().contentEquals("this")) { return true; } } return false; } }
/** * If the given expression is a call to a method checking the nullity of its first parameter, and * otherwise returns that parameter. */ private static ExpressionTree stripNullCheck(ExpressionTree expression, VisitorState state) { if (expression != null && expression.getKind() == METHOD_INVOCATION) { MethodInvocationTree methodInvocation = (MethodInvocationTree) expression; if (NON_NULL_MATCHER.matches(methodInvocation, state)) { return methodInvocation.getArguments().get(0); } } return expression; }
@Override public boolean matches(ExpressionTree expressionTree, VisitorState state) { if (expressionTree.getKind() == Kind.MEMBER_SELECT) { MemberSelectTree select = (MemberSelectTree) expressionTree; return select.getIdentifier().contentEquals("class") && classMatcher.matches(select.getExpression(), state); } return false; } };
private static Optional<ExpressionTree> findArgument( AnnotationTree annotation, String parameter) { for (ExpressionTree argument : annotation.getArguments()) { if (argument.getKind().equals(ASSIGNMENT)) { AssignmentTree assignment = (AssignmentTree) argument; if (assignment.getVariable().toString().equals(parameter)) { return Optional.of(ASTHelpers.stripParentheses(assignment.getExpression())); } } } return Optional.empty(); }
private String valueArgumentFromCompatibleWithAnnotation(AnnotationTree tree) { ExpressionTree argumentValue = Iterables.getOnlyElement(tree.getArguments()); if (argumentValue.getKind() != Kind.ASSIGNMENT) { // :-| Annotation symbol broken. Punt? return null; } return ASTHelpers.constValue(((AssignmentTree) argumentValue).getExpression(), String.class); }
@Override SuggestedFix fix(Fixer fixer, ExpressionTree tree, VisitorState state) { Optional<String> replacement = fixer.getHazzer(tree.getKind() == Kind.EQUAL_TO, state); return replacement .map(r -> SuggestedFix.replace(tree, r)) .orElse(SuggestedFix.builder().build()); } },
static ImmutableList<Parameter> createListFromExpressionTrees( List<? extends ExpressionTree> trees) { return Streams.mapWithIndex( trees.stream(), (t, i) -> new AutoValue_Parameter( getArgumentName(t), Optional.ofNullable(ASTHelpers.getResultType(t)).orElse(Type.noType), (int) i, t.toString(), t.getKind(), ASTHelpers.constValue(t) != null)) .collect(toImmutableList()); }
private static boolean parenthesizedChildHasKind(BinaryTree tree, Kind kind) { Kind childKind = ASTHelpers.stripParentheses( tree.getLeftOperand() instanceof ParenthesizedTree ? tree.getLeftOperand() : tree.getRightOperand()) .getKind(); return childKind == kind; } }
@Override public Description matchThrow(ThrowTree tree, VisitorState state) { return (tree.getExpression().getKind() == NULL_LITERAL) ? describeMatch( tree, SuggestedFix.replace(tree.getExpression(), "new NullPointerException()")) : NO_MATCH; } }
@Override public Void visitVariable(VariableTree node, Void aVoid) { if (sym.equals(ASTHelpers.getSymbol(node)) && node.getInitializer() != null && node.getInitializer().getKind() == Kind.STRING_LITERAL) { String source = state.getSourceForNode(node.getInitializer()); String replacement = source.replace('Y', 'y'); if (!source.equals(replacement)) { fix[0] = SuggestedFix.replace(node.getInitializer(), replacement); } } return super.visitVariable(node, aVoid); } }.scan(state.getPath().getCompilationUnit(), null);