From: Godin Date: Sat, 13 Nov 2010 00:42:45 +0000 (+0000) Subject: SONAR-1932: Create a SQUID rule : instruction "continue" should not be used X-Git-Tag: 2.6~589 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=f98a1c7fc2a3349d861997cc2cc16c97e29b60ae;p=sonarqube.git SONAR-1932: Create a SQUID rule : instruction "continue" should not be used --- diff --git a/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/ast/check/ContinueCheck.java b/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/ast/check/ContinueCheck.java new file mode 100644 index 00000000000..c99e9019bb1 --- /dev/null +++ b/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/ast/check/ContinueCheck.java @@ -0,0 +1,34 @@ +package org.sonar.java.ast.check; + +import java.util.Arrays; +import java.util.List; + +import org.sonar.check.IsoCategory; +import org.sonar.check.Rule; +import org.sonar.squid.api.CheckMessage; +import org.sonar.squid.api.SourceCode; +import org.sonar.squid.api.SourceFile; + +import com.puppycrawl.tools.checkstyle.api.DetailAST; +import com.puppycrawl.tools.checkstyle.api.TokenTypes; + +@Rule(key = "AvoidUsageOfContinue", isoCategory = IsoCategory.Maintainability) +public class ContinueCheck extends JavaAstCheck { + + @Override + public List getWantedTokens() { + return wantedTokens; + } + + @Override + public void visitToken(DetailAST ast) { + SourceCode currentResource = peekSourceCode(); + CheckMessage message = new CheckMessage(this, "Avoid usage of continue"); + message.setLine(ast.getLineNo()); + SourceFile sourceFile = currentResource.getParent(SourceFile.class); + sourceFile.log(message); + } + + private static final List wantedTokens = Arrays.asList(TokenTypes.LITERAL_CONTINUE); + +} diff --git a/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/plugins/squid/SquidRuleRepository.java b/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/plugins/squid/SquidRuleRepository.java index 1c28b34a6b5..ac60617e343 100644 --- a/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/plugins/squid/SquidRuleRepository.java +++ b/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/plugins/squid/SquidRuleRepository.java @@ -7,6 +7,7 @@ import org.sonar.api.resources.Java; import org.sonar.api.rules.AnnotationRuleParser; import org.sonar.api.rules.Rule; import org.sonar.api.rules.RuleRepository; +import org.sonar.java.ast.check.ContinueCheck; import org.sonar.java.ast.check.UndocumentedApiCheck; import org.sonar.java.bytecode.check.ArchitectureCheck; import org.sonar.java.bytecode.check.CallToDeprecatedMethodCheck; @@ -34,6 +35,6 @@ public final class SquidRuleRepository extends RuleRepository { (Class) CallToDeprecatedMethodCheck.class, UnusedPrivateMethodCheck.class, UnusedProtectedMethodCheck.class, ArchitectureCheck.class, DITCheck.class, // AST checks - UndocumentedApiCheck.class); + UndocumentedApiCheck.class, ContinueCheck.class); } } diff --git a/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/ast/check/ContinueCheckTest.java b/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/ast/check/ContinueCheckTest.java new file mode 100644 index 00000000000..9729d359805 --- /dev/null +++ b/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/ast/check/ContinueCheckTest.java @@ -0,0 +1,35 @@ +package org.sonar.java.ast.check; + +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; +import static org.sonar.java.ast.SquidTestUtils.getFile; + +import org.junit.Before; +import org.junit.Test; +import org.sonar.java.ast.JavaAstScanner; +import org.sonar.java.squid.JavaSquidConfiguration; +import org.sonar.squid.Squid; +import org.sonar.squid.api.CheckMessage; +import org.sonar.squid.api.SourceFile; + +public class ContinueCheckTest { + + private Squid squid; + + @Before + public void setUp() { + squid = new Squid(new JavaSquidConfiguration()); + squid.registerVisitor(ContinueCheck.class); + squid.register(JavaAstScanner.class).scanFile( + getFile("/commons-collections-3.2.1/src/org/apache/commons/collections/ExtendedProperties.java")); + } + + @Test + public void testAvoidUsageOfContinue() { + SourceFile file = (SourceFile) squid.search("org/apache/commons/collections/ExtendedProperties.java"); + assertThat(file.getCheckMessages().size(), is(1)); + CheckMessage message = file.getCheckMessages().iterator().next(); + assertThat(message.getLine(), is(566)); + } + +}