From 5f108624a73d1f53ca4dd86fc87e2d9879325e21 Mon Sep 17 00:00:00 2001
From: ljacqu
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
- All messages can be customized if the default message doesn't suite you.
+ All messages can be customized if the default message doesn't suit you.
Please see the documentation to learn how to.
+ ATTENTION: empty line separator is required between AST siblings, not after line where token is found. +
As you see very small java file transforms to a huge Abstract Syntax Tree, because that is the most detailed tree including all components of the java file: classes, methods, comments, etc.
-In most cases while developing Javadoc Check you need only parse tree of the exact Javadoc comment. +
In most cases while developing Javadoc Check, you need to only parse the tree of the exact Javadoc comment. To do that just copy Javadoc comment to separate file and remove /** at the begining and */ at the end. After that, run checkstyle with -j argument.
MyJavadocComment.javadoc file:
From e70836bb3dec30734f5fd51b63d4dc6cbe24679d Mon Sep 17 00:00:00 2001 From: Andrew Kuchev <0coming.soon@gmail.com> Date: Thu, 2 Mar 2017 18:23:18 +0500 Subject: [PATCH 05/34] Issue #3329: Added lambda to ParenPad --- .../checks/whitespace/ParenPadCheck.java | 13 ++- .../checks/whitespace/ParenPadCheckTest.java | 99 +++++++++++++++++++ .../whitespace/InputParenPadLambda.java | 24 +++++ .../whitespace/InputParenPadLambdaOnly.java | 24 +++++ .../InputParenPadLambdaOnlyWithSpace.java | 24 +++++ .../InputParenPadLambdaWithSpace.java | 24 +++++ .../InputParenPadWithDisabledLambda.java | 24 +++++ ...putParenPadWithSpaceAndDisabledLambda.java | 24 +++++ src/xdocs/config_whitespace.xml | 8 +- 9 files changed, 258 insertions(+), 6 deletions(-) create mode 100644 src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/InputParenPadLambda.java create mode 100644 src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/InputParenPadLambdaOnly.java create mode 100644 src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/InputParenPadLambdaOnlyWithSpace.java create mode 100644 src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/InputParenPadLambdaWithSpace.java create mode 100644 src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/InputParenPadWithDisabledLambda.java create mode 100644 src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/InputParenPadWithSpaceAndDisabledLambda.java diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/ParenPadCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/ParenPadCheck.java index e152fd586498..62a127da5eb4 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/ParenPadCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/ParenPadCheck.java @@ -61,6 +61,7 @@ * {@link TokenTypes#RESOURCE_SPECIFICATION RESOURCE_SPECIFICATION}, * {@link TokenTypes#SUPER_CTOR_CALL SUPER_CTOR_CALL}, * {@link TokenTypes#QUESTION QUESTION}, + * {@link TokenTypes#LAMBDA LAMBDA}, * ** An example of how to configure the check is: @@ -131,7 +132,8 @@ public void visitToken(DetailAST ast) { case TokenTypes.ENUM_CONSTANT_DEF: case TokenTypes.LITERAL_NEW: case TokenTypes.LITERAL_SYNCHRONIZED: - visitNewEnumConstDefAnnotationSync(ast); + case TokenTypes.LAMBDA: + visitTokenWithOptionalParentheses(ast); break; default: processLeft(ast.findFirstToken(TokenTypes.LPAREN)); @@ -140,11 +142,13 @@ public void visitToken(DetailAST ast) { } /** - * Checks parens in {@link TokenTypes#ENUM_CONSTANT_DEF}, {@link TokenTypes#ANNOTATION} - * {@link TokenTypes#LITERAL_SYNCHRONIZED} and {@link TokenTypes#LITERAL_NEW}. + * Checks parens in token which may not contain parens, e.g. + * {@link TokenTypes#ENUM_CONSTANT_DEF}, {@link TokenTypes#ANNOTATION} + * {@link TokenTypes#LITERAL_SYNCHRONIZED}, {@link TokenTypes#LITERAL_NEW} and + * {@link TokenTypes#LAMBDA}. * @param ast the token to check. */ - private void visitNewEnumConstDefAnnotationSync(DetailAST ast) { + private void visitTokenWithOptionalParentheses(DetailAST ast) { final DetailAST parenAst = ast.findFirstToken(TokenTypes.LPAREN); if (parenAst != null) { processLeft(parenAst); @@ -229,6 +233,7 @@ private static int[] makeAcceptableTokens() { TokenTypes.QUESTION, TokenTypes.RESOURCE_SPECIFICATION, TokenTypes.SUPER_CTOR_CALL, + TokenTypes.LAMBDA, }; } diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/whitespace/ParenPadCheckTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/whitespace/ParenPadCheckTest.java index b80c6d78b10a..c0d402b45e10 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/whitespace/ParenPadCheckTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/whitespace/ParenPadCheckTest.java @@ -262,4 +262,103 @@ public void testInvalidOption() throws Exception { + "Cannot set property 'option' to 'invalid_option' in module")); } } + + @Test + public void testLambdaAssignment() throws Exception { + final DefaultConfiguration checkConfig = createCheckConfig(ParenPadCheck.class); + final String[] expected = { + "9:42: " + getCheckMessage(MSG_WS_FOLLOWED, "("), + "9:44: " + getCheckMessage(MSG_WS_PRECEDED, ")"), + "11:43: " + getCheckMessage(MSG_WS_PRECEDED, ")"), + "13:42: " + getCheckMessage(MSG_WS_FOLLOWED, "("), + "15:47: " + getCheckMessage(MSG_WS_FOLLOWED, "("), + "15:49: " + getCheckMessage(MSG_WS_PRECEDED, ")"), + "17:47: " + getCheckMessage(MSG_WS_FOLLOWED, "("), + "17:56: " + getCheckMessage(MSG_WS_PRECEDED, ")"), + "19:62: " + getCheckMessage(MSG_WS_FOLLOWED, "("), + "19:62: " + getCheckMessage(MSG_WS_PRECEDED, ")"), + "22:21: " + getCheckMessage(MSG_WS_FOLLOWED, "("), + "22:34: " + getCheckMessage(MSG_WS_PRECEDED, ")"), + }; + verify(checkConfig, getPath("InputParenPadLambda.java"), expected); + } + + @Test + public void testLambdaAssignmentWithSpace() throws Exception { + final DefaultConfiguration checkConfig = createCheckConfig(ParenPadCheck.class); + checkConfig.addAttribute("option", PadOption.SPACE.toString()); + final String[] expected = { + "9:42: " + getCheckMessage(MSG_WS_NOT_FOLLOWED, "("), + "9:43: " + getCheckMessage(MSG_WS_NOT_PRECEDED, ")"), + "11:42: " + getCheckMessage(MSG_WS_NOT_FOLLOWED, "("), + "13:44: " + getCheckMessage(MSG_WS_NOT_PRECEDED, ")"), + "15:48: " + getCheckMessage(MSG_WS_NOT_FOLLOWED, "("), + "15:49: " + getCheckMessage(MSG_WS_NOT_PRECEDED, ")"), + "17:48: " + getCheckMessage(MSG_WS_NOT_FOLLOWED, "("), + "17:56: " + getCheckMessage(MSG_WS_NOT_PRECEDED, ")"), + "22:21: " + getCheckMessage(MSG_WS_NOT_FOLLOWED, "("), + "22:33: " + getCheckMessage(MSG_WS_NOT_PRECEDED, ")"), + }; + verify(checkConfig, getPath("InputParenPadLambdaWithSpace.java"), expected); + } + + @Test + public void testLambdaCheckDisabled() throws Exception { + final DefaultConfiguration checkConfig = createCheckConfig(ParenPadCheck.class); + checkConfig.addAttribute("tokens", "EXPR, METHOD_CALL, METHOD_DEF"); + final String[] expected = { + "19:62: " + getCheckMessage(MSG_WS_FOLLOWED, "("), + "19:62: " + getCheckMessage(MSG_WS_PRECEDED, ")"), + "22:21: " + getCheckMessage(MSG_WS_FOLLOWED, "("), + "22:34: " + getCheckMessage(MSG_WS_PRECEDED, ")"), + }; + verify(checkConfig, getPath("InputParenPadWithDisabledLambda.java"), expected); + } + + @Test + public void testLambdaCheckDisabledWithSpace() throws Exception { + final DefaultConfiguration checkConfig = createCheckConfig(ParenPadCheck.class); + checkConfig.addAttribute("option", PadOption.SPACE.toString()); + checkConfig.addAttribute("tokens", "EXPR, METHOD_CALL, METHOD_DEF"); + final String[] expected = { + "22:21: " + getCheckMessage(MSG_WS_NOT_FOLLOWED, "("), + "22:33: " + getCheckMessage(MSG_WS_NOT_PRECEDED, ")"), + }; + verify(checkConfig, getPath("InputParenPadWithSpaceAndDisabledLambda.java"), expected); + } + + @Test + public void testLambdaCheckOnly() throws Exception { + final DefaultConfiguration checkConfig = createCheckConfig(ParenPadCheck.class); + checkConfig.addAttribute("tokens", "LAMBDA"); + final String[] expected = { + "9:42: " + getCheckMessage(MSG_WS_FOLLOWED, "("), + "9:44: " + getCheckMessage(MSG_WS_PRECEDED, ")"), + "11:43: " + getCheckMessage(MSG_WS_PRECEDED, ")"), + "13:42: " + getCheckMessage(MSG_WS_FOLLOWED, "("), + "15:47: " + getCheckMessage(MSG_WS_FOLLOWED, "("), + "15:49: " + getCheckMessage(MSG_WS_PRECEDED, ")"), + "17:47: " + getCheckMessage(MSG_WS_FOLLOWED, "("), + "17:56: " + getCheckMessage(MSG_WS_PRECEDED, ")"), + }; + verify(checkConfig, getPath("InputParenPadLambdaOnly.java"), expected); + } + + @Test + public void testLambdaCheckOnlyWithSpace() throws Exception { + final DefaultConfiguration checkConfig = createCheckConfig(ParenPadCheck.class); + checkConfig.addAttribute("option", PadOption.SPACE.toString()); + checkConfig.addAttribute("tokens", "LAMBDA"); + final String[] expected = { + "9:42: " + getCheckMessage(MSG_WS_NOT_FOLLOWED, "("), + "9:43: " + getCheckMessage(MSG_WS_NOT_PRECEDED, ")"), + "11:42: " + getCheckMessage(MSG_WS_NOT_FOLLOWED, "("), + "13:44: " + getCheckMessage(MSG_WS_NOT_PRECEDED, ")"), + "15:48: " + getCheckMessage(MSG_WS_NOT_FOLLOWED, "("), + "15:49: " + getCheckMessage(MSG_WS_NOT_PRECEDED, ")"), + "17:48: " + getCheckMessage(MSG_WS_NOT_FOLLOWED, "("), + "17:56: " + getCheckMessage(MSG_WS_NOT_PRECEDED, ")"), + }; + verify(checkConfig, getPath("InputParenPadLambdaOnlyWithSpace.java"), expected); + } } diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/InputParenPadLambda.java b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/InputParenPadLambda.java new file mode 100644 index 000000000000..eeaa9c87bbf5 --- /dev/null +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/InputParenPadLambda.java @@ -0,0 +1,24 @@ +package com.puppycrawl.tools.checkstyle.checks.whitespace; + +class InputParenPadLambda { + { + java.util.function.Consumer a = (o) -> { o.toString(); }; // ok + + java.util.function.Consumer b = o -> { o.toString(); }; // ok + + java.util.function.Consumer c = ( o ) -> { o.toString(); }; // 2 violations + + java.util.function.Consumer d = (o ) -> { o.toString(); }; // 1 violation + + java.util.function.Consumer e = ( o) -> { o.toString(); }; // 1 violation + + java.util.stream.Stream.of().forEach(( o ) -> o.toString()); // 2 violations + + java.util.stream.Stream.of().forEach(( Object o ) -> o.toString()); // 2 violations + + java.util.stream.Stream.of().forEach(o -> o.toString( )); // 2 violations + } + + void someMethod( String param ) { // 2 violations + } +} diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/InputParenPadLambdaOnly.java b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/InputParenPadLambdaOnly.java new file mode 100644 index 000000000000..da6d2bb40db3 --- /dev/null +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/InputParenPadLambdaOnly.java @@ -0,0 +1,24 @@ +package com.puppycrawl.tools.checkstyle.checks.whitespace; + +public class InputParenPadLambdaOnly { + { + java.util.function.Consumer a = (o) -> { o.toString(); }; // ok + + java.util.function.Consumer b = o -> { o.toString(); }; // ok + + java.util.function.Consumer c = ( o ) -> { o.toString(); }; // 2 violations + + java.util.function.Consumer d = (o ) -> { o.toString(); }; // 1 violation + + java.util.function.Consumer e = ( o) -> { o.toString(); }; // 1 violation + + java.util.stream.Stream.of().forEach(( o ) -> o.toString()); // 2 violations + + java.util.stream.Stream.of().forEach(( Object o ) -> o.toString()); // 2 violations + + java.util.stream.Stream.of().forEach(o -> o.toString( )); // ok + } + + void someMethod( String param ) { // ok + } +} diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/InputParenPadLambdaOnlyWithSpace.java b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/InputParenPadLambdaOnlyWithSpace.java new file mode 100644 index 000000000000..6a0c5e073878 --- /dev/null +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/InputParenPadLambdaOnlyWithSpace.java @@ -0,0 +1,24 @@ +package com.puppycrawl.tools.checkstyle.checks.whitespace; + +class InputParenPadLambdaOnlyWithSpace { + { + java.util.function.Consumer a = ( o ) -> { o.toString( ); }; // ok + + java.util.function.Consumer b = o -> { o.toString(); }; // ok + + java.util.function.Consumer c = (o) -> { o.toString(); }; // 2 violations + + java.util.function.Consumer d = (o ) -> { o.toString(); }; // 1 violation + + java.util.function.Consumer e = ( o) -> { o.toString(); }; // 1 violation + + java.util.stream.Stream.of().forEach( (o) -> o.toString() ); // 2 violations + + java.util.stream.Stream.of().forEach( (Object o) -> o.toString() ); // 2 violations + + java.util.stream.Stream.of().forEach( o -> o.toString() ); // ok + } + + void someMethod(String param) { // ok + } +} diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/InputParenPadLambdaWithSpace.java b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/InputParenPadLambdaWithSpace.java new file mode 100644 index 000000000000..5350b4185586 --- /dev/null +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/InputParenPadLambdaWithSpace.java @@ -0,0 +1,24 @@ +package com.puppycrawl.tools.checkstyle.checks.whitespace; + +class InputParenPadLambdaWithSpace { + { + java.util.function.Consumer a = ( o ) -> { o.toString( ); }; // ok + + java.util.function.Consumer b = o -> { o.toString(); }; // ok + + java.util.function.Consumer c = (o) -> { o.toString(); }; // 2 violations + + java.util.function.Consumer d = (o ) -> { o.toString(); }; // 1 violation + + java.util.function.Consumer e = ( o) -> { o.toString(); }; // 1 violation + + java.util.stream.Stream.of().forEach( (o) -> o.toString() ); // 2 violations + + java.util.stream.Stream.of().forEach( (Object o) -> o.toString() ); // 2 violations + + java.util.stream.Stream.of().forEach( o -> o.toString() ); // ok + } + + void someMethod(String param) { // 2 violations + } +} diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/InputParenPadWithDisabledLambda.java b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/InputParenPadWithDisabledLambda.java new file mode 100644 index 000000000000..1dccad6f4e9d --- /dev/null +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/InputParenPadWithDisabledLambda.java @@ -0,0 +1,24 @@ +package com.puppycrawl.tools.checkstyle.checks.whitespace; + +public class InputParenPadWithDisabledLambda { + { + java.util.function.Consumer a = (o) -> { o.toString(); }; // ok + + java.util.function.Consumer b = o -> { o.toString(); }; // ok + + java.util.function.Consumer c = ( o ) -> { o.toString(); }; // ok + + java.util.function.Consumer d = (o ) -> { o.toString(); }; // ok + + java.util.function.Consumer e = ( o) -> { o.toString(); }; // ok + + java.util.stream.Stream.of().forEach(( o ) -> o.toString()); // ok + + java.util.stream.Stream.of().forEach(( Object o ) -> o.toString()); // ok + + java.util.stream.Stream.of().forEach(o -> o.toString( )); // 2 violations + } + + void someMethod( String param ) { // 2 violations + } +} diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/InputParenPadWithSpaceAndDisabledLambda.java b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/InputParenPadWithSpaceAndDisabledLambda.java new file mode 100644 index 000000000000..b8df6a97b7de --- /dev/null +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/InputParenPadWithSpaceAndDisabledLambda.java @@ -0,0 +1,24 @@ +package com.puppycrawl.tools.checkstyle.checks.whitespace; + +class InputParenPadWithSpaceAndDisabledLambda { + { + java.util.function.Consumer a = ( o ) -> { o.toString( ); }; // ok + + java.util.function.Consumer b = o -> { o.toString(); }; // ok + + java.util.function.Consumer c = (o) -> { o.toString(); }; // ok + + java.util.function.Consumer d = (o ) -> { o.toString(); }; // ok + + java.util.function.Consumer e = ( o) -> { o.toString(); }; // ok + + java.util.stream.Stream.of().forEach( (o) -> o.toString() ); // ok + + java.util.stream.Stream.of().forEach( (Object o) -> o.toString() ); // ok + + java.util.stream.Stream.of().forEach( o -> o.toString() ); // ok + } + + void someMethod(String param) { // 2 violations + } +} diff --git a/src/xdocs/config_whitespace.xml b/src/xdocs/config_whitespace.xml index 49513b772130..f52e5ab69d87 100644 --- a/src/xdocs/config_whitespace.xml +++ b/src/xdocs/config_whitespace.xml @@ -1411,7 +1411,9 @@ import com.puppycrawl.tools.checkstyle.api.AbstractCheck; RESOURCE_SPECIFICATION, SUPER_CTOR_CALL. + href="apidocs/com/puppycrawl/tools/checkstyle/api/TokenTypes.html#SUPER_CTOR_CALL">SUPER_CTOR_CALL, + LAMBDA.
+ Example of period property. +
+ + ++
To configure the check: -
- + + ++ Which results in the following violations: +
+