From 2bf724effc3c43a43fbe254dd81985f618be8eee Mon Sep 17 00:00:00 2001 From: Oliver Burn Date: Sat, 12 Dec 2009 04:10:23 +0000 Subject: [PATCH] Enhanced the naming checks ConstantName, MemberName, MethodName and StaticVariableName to utilise the access control tuning features of AbstractAccessControlNameCheck. Thanks to Steve McKay for patch #2893581. --- .../checks/naming/ConstantNameCheck.java | 2 +- .../checks/naming/MemberNameCheck.java | 1 - .../checks/naming/MethodNameCheck.java | 3 +- .../naming/StaticVariableNameCheck.java | 1 + .../checkstyle/InputMethNameEqualClsName.java | 19 ++++--- .../checks/naming/ConstantNameCheckTest.java | 15 ++++++ .../checks/naming/MethodNameCheckTest.java | 49 +++++++++++++------ .../naming/StaticVariableNameCheckTest.java | 13 +++++ src/xdocs/releasenotes.xml | 7 ++- 9 files changed, 85 insertions(+), 25 deletions(-) diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/ConstantNameCheck.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/ConstantNameCheck.java index eeca4453f..cb8ce8c9a 100644 --- a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/ConstantNameCheck.java +++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/ConstantNameCheck.java @@ -81,7 +81,7 @@ public class ConstantNameCheck final boolean isFinal = (modifiersAST != null) && modifiersAST.branchContains(TokenTypes.FINAL); - if ((isStatic && isFinal) + if ((isStatic && isFinal && shouldCheckInScope(modifiersAST)) || ScopeUtils.inInterfaceOrAnnotationBlock(aAST)) { // Handle the serialVersionUID and serialPersistentFields constants diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/MemberNameCheck.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/MemberNameCheck.java index 4909f7b2b..34f647e86 100644 --- a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/MemberNameCheck.java +++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/MemberNameCheck.java @@ -74,7 +74,6 @@ public class MemberNameCheck return (!isStatic && !ScopeUtils.inInterfaceOrAnnotationBlock(aAST) && !ScopeUtils.isLocalVariableDef(aAST)) - && (modifiersAST != null) && shouldCheckInScope(modifiersAST); } diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/MethodNameCheck.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/MethodNameCheck.java index cace6b6de..9a7f7ae16 100644 --- a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/MethodNameCheck.java +++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/MethodNameCheck.java @@ -66,7 +66,8 @@ import com.puppycrawl.tools.checkstyle.api.TokenTypes; * @author Travis Schneeberger * @version 1.1 */ -public class MethodNameCheck extends AbstractNameCheck +public class MethodNameCheck + extends AbstractAccessControlNameCheck { /** * for allowing method name to be the same as the class name. diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/StaticVariableNameCheck.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/StaticVariableNameCheck.java index e0639b5c0..1d2ff3722 100644 --- a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/StaticVariableNameCheck.java +++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/StaticVariableNameCheck.java @@ -74,6 +74,7 @@ public class StaticVariableNameCheck return (isStatic && !isFinal + && shouldCheckInScope(modifiersAST) && !ScopeUtils.inInterfaceOrAnnotationBlock(aAST)); } } diff --git a/src/testinputs/com/puppycrawl/tools/checkstyle/InputMethNameEqualClsName.java b/src/testinputs/com/puppycrawl/tools/checkstyle/InputMethNameEqualClsName.java index 9c520c5e8..0dbf32610 100644 --- a/src/testinputs/com/puppycrawl/tools/checkstyle/InputMethNameEqualClsName.java +++ b/src/testinputs/com/puppycrawl/tools/checkstyle/InputMethNameEqualClsName.java @@ -1,9 +1,9 @@ package com.puppycrawl.tools.checkstyle; /** - * Test input for MethodNameCheck specifically + * Test input for MethodNameCheck specifically * whether the method name equals the class name. - * + * * @author Travis Schneeberger */ public class InputMethNameEqualClsName { @@ -12,22 +12,27 @@ public class InputMethNameEqualClsName { public int InputMethNameEqualClsName() { return 0; } - - class Inner { + + //illegal name + private int PRIVATEInputMethNameEqualClsName() { + return 0; + } + + class Inner { //illegal name public int Inner() { return 0; } - + //OK name - name of the outter class's ctor public int InputMethNameEqualClsName() { return 0; } } - + public void anotherMethod() { new InputMethNameEqualClsName() { - + //illegal name public int InputMethNameEqualClsName() { return 1; diff --git a/src/tests/com/puppycrawl/tools/checkstyle/checks/naming/ConstantNameCheckTest.java b/src/tests/com/puppycrawl/tools/checkstyle/checks/naming/ConstantNameCheckTest.java index eabb09f1a..29ac3ad18 100644 --- a/src/tests/com/puppycrawl/tools/checkstyle/checks/naming/ConstantNameCheckTest.java +++ b/src/tests/com/puppycrawl/tools/checkstyle/checks/naming/ConstantNameCheckTest.java @@ -39,6 +39,21 @@ public class ConstantNameCheckTest verify(checkConfig, getPath("InputSimple.java"), expected); } + @Test + public void testAccessControlTuning() + throws Exception + { + final DefaultConfiguration checkConfig = + createCheckConfig(ConstantNameCheck.class); + checkConfig.addAttribute("applyToPublic", "false"); + checkConfig.addAttribute("applyToProtected", "false"); + checkConfig.addAttribute("applyToPackage", "false"); + final String[] expected = { + "142:30: Name 'BAD__NAME' must match pattern '^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$'." + }; + verify(checkConfig, getPath("InputSimple.java"), expected); + } + @Test public void testInterfaceAndAnnotation() throws Exception diff --git a/src/tests/com/puppycrawl/tools/checkstyle/checks/naming/MethodNameCheckTest.java b/src/tests/com/puppycrawl/tools/checkstyle/checks/naming/MethodNameCheckTest.java index f400a91cf..c2bd2a482 100644 --- a/src/tests/com/puppycrawl/tools/checkstyle/checks/naming/MethodNameCheckTest.java +++ b/src/tests/com/puppycrawl/tools/checkstyle/checks/naming/MethodNameCheckTest.java @@ -28,15 +28,16 @@ public class MethodNameCheckTest final String[] expected = { "12:16: Method Name 'InputMethNameEqualClsName' must not equal the enclosing class name.", "12:16: Name 'InputMethNameEqualClsName' must match pattern '^[a-z][a-zA-Z0-9]*$'.", - "18:20: Method Name 'Inner' must not equal the enclosing class name.", - "18:20: Name 'Inner' must match pattern '^[a-z][a-zA-Z0-9]*$'.", - "23:20: Name 'InputMethNameEqualClsName' must match pattern '^[a-z][a-zA-Z0-9]*$'.", - "32:24: Method Name 'InputMethNameEqualClsName' must not equal the enclosing class name.", - "32:24: Name 'InputMethNameEqualClsName' must match pattern '^[a-z][a-zA-Z0-9]*$'.", - "42:9: Method Name 'SweetInterface' must not equal the enclosing class name.", - "42:9: Name 'SweetInterface' must match pattern '^[a-z][a-zA-Z0-9]*$'.", - "48:17: Method Name 'Outter' must not equal the enclosing class name.", - "48:17: Name 'Outter' must match pattern '^[a-z][a-zA-Z0-9]*$'.", + "17:17: Name 'PRIVATEInputMethNameEqualClsName' must match pattern '^[a-z][a-zA-Z0-9]*$'.", + "23:20: Method Name 'Inner' must not equal the enclosing class name.", + "23:20: Name 'Inner' must match pattern '^[a-z][a-zA-Z0-9]*$'.", + "28:20: Name 'InputMethNameEqualClsName' must match pattern '^[a-z][a-zA-Z0-9]*$'.", + "37:24: Method Name 'InputMethNameEqualClsName' must not equal the enclosing class name.", + "37:24: Name 'InputMethNameEqualClsName' must match pattern '^[a-z][a-zA-Z0-9]*$'.", + "47:9: Method Name 'SweetInterface' must not equal the enclosing class name.", + "47:9: Name 'SweetInterface' must match pattern '^[a-z][a-zA-Z0-9]*$'.", + "53:17: Method Name 'Outter' must not equal the enclosing class name.", + "53:17: Name 'Outter' must match pattern '^[a-z][a-zA-Z0-9]*$'.", }; verify(checkConfig, getPath("InputMethNameEqualClsName.java"), expected); @@ -51,11 +52,31 @@ public class MethodNameCheckTest final String[] expected = { "12:16: Name 'InputMethNameEqualClsName' must match pattern '^[a-z][a-zA-Z0-9]*$'.", - "18:20: Name 'Inner' must match pattern '^[a-z][a-zA-Z0-9]*$'.", - "23:20: Name 'InputMethNameEqualClsName' must match pattern '^[a-z][a-zA-Z0-9]*$'.", - "32:24: Name 'InputMethNameEqualClsName' must match pattern '^[a-z][a-zA-Z0-9]*$'.", - "42:9: Name 'SweetInterface' must match pattern '^[a-z][a-zA-Z0-9]*$'.", - "48:17: Name 'Outter' must match pattern '^[a-z][a-zA-Z0-9]*$'.", + "17:17: Name 'PRIVATEInputMethNameEqualClsName' must match pattern '^[a-z][a-zA-Z0-9]*$'.", + "23:20: Name 'Inner' must match pattern '^[a-z][a-zA-Z0-9]*$'.", + "28:20: Name 'InputMethNameEqualClsName' must match pattern '^[a-z][a-zA-Z0-9]*$'.", + "37:24: Name 'InputMethNameEqualClsName' must match pattern '^[a-z][a-zA-Z0-9]*$'.", + "47:9: Name 'SweetInterface' must match pattern '^[a-z][a-zA-Z0-9]*$'.", + "53:17: Name 'Outter' must match pattern '^[a-z][a-zA-Z0-9]*$'.", + }; + + verify(checkConfig, getPath("InputMethNameEqualClsName.java"), expected); + } + + @Test + public void testAccessTuning() throws Exception + { + final DefaultConfiguration checkConfig = + createCheckConfig(MethodNameCheck.class); + checkConfig.addAttribute("allowClassName", "true"); //allow method names and class names to equal + checkConfig.addAttribute("applyToPrivate", "false"); //allow method names and class names to equal + final String[] expected = { + "12:16: Name 'InputMethNameEqualClsName' must match pattern '^[a-z][a-zA-Z0-9]*$'.", + "23:20: Name 'Inner' must match pattern '^[a-z][a-zA-Z0-9]*$'.", + "28:20: Name 'InputMethNameEqualClsName' must match pattern '^[a-z][a-zA-Z0-9]*$'.", + "37:24: Name 'InputMethNameEqualClsName' must match pattern '^[a-z][a-zA-Z0-9]*$'.", + "47:9: Name 'SweetInterface' must match pattern '^[a-z][a-zA-Z0-9]*$'.", + "53:17: Name 'Outter' must match pattern '^[a-z][a-zA-Z0-9]*$'.", }; verify(checkConfig, getPath("InputMethNameEqualClsName.java"), expected); diff --git a/src/tests/com/puppycrawl/tools/checkstyle/checks/naming/StaticVariableNameCheckTest.java b/src/tests/com/puppycrawl/tools/checkstyle/checks/naming/StaticVariableNameCheckTest.java index 71102a41f..c0be00fda 100644 --- a/src/tests/com/puppycrawl/tools/checkstyle/checks/naming/StaticVariableNameCheckTest.java +++ b/src/tests/com/puppycrawl/tools/checkstyle/checks/naming/StaticVariableNameCheckTest.java @@ -19,5 +19,18 @@ public class StaticVariableNameCheckTest }; verify(checkConfig, getPath("InputSimple.java"), expected); } + + @Test + public void testAccessTuning() + throws Exception + { + final DefaultConfiguration checkConfig = + createCheckConfig(StaticVariableNameCheck.class); + checkConfig.addAttribute("format", "^s[A-Z][a-zA-Z0-9]*$"); + checkConfig.addAttribute("applyToPrivate", "false"); // allow method names and class names to equal + final String[] expected = { + }; + verify(checkConfig, getPath("InputSimple.java"), expected); + } } diff --git a/src/xdocs/releasenotes.xml b/src/xdocs/releasenotes.xml index 776fbbfe4..aa4fbb6e0 100755 --- a/src/xdocs/releasenotes.xml +++ b/src/xdocs/releasenotes.xml @@ -12,7 +12,12 @@

New features:

Bug fixes: