From 55435babb6bc6640bc66161743ffbde93a3c458b Mon Sep 17 00:00:00 2001 From: alexkravin Date: Sun, 28 Dec 2014 12:51:09 +0400 Subject: [PATCH] Extended Method Name Check to ignore overriden methods, issue #430 --- .../checks/naming/MethodNameCheck.java | 20 +++++++++++++++- .../checks/naming/MethodNameCheckTest.java | 14 +++++++++++ .../InputMethodNameOverridenMethods.java | 23 +++++++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 src/test/resources/com/puppycrawl/tools/checkstyle/naming/InputMethodNameOverridenMethods.java diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/naming/MethodNameCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/naming/MethodNameCheck.java index 2a6f29e37..d989f3ce0 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/naming/MethodNameCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/naming/MethodNameCheck.java @@ -18,6 +18,7 @@ //////////////////////////////////////////////////////////////////////////////// package com.puppycrawl.tools.checkstyle.checks.naming; +import com.puppycrawl.tools.checkstyle.api.AnnotationUtility; import com.puppycrawl.tools.checkstyle.api.DetailAST; import com.puppycrawl.tools.checkstyle.api.TokenTypes; @@ -35,6 +36,8 @@ import com.puppycrawl.tools.checkstyle.api.TokenTypes; * The default is false (it is not allowed). It is legal in Java to have * method with the same name as a class. As long as a return type is specified * it is a method and not a constructor which it could be easily confused as. + *

Does not check-style the name of an overriden methods

because the developer does not + * have a choice in renaming such methods. *

* *

@@ -64,6 +67,7 @@ import com.puppycrawl.tools.checkstyle.api.TokenTypes; * * @author Oliver Burn * @author Travis Schneeberger + * @author Utkarsh Srivastava * @version 1.1 */ public class MethodNameCheck @@ -74,6 +78,16 @@ public class MethodNameCheck */ private boolean mAllowClassName; + /** + * {@link Override Override} annotation name. + */ + private static final String OVERRIDE = "Override"; + + /** + * Canonical {@link Override Override} annotation name. + */ + private static final String CANONICAL_OVERRIDE = "java.lang." + OVERRIDE; + /** Creates a new MethodNameCheck instance. */ public MethodNameCheck() { @@ -89,7 +103,11 @@ public class MethodNameCheck @Override public void visitToken(DetailAST aAst) { - super.visitToken(aAst); // Will check the name against the format. + if (!AnnotationUtility.containsAnnotation(aAst, OVERRIDE) + && !AnnotationUtility.containsAnnotation(aAst, CANONICAL_OVERRIDE)) + { + super.visitToken(aAst); // Will check the name against the format. + } if (!mAllowClassName) { final DetailAST method = diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/naming/MethodNameCheckTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/naming/MethodNameCheckTest.java index 6a0070c8f..08ca55499 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/naming/MethodNameCheckTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/naming/MethodNameCheckTest.java @@ -111,4 +111,18 @@ public class MethodNameCheckTest verify(checkConfig, getPath("naming/InputMethodNameExtra.java"), expected); } + + @Test + public void testOverridenMethods() throws Exception + { + final DefaultConfiguration checkConfig = + createCheckConfig(MethodNameCheck.class); + + final String[] expected = { + "17:17: Name 'PUBLICfoo' must match pattern '^[a-z][a-zA-Z0-9]*$'.", + "20:20: Name 'PROTECTEDfoo' must match pattern '^[a-z][a-zA-Z0-9]*$'.", + }; + + verify(checkConfig, getPath("naming/InputMethodNameOverridenMethods.java"), expected); + } } diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/naming/InputMethodNameOverridenMethods.java b/src/test/resources/com/puppycrawl/tools/checkstyle/naming/InputMethodNameOverridenMethods.java new file mode 100644 index 000000000..9dd2e020e --- /dev/null +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/naming/InputMethodNameOverridenMethods.java @@ -0,0 +1,23 @@ +package com.puppycrawl.tools.checkstyle.naming; + +public class InputMethodNameOverridenMethods extends SomeClass +{ + @Override + public void PUBLICfoo() { //Ignored due to impossibility of change by developer + + } + + @java.lang.Override + protected void PROTECTEDfoo() { //Ignored due to impossibility of change by developer + + } +} + +class SomeClass { + public void PUBLICfoo() { //Warning (broken naming convention) + + } + protected void PROTECTEDfoo() { //Warning (broken naming convention) + + } +}