diff --git a/config/suppressions.xml b/config/suppressions.xml
index cab045e27..322b0a2ca 100644
--- a/config/suppressions.xml
+++ b/config/suppressions.xml
@@ -37,7 +37,7 @@
files="AbstractClassNameCheckTest.java|AbstractTypeAwareCheckTest.java|AbstractJavadocCheckTest.java|AbstractViolationReporterTest.java"/>
-
@@ -44,7 +44,7 @@ import com.puppycrawl.tools.checkstyle.utils.TokenUtils; * * @author o_sukhodolsky */ -public class MissingSwitchDefaultCheck extends DescendantTokenCheck { +public class MissingSwitchDefaultCheck extends Check { /** * A key is pointing to the warning message text in "messages.properties" @@ -52,14 +52,6 @@ public class MissingSwitchDefaultCheck extends DescendantTokenCheck { */ public static final String MSG_KEY = "missing.switch.default"; - /** Creates new instance of the check. */ - public MissingSwitchDefaultCheck() { - setLimitedTokens(TokenUtils.getTokenName(TokenTypes.LITERAL_DEFAULT)); - setMinimumNumber(1); - setMaximumDepth(2); - setMinimumMessage(MSG_KEY); - } - @Override public int[] getDefaultTokens() { return new int[]{TokenTypes.LITERAL_SWITCH}; @@ -74,4 +66,34 @@ public class MissingSwitchDefaultCheck extends DescendantTokenCheck { public int[] getRequiredTokens() { return getDefaultTokens(); } + + @Override + public void visitToken(DetailAST ast) { + final DetailAST firstCaseGroupAst = ast.findFirstToken(TokenTypes.CASE_GROUP); + + if (!containsDefaultSwitch(firstCaseGroupAst)) { + log(ast.getLineNo(), MSG_KEY); + } + } + + /** + * Checks if the case group or its sibling contain the 'default' switch. + * @param caseGroupAst first case group to check. + * @return true if 'default' switch found. + */ + private static boolean containsDefaultSwitch(DetailAST caseGroupAst) { + DetailAST nextAst = caseGroupAst; + boolean found = false; + + while (nextAst != null) { + if (nextAst.findFirstToken(TokenTypes.LITERAL_DEFAULT) != null) { + found = true; + break; + } + + nextAst = nextAst.getNextSibling(); + } + + return found; + } } diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/XDocsPagesTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/XDocsPagesTest.java index d154db530..cda73be0b 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/XDocsPagesTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/XDocsPagesTest.java @@ -131,14 +131,6 @@ public class XDocsPagesTest { "TypeNameCheck.compileFlags", "RegexpCheck.compileFlags", "SuppressionCommentFilter.fileContents", - "MissingSwitchDefaultCheck.limitedTokens", - "MissingSwitchDefaultCheck.maximumDepth", - "MissingSwitchDefaultCheck.maximumMessage", - "MissingSwitchDefaultCheck.maximumNumber", - "MissingSwitchDefaultCheck.minimumDepth", - "MissingSwitchDefaultCheck.minimumMessage", - "MissingSwitchDefaultCheck.minimumNumber", - "MissingSwitchDefaultCheck.sumTokenCounts", "MissingCtorCheck.limitedTokens", "MissingCtorCheck.maximumDepth", "MissingCtorCheck.maximumMessage", diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/MissingSwitchDefaultCheckTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/MissingSwitchDefaultCheckTest.java index 4c48e01fc..3ab87bde5 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/MissingSwitchDefaultCheckTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/MissingSwitchDefaultCheckTest.java @@ -49,7 +49,7 @@ public class MissingSwitchDefaultCheckTest @Test public void testMissingSwitchDefault() throws Exception { final String[] expected = { - "17:9: " + getCheckMessage(MSG_KEY, "default"), + "17: " + getCheckMessage(MSG_KEY, "default"), }; verify( checkConfig,