diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/AbstractNameCheck.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/AbstractNameCheck.java index af969cce3..0b4d6416c 100644 --- a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/AbstractNameCheck.java +++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/AbstractNameCheck.java @@ -32,6 +32,11 @@ import com.puppycrawl.tools.checkstyle.checks.AbstractFormatCheck; public abstract class AbstractNameCheck extends AbstractFormatCheck { + /** + * Message key for invalid pattern error. + */ + public static final String MSG_INVALID_PATTERN = "name.invalidPattern"; + /** * Creates a new AbstractNameCheck instance. * @param aFormat format to check with @@ -61,7 +66,7 @@ public abstract class AbstractNameCheck if (!getRegexp().matcher(nameAST.getText()).find()) { log(nameAST.getLineNo(), nameAST.getColumnNo(), - "name.invalidPattern", + MSG_INVALID_PATTERN, nameAST.getText(), getFormat()); } diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/TypeNameCheck.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/TypeNameCheck.java index 7462a0ba0..46f4ab4dd 100644 --- a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/TypeNameCheck.java +++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/TypeNameCheck.java @@ -48,12 +48,17 @@ public class TypeNameCheck extends AbstractAccessControlNameCheck { + /** + * default pattern for type name. + */ + public static final String DEFAULT_PATTERN = "^[A-Z][a-zA-Z0-9]*$"; + /** * Creates a new TypeNameCheck instance. */ public TypeNameCheck() { - super("^[A-Z][a-zA-Z0-9]*$"); + super(DEFAULT_PATTERN); } /** {@inheritDoc} */ @@ -61,6 +66,8 @@ public class TypeNameCheck public int[] getDefaultTokens() { return new int[] {TokenTypes.CLASS_DEF, - TokenTypes.INTERFACE_DEF, }; + TokenTypes.INTERFACE_DEF, + TokenTypes.ENUM_DEF, + }; } } diff --git a/src/testinputs/com/puppycrawl/tools/checkstyle/naming/InputTypeName.java b/src/testinputs/com/puppycrawl/tools/checkstyle/naming/InputTypeName.java new file mode 100644 index 000000000..add423bb9 --- /dev/null +++ b/src/testinputs/com/puppycrawl/tools/checkstyle/naming/InputTypeName.java @@ -0,0 +1,9 @@ +package com.puppycrawl.tools.checkstyle.naming; + +class inputHeaderClass { + + public interface inputHeaderInterface {}; + + public enum inputHeaderEnum { one, two }; + +} diff --git a/src/tests/com/puppycrawl/tools/checkstyle/checks/naming/TypeNameCheckTest.java b/src/tests/com/puppycrawl/tools/checkstyle/checks/naming/TypeNameCheckTest.java index 1999f49b1..c5ecd71f8 100644 --- a/src/tests/com/puppycrawl/tools/checkstyle/checks/naming/TypeNameCheckTest.java +++ b/src/tests/com/puppycrawl/tools/checkstyle/checks/naming/TypeNameCheckTest.java @@ -18,23 +18,42 @@ //////////////////////////////////////////////////////////////////////////////// package com.puppycrawl.tools.checkstyle.checks.naming; +import java.io.File; +import java.io.IOException; +import java.text.MessageFormat; + +import org.junit.Test; + import com.puppycrawl.tools.checkstyle.BaseCheckTestSupport; import com.puppycrawl.tools.checkstyle.DefaultConfiguration; -import org.junit.Test; public class TypeNameCheckTest extends BaseCheckTestSupport { + + /** + * Localized error message from @link {@link TypeNameCheck}. + */ + private final String msg = getCheckMessage(AbstractNameCheck.MSG_INVALID_PATTERN); + + private final String inputFilename; + + public TypeNameCheckTest() throws IOException + { + inputFilename = getPath("naming" + File.separator + + "InputTypeName.java"); + } + @Test public void testSpecified() throws Exception { final DefaultConfiguration checkConfig = - createCheckConfig(TypeNameCheck.class); + createCheckConfig(TypeNameCheck.class); checkConfig.addAttribute("format", "^inputHe"); final String[] expected = { }; - verify(checkConfig, getPath("inputHeader.java"), expected); + verify(checkConfig, inputFilename, expected); } @Test @@ -42,10 +61,65 @@ public class TypeNameCheckTest throws Exception { final DefaultConfiguration checkConfig = - createCheckConfig(TypeNameCheck.class); + createCheckConfig(TypeNameCheck.class); final String[] expected = { - "1:48: Name 'inputHeader' must match pattern '^[A-Z][a-zA-Z0-9]*$'.", + buildMesssage(3, 7, "inputHeaderClass", + TypeNameCheck.DEFAULT_PATTERN), + buildMesssage(5, 22, "inputHeaderInterface", + TypeNameCheck.DEFAULT_PATTERN), + buildMesssage(7, 17, "inputHeaderEnum", + TypeNameCheck.DEFAULT_PATTERN), }; - verify(checkConfig, getPath("inputHeader.java"), expected); + verify(checkConfig, inputFilename, expected); } + + @Test + public void testClassSpecific() + throws Exception + { + final DefaultConfiguration checkConfig = + createCheckConfig(TypeNameCheck.class); + checkConfig.addAttribute("tokens", "CLASS_DEF"); + final String[] expected = { + buildMesssage(3, 7, "inputHeaderClass", + TypeNameCheck.DEFAULT_PATTERN), + }; + verify(checkConfig, inputFilename, expected); + } + + @Test + public void testInterfaceSpecific() + throws Exception + { + final DefaultConfiguration checkConfig = + createCheckConfig(TypeNameCheck.class); + checkConfig.addAttribute("tokens", "INTERFACE_DEF"); + final String[] expected = { + buildMesssage(5, 22, "inputHeaderInterface", + TypeNameCheck.DEFAULT_PATTERN), + }; + verify(checkConfig, inputFilename, expected); + } + + @Test + public void testEnumSpecific() + throws Exception + { + final DefaultConfiguration checkConfig = + createCheckConfig(TypeNameCheck.class); + checkConfig.addAttribute("tokens", "ENUM_DEF"); + final String[] expected = { + buildMesssage(7, 17, "inputHeaderEnum", + TypeNameCheck.DEFAULT_PATTERN), + }; + verify(checkConfig, inputFilename, expected); + } + + private String buildMesssage(int lineNumber, int colNumber, String name, + String pattern) + { + return lineNumber + ":" + colNumber + ": " + + MessageFormat.format(msg, name, pattern); + } + } diff --git a/src/xdocs/config_naming.xml b/src/xdocs/config_naming.xml index 17d57fbdd..7dfc1e12f 100644 --- a/src/xdocs/config_naming.xml +++ b/src/xdocs/config_naming.xml @@ -111,7 +111,7 @@ TypeName - classes and interfaces + classes, interfaces and enums ^[A-Z][a-zA-Z0-9]*$ @@ -142,8 +142,9 @@

Module TypeName also has property tokens which can be used to control whether the - check applies to classes or interfaces through tokens - CLASS_DEF and INTERFACE_DEF. For + check applies to classes, interfaces and enums through tokens + CLASS_DEF, INTERFACE_DEF and + ENUM_DEF. For example, the following configuration element ensures that interface names begin with "I_", followed by letters and digits: