aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/puppycrawl/tools/checkstyle/checks/naming/ParameterNameCheck.java
diff options
context:
space:
mode:
authorAndrei Selkin <andreyselkin@gmail.com>2015-11-04 23:11:52 +0300
committerRoman Ivanov <ivanov-jr@mail.ru>2015-11-04 13:44:55 -0800
commitc9b625bcf0e456e4f9cc99a249860129cdae3df4 (patch)
tree078f8f7af5d5013123c327a00ab7b4381c8eb9de /src/main/java/com/puppycrawl/tools/checkstyle/checks/naming/ParameterNameCheck.java
parenta619bc13918d23861116ec46dd858aa69d698498 (diff)
downloadcheckstyle-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.java53
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;
* &lt;property name="format" value="^^[a-z](_?[a-zA-Z0-9]+)*$"/&gt;
* &lt;/module&gt;
* </pre>
+ * <p>
+ * An example of how to configure the check to skip methods with Override annotation from
+ * validation:
+ * </p>
+ * <pre>
+ * &lt;module name="ParameterName"&gt;
+ * &lt;property name="ignoreOverridden" value="true"/&gt;
+ * &lt;/module&gt;
+ * </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;
}
}