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"/> - + diff --git a/src/it/java/com/google/checkstyle/test/chapter4formatting/rule4843defaultcasepresent/MissingSwitchDefaultTest.java b/src/it/java/com/google/checkstyle/test/chapter4formatting/rule4843defaultcasepresent/MissingSwitchDefaultTest.java index 17914e2ed..af8ced75a 100644 --- a/src/it/java/com/google/checkstyle/test/chapter4formatting/rule4843defaultcasepresent/MissingSwitchDefaultTest.java +++ b/src/it/java/com/google/checkstyle/test/chapter4formatting/rule4843defaultcasepresent/MissingSwitchDefaultTest.java @@ -45,12 +45,12 @@ public class MissingSwitchDefaultTest extends BaseCheckTestSupport { "missing.switch.default"); final String[] expected = { - "11:9: " + msg, - "19:9: " + msg, - "23:9: " + msg, - "31:13: " + msg, - "38:21: " + msg, - "42:21: " + msg, + "11: " + msg, + "19: " + msg, + "23: " + msg, + "31: " + msg, + "38: " + msg, + "42: " + msg, }; final Configuration checkConfig = builder.getCheckConfig("MissingSwitchDefault"); diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/MissingSwitchDefaultCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/MissingSwitchDefaultCheck.java index 658d73aec..2f41a1bfa 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/MissingSwitchDefaultCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/MissingSwitchDefaultCheck.java @@ -19,9 +19,9 @@ package com.puppycrawl.tools.checkstyle.checks.coding; +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.DescendantTokenCheck; -import com.puppycrawl.tools.checkstyle.utils.TokenUtils; /** *

@@ -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,