diff options
4 files changed, 43 insertions, 13 deletions
diff --git a/config/suppressions.xml b/config/suppressions.xml index 709aa6e0e..9e6db7ab4 100644 --- a/config/suppressions.xml +++ b/config/suppressions.xml @@ -42,7 +42,7 @@ files="AbstractClassNameCheckTest.java|AbstractTypeAwareCheckTest.java|AbstractJavadocCheckTest.java|AbstractViolationReporterTest.java"/> <!-- Tone down the checking for test code --> - <suppress checks="CyclomaticComplexity" files="[\\/]XDocsPagesTest\.java" lines="329"/> + <suppress checks="CyclomaticComplexity" files="[\\/]XDocsPagesTest\.java" lines="328"/> <suppress checks="EmptyBlock" files=".*[\\/]src[\\/]test[\\/]"/> <suppress checks="ImportControl" files=".*[\\/]src[\\/](test|it)[\\/]"/> <suppress checks="Javadoc" files=".*[\\/]src[\\/](test|it)[\\/]"/> diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/naming/AbstractClassNameCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/naming/AbstractClassNameCheck.java index 6059bf308..d8b186f52 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/naming/AbstractClassNameCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/naming/AbstractClassNameCheck.java @@ -19,9 +19,12 @@ package com.puppycrawl.tools.checkstyle.checks.naming; +import java.util.regex.Pattern; + +import com.puppycrawl.tools.checkstyle.api.Check; import com.puppycrawl.tools.checkstyle.api.DetailAST; import com.puppycrawl.tools.checkstyle.api.TokenTypes; -import com.puppycrawl.tools.checkstyle.checks.AbstractFormatCheck; +import com.puppycrawl.tools.checkstyle.utils.CommonUtils; /** * <p> @@ -39,7 +42,7 @@ import com.puppycrawl.tools.checkstyle.checks.AbstractFormatCheck; * @author <a href="mailto:simon@redhillconsulting.com.au">Simon Harris</a> * @author <a href="mailto:solid.danil@gmail.com">Danil Lopatin</a> */ -public final class AbstractClassNameCheck extends AbstractFormatCheck { +public final class AbstractClassNameCheck extends Check { /** * A key is pointing to the warning message text in "messages.properties" @@ -53,19 +56,17 @@ public final class AbstractClassNameCheck extends AbstractFormatCheck { */ public static final String NO_ABSTRACT_CLASS_MODIFIER = "no.abstract.class.modifier"; - /** Default format for abstract class names. */ - private static final String DEFAULT_FORMAT = "^Abstract.+$"; - /** Whether to ignore checking the modifier. */ private boolean ignoreModifier; /** Whether to ignore checking the name. */ private boolean ignoreName; - /** Creates new instance of the check. */ - public AbstractClassNameCheck() { - super(DEFAULT_FORMAT); - } + /** The format string of the regexp. */ + private String format = "^Abstract.+$"; + + /** The regexp to match against. */ + private Pattern regexp = Pattern.compile(format); /** * Whether to ignore checking for the {@code abstract} modifier. @@ -83,6 +84,16 @@ public final class AbstractClassNameCheck extends AbstractFormatCheck { ignoreName = value; } + /** + * Set the format to the specified regular expression. + * @param format a {@code String} value + * @throws org.apache.commons.beanutils.ConversionException unable to parse format + */ + public void setFormat(String format) { + this.format = format; + regexp = CommonUtils.createPattern(format); + } + @Override public int[] getDefaultTokens() { return new int[]{TokenTypes.CLASS_DEF}; @@ -114,7 +125,7 @@ public final class AbstractClassNameCheck extends AbstractFormatCheck { // if class has abstract modifier if (!ignoreName && !isMatchingClassName(className)) { log(ast.getLineNo(), ast.getColumnNo(), - ILLEGAL_ABSTRACT_CLASS_NAME, className, getFormat()); + ILLEGAL_ABSTRACT_CLASS_NAME, className, format); } } else if (!ignoreModifier && isMatchingClassName(className)) { @@ -139,6 +150,6 @@ public final class AbstractClassNameCheck extends AbstractFormatCheck { * @return true if class name matches format of abstract class names. */ private boolean isMatchingClassName(String className) { - return getRegexp().matcher(className).find(); + return regexp.matcher(className).find(); } } diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/XDocsPagesTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/XDocsPagesTest.java index bacda83a7..b9196533d 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/XDocsPagesTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/XDocsPagesTest.java @@ -110,7 +110,6 @@ public class XDocsPagesTest { private static final List<String> UNDOCUMENTED_PROPERTIES = Arrays.asList( "SuppressWithNearbyCommentFilter.fileContents", - "AbstractClassNameCheck.compileFlags", "ClassTypeParameterNameCheck.compileFlags", "ConstantNameCheck.compileFlags", "InterfaceTypeParameterNameCheck.compileFlags", diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/naming/AbstractClassNameCheckTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/naming/AbstractClassNameCheckTest.java index 549d4659f..6df625e56 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/naming/AbstractClassNameCheckTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/naming/AbstractClassNameCheckTest.java @@ -60,6 +60,26 @@ public class AbstractClassNameCheckTest extends BaseCheckTestSupport { } @Test + public void testCustomFormat() throws Exception { + final DefaultConfiguration checkConfig = + createCheckConfig(AbstractClassNameCheck.class); + checkConfig.addAttribute("ignoreName", "false"); + checkConfig.addAttribute("ignoreModifier", "true"); + final String pattern = "^NonAbstract.+$"; + checkConfig.addAttribute("format", pattern); + + final String[] expected = { + "3:1: " + getCheckMessage(ILLEGAL_ABSTRACT_CLASS_NAME, "InputAbstractClassName", + pattern), + "9:1: " + getCheckMessage(ILLEGAL_ABSTRACT_CLASS_NAME, "AbstractClassOther", pattern), + "21:1: " + getCheckMessage(ILLEGAL_ABSTRACT_CLASS_NAME, "AbstractClassName2", + pattern), + }; + + verify(checkConfig, getPath("InputAbstractClassName.java"), expected); + } + + @Test public void testIllegalClassType() throws Exception { final DefaultConfiguration checkConfig = createCheckConfig(AbstractClassNameCheck.class); checkConfig.addAttribute("ignoreName", "true"); |