From e46c443af046b065671f0db5c8a5df9f0985589c Mon Sep 17 00:00:00 2001 From: rnveach Date: Sat, 31 Oct 2015 11:32:51 -0400 Subject: [PATCH] Issue #2451: removed excess hierarchy from AbstractClassNameCheck --- config/suppressions.xml | 2 +- .../checks/naming/AbstractClassNameCheck.java | 33 ++++++++++++------- .../tools/checkstyle/XDocsPagesTest.java | 1 - .../naming/AbstractClassNameCheckTest.java | 20 +++++++++++ 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"/> - + 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; /** *

@@ -39,7 +42,7 @@ import com.puppycrawl.tools.checkstyle.checks.AbstractFormatCheck; * @author Simon Harris * @author Danil Lopatin */ -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 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 @@ -59,6 +59,26 @@ public class AbstractClassNameCheckTest extends BaseCheckTestSupport { verify(checkConfig, getPath("InputAbstractClassName.java"), expected); } + @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);