@Override public void visitLambdaExpression(LambdaExpressionTree lambdaExpressionTree) { // skip variable declaration scan(lambdaExpressionTree.body()); }
@Override public void visitLambdaExpression(LambdaExpressionTree lambdaExpressionTree) { scan(lambdaExpressionTree.parameters()); scan(lambdaExpressionTree.body()); }
@Override public void visitLambdaExpression(LambdaExpressionTree lambdaExpressionTree) { int lines = getNumberOfLines(lambdaExpressionTree); if (lines > max) { SyntaxToken firstToken = lambdaExpressionTree.firstToken(); SyntaxToken lastSyntaxToken = lambdaExpressionTree.lastToken(); JavaFileScannerContext.Location lastTokenLocation = new JavaFileScannerContext.Location(lines + " lines", lastSyntaxToken); context.reportIssue(this, firstToken, lambdaExpressionTree.arrowToken(), "Reduce this lambda expression number of lines from " + lines + " to at most " + max + ".", Lists.newArrayList(lastTokenLocation), null); } super.visitLambdaExpression(lambdaExpressionTree); }
@Override public void visitNode(Tree tree) { LambdaExpressionTree let = (LambdaExpressionTree) tree; if(let.openParenToken() != null && let.parameters().size() == 1) { VariableTree param = let.parameters().get(0); String ident = param.simpleName().name(); if(param.type().is(Tree.Kind.INFERED_TYPE)) { addIssue(param, "Remove the parentheses around the \"" + ident + "\" parameter"); } } } }
private static boolean nullAgainstParam(ExpressionTree o1, ExpressionTree o2, LambdaExpressionTree tree) { if (o1.is(Tree.Kind.NULL_LITERAL) && o2.is(Tree.Kind.IDENTIFIER)) { List<VariableTree> parameters = tree.parameters(); return parameters.size() == 1 && parameters.get(0).symbol().equals(((IdentifierTree) o2).symbol()); } return false; }
@Override public void visitLambdaExpression(LambdaExpressionTree lambdaExpressionTree) { if(root.is(Tree.Kind.CLASS, Tree.Kind.ENUM, Tree.Kind.INTERFACE, Tree.Kind.ANNOTATION_TYPE, Tree.Kind.COMPILATION_UNIT) || lambdaExpressionTree.equals(root)) { blame.add(lambdaExpressionTree.arrowToken()); super.visitLambdaExpression(lambdaExpressionTree); } }
private static boolean isHostnameVerifierSignature(LambdaExpressionTree lambdaExpressionTree) { return lambdaExpressionTree.symbolType().isSubtypeOf("javax.net.ssl.HostnameVerifier"); }
private static boolean nullAgainstParam(ExpressionTree o1, ExpressionTree o2, LambdaExpressionTree tree) { if (o1.is(Tree.Kind.NULL_LITERAL) && o2.is(Tree.Kind.IDENTIFIER)) { List<VariableTree> parameters = tree.parameters(); return parameters.size() == 1 && parameters.get(0).symbol().equals(((IdentifierTree) o2).symbol()); } return false; }
@Override public void visitNode(Tree tree) { LambdaExpressionTree let = (LambdaExpressionTree) tree; SyntaxToken openParenToken = let.openParenToken(); if (openParenToken != null && let.parameters().size() == 1) { VariableTree param = let.parameters().get(0); String identifier = param.simpleName().name(); if (param.type().is(Tree.Kind.INFERED_TYPE)) { reportIssue(openParenToken, "Remove the parentheses around the \"" + identifier + "\" parameter" + context.getJavaVersion().java8CompatibilityMessage()); } } } }
@Override public void visitLambdaExpression(LambdaExpressionTree lambdaExpressionTree) { if(root.is(Tree.Kind.CLASS, Tree.Kind.ENUM, Tree.Kind.INTERFACE, Tree.Kind.ANNOTATION_TYPE, Tree.Kind.COMPILATION_UNIT) || lambdaExpressionTree.equals(root)) { blame.add(lambdaExpressionTree.arrowToken()); super.visitLambdaExpression(lambdaExpressionTree); } }
private static boolean isHostnameVerifierSignature(LambdaExpressionTree lambdaExpressionTree) { return lambdaExpressionTree.symbolType().isSubtypeOf("javax.net.ssl.HostnameVerifier"); }
@Override public void visitLambdaExpression(LambdaExpressionTree lambdaExpressionTree) { // Skip parameter types scan(lambdaExpressionTree.body()); }
@Override public void visitLambdaExpression(LambdaExpressionTree lambdaExpressionTree) { scan(lambdaExpressionTree.parameters()); scan(lambdaExpressionTree.body()); }
private boolean isAcceptableDeferredType(DeferredType arg, JavaType formal) { AbstractTypedTree tree = arg.tree(); if(tree.is(Tree.Kind.METHOD_REFERENCE, Tree.Kind.LAMBDA_EXPRESSION) && (!formal.symbol.isFlag(Flags.INTERFACE) || !findSamMethodArgsRecursively(formal).isPresent())) { return false; } // we accept all deferred type as we will resolve this later, but reject lambdas with incorrect arity return !tree.is(Tree.Kind.LAMBDA_EXPRESSION) || ((LambdaExpressionTree) tree).parameters().size() == findSamMethodArgs(formal).size(); }
@Override public void visitNode(Tree tree) { LambdaExpressionTree let = (LambdaExpressionTree) tree; SyntaxToken openParenToken = let.openParenToken(); if (openParenToken != null && let.parameters().size() == 1) { VariableTree param = let.parameters().get(0); String identifier = param.simpleName().name(); if (param.type().is(Tree.Kind.INFERED_TYPE)) { reportIssue(openParenToken, "Remove the parentheses around the \"" + identifier + "\" parameter" + context.getJavaVersion().java8CompatibilityMessage()); } } } }
@Override public void visitLambdaExpression(LambdaExpressionTree lambdaExpressionTree) { int lines = getNumberOfLines(lambdaExpressionTree); if (lines > max) { SyntaxToken firstToken = lambdaExpressionTree.firstToken(); SyntaxToken lastSyntaxToken = lambdaExpressionTree.lastToken(); JavaFileScannerContext.Location lastTokenLocation = new JavaFileScannerContext.Location(lines + " lines", lastSyntaxToken); context.reportIssue(this, firstToken, lambdaExpressionTree.arrowToken(), "Reduce this lambda expression number of lines from " + lines + " to at most " + max + ".", Lists.newArrayList(lastTokenLocation), null); } super.visitLambdaExpression(lambdaExpressionTree); }
@Override public void leaveNode(Tree tree) { Tree reportTree = null; if (tree.is(Tree.Kind.METHOD)) { reportTree = ((MethodTree) tree).simpleName(); } else if (tree.is(Tree.Kind.LAMBDA_EXPRESSION)) { reportTree = ((LambdaExpressionTree) tree).arrowToken(); } if (reportTree != null) { int count = returnStatementCounter.count(tree); if (count > max) { reportIssue(reportTree, "Reduce the number of returns of this method " + count + ", down to the maximum allowed " + max + "."); } methods.pop(); } } }
@Override public void visitReturnStatement(ReturnStatementTree tree) { super.visitReturnStatement(tree); ExpressionTree expression = tree.expression(); if (expression != null && ((JavaType) expression.symbolType()).isTagged(JavaType.DEFERRED)) { // get owner of return (method or lambda) Tree parent = tree.parent(); while (!parent.is(Tree.Kind.METHOD, Tree.Kind.LAMBDA_EXPRESSION)) { parent = parent.parent(); if(parent == null) { throw new IllegalStateException("Return statement was unexpected here"); } } Type infered; if(parent.is(Tree.Kind.METHOD)) { infered = ((MethodTree) parent).returnType().symbolType(); } else { infered = ((LambdaExpressionTree) parent).symbolType(); } setInferedType(infered, (DeferredType) expression.symbolType()); } }
@Override public void visitLambdaExpression(LambdaExpressionTree lambdaExpressionTree) { // Skip parameter types scan(lambdaExpressionTree.body()); }
@Override public void visitLambdaExpression(LambdaExpressionTree lambdaExpressionTree) { scan(lambdaExpressionTree.parameters()); scanSkippingIncrementOrDecrement(lambdaExpressionTree.body()); }