]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-1932: Create a SQUID rule : instruction "continue" should not be used
authorGodin <mandrikov@gmail.com>
Sat, 13 Nov 2010 00:42:45 +0000 (00:42 +0000)
committerGodin <mandrikov@gmail.com>
Sat, 13 Nov 2010 00:42:45 +0000 (00:42 +0000)
plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/ast/check/ContinueCheck.java [new file with mode: 0644]
plugins/sonar-squid-java-plugin/src/main/java/org/sonar/plugins/squid/SquidRuleRepository.java
plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/ast/check/ContinueCheckTest.java [new file with mode: 0644]

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 (file)
index 0000000..c99e901
--- /dev/null
@@ -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<Integer> 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<Integer> wantedTokens = Arrays.asList(TokenTypes.LITERAL_CONTINUE);
+
+}
index 1c28b34a6b5481f81820c262da036c70fb2df538..ac60617e3439d50a575959c846ded3b622243aa1 100644 (file)
@@ -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 (file)
index 0000000..9729d35
--- /dev/null
@@ -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));
+  }
+
+}