@CheckForNull private static ExpressionTree expressionFromSingleStatementBlock(List<StatementTree> body) { if (body.size() == 1) { StatementTree singleStatement = body.get(0); if (singleStatement.is(Tree.Kind.EXPRESSION_STATEMENT)) { return ((ExpressionStatementTree) singleStatement).expression(); } } return null; }
@Override public void visitExpressionStatement(ExpressionStatementTree tree) { scanSkippingIncrementOrDecrement(tree.expression()); }
private static boolean hasOneAssignementStatement(MethodTree methodTree, ClassTree classTree) { List<StatementTree> body = methodTree.block().body(); return body.size() == 1 && body.get(0).is(Tree.Kind.EXPRESSION_STATEMENT) && ((ExpressionStatementTree) body.get(0)).expression().is(Tree.Kind.ASSIGNMENT) && referencePrivateProperty((AssignmentExpressionTree) ((ExpressionStatementTree) body.get(0)).expression(), classTree); }
private static boolean hasOneAssignementStatement(MethodTree methodTree, ClassTree classTree) { List<StatementTree> body = methodTree.block().body(); return body.size() == 1 && body.get(0).is(Tree.Kind.EXPRESSION_STATEMENT) && ((ExpressionStatementTree) body.get(0)).expression().is(Tree.Kind.ASSIGNMENT) && referencePrivateProperty((AssignmentExpressionTree) ((ExpressionStatementTree) body.get(0)).expression(), classTree); }
private boolean hasOneAssignementStatement(MethodTree methodTree, ClassTree classTree) { List<StatementTree> body = methodTree.block().body(); return body.size() == 1 && body.get(0).is(Tree.Kind.EXPRESSION_STATEMENT) && ((ExpressionStatementTree) body.get(0)).expression().is(Tree.Kind.ASSIGNMENT) && referencePrivateProperty((AssignmentExpressionTree) ((ExpressionStatementTree) body.get(0)).expression(), classTree); }
private static boolean isLastStatement(@Nullable BlockTree blockTree, MethodInvocationTree lastStatementTree) { if (blockTree != null) { StatementTree last = Iterables.getLast(blockTree.body()); if (last.is(Kind.EXPRESSION_STATEMENT)) { return lastStatementTree.equals(((ExpressionStatementTree) last).expression()); } else if (last.is(Kind.TRY_STATEMENT)) { return isLastStatement(((TryStatementTree) last).finallyBlock(), lastStatementTree); } } return false; }
private static boolean isLastStatement(@Nullable BlockTree blockTree, MethodInvocationTree lastStatementTree) { if (blockTree != null) { StatementTree last = Iterables.getLast(blockTree.body()); if (last.is(Kind.EXPRESSION_STATEMENT)) { return lastStatementTree.equals(((ExpressionStatementTree) last).expression()); } else if (last.is(Kind.TRY_STATEMENT)) { return isLastStatement(((TryStatementTree) last).finallyBlock(), lastStatementTree); } } return false; }
@Override public void visitExpressionStatement(ExpressionStatementTree tree) { ExpressionTree expressionTree = ExpressionUtils.skipParentheses(tree.expression()); expressionTree = skipChainedAssignments(expressionTree); scan(expressionTree); }
@Override public void visitNode(Tree tree) { ExpressionStatementTree est = (ExpressionStatementTree) tree; if (est.expression().is(Tree.Kind.METHOD_INVOCATION)) { MethodInvocationTree mit = (MethodInvocationTree) est.expression(); Type methodType = mit.symbolType(); if (!returnsVoid(methodType) && isCheckedType(mit)) { addIssue(tree, "The return value of \"" + methodName(mit) + "\" must be used."); } } }
@Override public void visitExpressionStatement(ExpressionStatementTree tree) { super.visitExpressionStatement(tree); // TODO(Godin): strictly speaking statement can't have type registerType(tree, getType(tree.expression())); }
@Override public void visitExpressionStatement(ExpressionStatementTree tree) { ExpressionTree expressionTree = ExpressionUtils.skipParentheses(tree.expression()); expressionTree = skipChainedAssignments(expressionTree); scan(expressionTree); }
private static boolean isLoggingMethod(StatementTree statementTree, IdentifierTree exceptionIdentifier) { if (!statementTree.is(Tree.Kind.EXPRESSION_STATEMENT)) { return false; } ExpressionTree expression = ((ExpressionStatementTree) statementTree).expression(); if (expression.is(Tree.Kind.METHOD_INVOCATION)) { MethodInvocationTree mit = (MethodInvocationTree) expression; return LOGGING_METHODS.anyMatch(mit) && isExceptionUsed(exceptionIdentifier, mit); } return false; }
private static boolean isLoggingMethod(StatementTree statementTree, IdentifierTree exceptionIdentifier) { if (!statementTree.is(Tree.Kind.EXPRESSION_STATEMENT)) { return false; } ExpressionTree expression = ((ExpressionStatementTree) statementTree).expression(); if (expression.is(Tree.Kind.METHOD_INVOCATION)) { MethodInvocationTree mit = (MethodInvocationTree) expression; return LOGGING_METHODS.anyMatch(mit) && isExceptionUsed(exceptionIdentifier, mit); } return false; }
@Override public void visitNode(Tree tree) { ExpressionStatementTree expressionStatement = (ExpressionStatementTree) tree; ExpressionTree expression = expressionStatement.expression(); if (expression.is(Tree.Kind.NEW_CLASS)) { NewClassTreeImpl newClassTree = (NewClassTreeImpl) expression; String className = newClassTree.getConstructorIdentifier().name(); addIssue(tree, "Either remove this useless object instantiation of class \"" + className + "\" or use it"); } }
private boolean isUselessSuperCall(MethodTree methodTree) { ExpressionTree callToSuper = null; StatementTree statementTree = methodTree.block().body().get(0); if (returnsVoid(methodTree) && statementTree.is(Tree.Kind.EXPRESSION_STATEMENT)) { callToSuper = ((ExpressionStatementTree) statementTree).expression(); } else if (statementTree.is(Tree.Kind.RETURN_STATEMENT)) { callToSuper = ((ReturnStatementTree) statementTree).expression(); } return callToSuper != null && isCallToSuper(methodTree, callToSuper); }
private void leaveExpressionStatement(ExpressionStatementTree expressionStatement) { ExpressionTree expression = expressionStatement.expression(); if (expression.is(ASSIGNMENT_KINDS)) { addAssignment(((AssignmentExpressionTree) expression).variable()); } else if (expression.is(INCREMENT_KINDS)) { addAssignment(((UnaryExpressionTree) expression).expression()); } }
private void leaveExpressionStatement(ExpressionStatementTree expressionStatement) { ExpressionTree expression = expressionStatement.expression(); if (expression.is(ASSIGNMENT_KINDS)) { addAssignment(((AssignmentExpressionTree) expression).variable()); } else if (expression.is(INCREMENT_KINDS)) { addAssignment(((UnaryExpressionTree) expression).expression()); } }
private static boolean isUselessSuperCall(MethodTree methodTree) { ExpressionTree callToSuper = null; StatementTree statementTree = methodTree.block().body().get(0); if (returnsVoid(methodTree) && statementTree.is(Tree.Kind.EXPRESSION_STATEMENT)) { callToSuper = ((ExpressionStatementTree) statementTree).expression(); } else if (statementTree.is(Tree.Kind.RETURN_STATEMENT)) { callToSuper = ((ReturnStatementTree) statementTree).expression(); } return callToSuper != null && isCallToSuper(methodTree, callToSuper) && sameVisibility(methodTree.symbol(), ((MethodInvocationTree) callToSuper).symbol()); }
private static boolean isUselessSuperCall(MethodTree methodTree) { ExpressionTree callToSuper = null; StatementTree statementTree = methodTree.block().body().get(0); if (returnsVoid(methodTree) && statementTree.is(Tree.Kind.EXPRESSION_STATEMENT)) { callToSuper = ((ExpressionStatementTree) statementTree).expression(); } else if (statementTree.is(Tree.Kind.RETURN_STATEMENT)) { callToSuper = ((ReturnStatementTree) statementTree).expression(); } return callToSuper != null && isCallToSuper(methodTree, callToSuper) && sameVisibility(methodTree.symbol(), ((MethodInvocationTree) callToSuper).symbol()); }
@Override public void visitExpressionStatement(ExpressionStatementTree tree) { super.visitExpressionStatement(tree); ExpressionTree expression = tree.expression(); if (((JavaType) expression.symbolType()).isTagged(JavaType.DEFERRED) && expression.is(Tree.Kind.NEW_CLASS)) { JavaType parametrizedTypeWithObject = resolve.parametrizedTypeWithErasure((ParametrizedTypeJavaType) getType(((NewClassTree) expression).identifier())); setInferedType(parametrizedTypeWithObject, (DeferredType) expression.symbolType()); } }