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^[A-Z][a-zA-Z0-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: