diff options
author | Andrei Selkin <andreyselkin@gmail.com> | 2015-11-04 23:11:52 +0300 |
---|---|---|
committer | Roman Ivanov <ivanov-jr@mail.ru> | 2015-11-04 13:44:55 -0800 |
commit | c9b625bcf0e456e4f9cc99a249860129cdae3df4 (patch) | |
tree | 078f8f7af5d5013123c327a00ab7b4381c8eb9de /src/main/java/com/puppycrawl/tools/checkstyle/checks/naming/ParameterNameCheck.java | |
parent | a619bc13918d23861116ec46dd858aa69d698498 (diff) | |
download | checkstyle-c9b625bcf0e456e4f9cc99a249860129cdae3df4.tar.gz |
Issue #2290: Add 'ignoreOverridden' option to skip methods with @Override annotation
Diffstat (limited to 'src/main/java/com/puppycrawl/tools/checkstyle/checks/naming/ParameterNameCheck.java')
-rw-r--r-- | src/main/java/com/puppycrawl/tools/checkstyle/checks/naming/ParameterNameCheck.java | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/naming/ParameterNameCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/naming/ParameterNameCheck.java index 862bd5489..9152f7063 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/naming/ParameterNameCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/naming/ParameterNameCheck.java @@ -30,6 +30,9 @@ import com.puppycrawl.tools.checkstyle.api.TokenTypes; * and defaults to * <strong>^[a-z][a-zA-Z0-9]*$</strong>. * </p> + * <p>The check has the following option:</p> + * <p><b>ignoreOverridden</b> - allows to skip methods with Override annotation from + * validation. Default values is <b>false</b> .</p> * <p> * An example of how to configure the check is: * </p> @@ -45,11 +48,27 @@ import com.puppycrawl.tools.checkstyle.api.TokenTypes; * <property name="format" value="^^[a-z](_?[a-zA-Z0-9]+)*$"/> * </module> * </pre> + * <p> + * An example of how to configure the check to skip methods with Override annotation from + * validation: + * </p> + * <pre> + * <module name="ParameterName"> + * <property name="ignoreOverridden" value="true"/> + * </module> + * </pre> * * @author Oliver Burn + * @author Andrei Selkin */ public class ParameterNameCheck extends AbstractNameCheck { + + /** + * Allows to skip methods with Override annotation from validation. + */ + private boolean ignoreOverridden; + /** * Creates a new {@code ParameterNameCheck} instance. */ @@ -57,6 +76,15 @@ public class ParameterNameCheck super("^[a-z][a-zA-Z0-9]*$"); } + /** + * Sets whether to skip methods with Override annotation from validation. + * + * @param ignoreOverridden Flag for skipping methods with Override annotation. + */ + public void setIgnoreOverridden(boolean ignoreOverridden) { + this.ignoreOverridden = ignoreOverridden; + } + @Override public int[] getDefaultTokens() { return getAcceptableTokens(); @@ -74,6 +102,29 @@ public class ParameterNameCheck @Override protected boolean mustCheckName(DetailAST ast) { - return ast.getParent().getType() != TokenTypes.LITERAL_CATCH; + boolean checkName = true; + if (ignoreOverridden && isOverriddenMethod(ast) + || ast.getParent().getType() == TokenTypes.LITERAL_CATCH) { + checkName = false; + } + return checkName; + } + + /** + * Checks whether a method is annotated with Override annotation. + * @param ast method parameter definition token. + * @return true if a method is annotated with Override annotation. + */ + private static boolean isOverriddenMethod(DetailAST ast) { + boolean overridden = false; + final DetailAST parent = ast.getParent().getParent(); + final DetailAST annotation = parent.getFirstChild().getFirstChild(); + if (annotation.getType() == TokenTypes.ANNOTATION) { + final DetailAST overrideToken = annotation.findFirstToken(TokenTypes.IDENT); + if ("Override".equals(overrideToken.getText())) { + overridden = true; + } + } + return overridden; } } |