]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-4326 support tags in deprecated rule API
authorSimon Brandhof <simon.brandhof@gmail.com>
Tue, 18 Feb 2014 10:41:58 +0000 (11:41 +0100)
committerSimon Brandhof <simon.brandhof@gmail.com>
Tue, 18 Feb 2014 10:42:07 +0000 (11:42 +0100)
sonar-deprecated/src/main/java/org/sonar/api/rules/AnnotationRuleParser.java
sonar-deprecated/src/main/java/org/sonar/api/rules/XMLRuleParser.java
sonar-plugin-api/src/main/java/org/sonar/api/rules/Rule.java
sonar-server/src/main/java/org/sonar/server/rule/DeprecatedRuleDefinitions.java
sonar-server/src/test/java/org/sonar/server/rule/DeprecatedRuleDefinitionsTest.java

index f800e45c045b35d1bc3f2c6b2804eb2474913333..a5ce13160d8d97eae81eaa5ca2575b2813cdc86b 100644 (file)
@@ -72,6 +72,7 @@ public final class AnnotationRuleParser implements ServerComponent {
     rule.setSeverity(RulePriority.fromCheckPriority(ruleAnnotation.priority()));
     rule.setCardinality(ruleAnnotation.cardinality());
     rule.setStatus(ruleAnnotation.status());
+    rule.setTags(ruleAnnotation.tags());
 
     List<Field> fields = FieldUtils2.getFields(clazz, true);
     for (Field field : fields) {
index 17a60afeb7433baca6f7badde6e1f86bd3b96342..fc2b7f7a0cb7caddf8d3c9bd6931319c3ad0cabf 100644 (file)
@@ -21,6 +21,7 @@ package org.sonar.api.rules;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.io.Closeables;
 import org.apache.commons.io.FileUtils;
@@ -126,6 +127,7 @@ public final class XMLRuleParser implements ServerComponent {
       rule.setSeverity(RulePriority.valueOf(StringUtils.trim(priorityAttribute)));
     }
 
+    List<String> tags = Lists.newArrayList();
     SMInputCursor cursor = ruleC.childElementCursor();
 
     while (cursor.getNext() != null) {
@@ -154,11 +156,15 @@ public final class XMLRuleParser implements ServerComponent {
 
       } else if (StringUtils.equalsIgnoreCase("param", nodeName)) {
         processParameter(rule, cursor);
+
+      } else if (StringUtils.equalsIgnoreCase("tag", nodeName)) {
+        tags.add(StringUtils.trim(cursor.collectDescendantText(false)));
       }
     }
     if (Strings.isNullOrEmpty(rule.getKey())) {
       throw new SonarException("Node <key> is missing in <rule>");
     }
+    rule.setTags(tags.toArray(new String[tags.size()]));
   }
 
   private static void processParameter(Rule rule, SMInputCursor ruleC) throws XMLStreamException {
index c3596856c74dfd118874b8672802855503eefa45..b8fe707197097f3c4b4ea5db415d5a8adf60cd0a 100644 (file)
@@ -36,10 +36,7 @@ import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
 import javax.persistence.*;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 @Entity
 @Table(name = "rules")
@@ -72,6 +69,11 @@ public class Rule {
    */
   private static final Set<String> STATUS_LIST = ImmutableSet.of(STATUS_READY, STATUS_BETA, STATUS_DEPRECATED, STATUS_REMOVED);
 
+  /**
+   * @since 4.2
+   */
+  private static final String[] DEFAULT_TAGS = new String[0];
+
   @Id
   @Column(name = "id")
   @GeneratedValue
@@ -127,12 +129,13 @@ public class Rule {
   @Column(name = "updated_at", updatable = true, nullable = true)
   private Date updatedAt;
 
+  private transient String[] tags = DEFAULT_TAGS;
+
   /**
    * @deprecated since 2.3. Use the factory method {@link #create()}
    */
   @Deprecated
   public Rule() {
-    // TODO reduce visibility to packaete
   }
 
   /**
@@ -422,6 +425,20 @@ public class Rule {
     return this;
   }
 
+  /**
+   * For definition of rule only
+   */
+  public String[] getTags() {
+    return tags;
+  }
+
+  /**
+   * For definition of rule only
+   */
+  public void setTags(String[] tags) {
+    this.tags = tags;
+  }
+
   @Override
   public boolean equals(Object obj) {
     if (!(obj instanceof Rule)) {
index c2e7fb43158346a35fb35745e8ffcab80baddda8..650aae01ff03d3a47dbb497d635787d444ab6acf 100644 (file)
@@ -67,6 +67,7 @@ public class DeprecatedRuleDefinitions implements RuleDefinitions {
         newRule.setTemplate(Cardinality.MULTIPLE.equals(rule.getCardinality()));
         newRule.setSeverity(rule.getSeverity().toString());
         newRule.setStatus(rule.getStatus() == null ? RuleStatus.defaultStatus() : RuleStatus.valueOf(rule.getStatus()));
+        newRule.setTags(rule.getTags());
         for (RuleParam param : rule.getParams()) {
           NewParam newParam = newRule.newParam(param.getKey());
           newParam.setDefaultValue(param.getDefaultValue());
index e6f07bf631187eea8d27c6266415c723548d0ba3..5937637d48db49e7ed8ad801fcc0e4ff75d71c7f 100644 (file)
@@ -50,6 +50,7 @@ public class DeprecatedRuleDefinitionsTest {
       rule.setConfigKey("Checker/TreeWalker/ConstantName");
       rule.setSeverity(RulePriority.BLOCKER);
       rule.setStatus(Rule.STATUS_BETA);
+      rule.setTags(new String[]{"style", "security"});
       rule.createParameter("format").setDescription("Regular expression").setDefaultValue("A-Z").setType("REGULAR_EXPRESSION");
       return Arrays.asList(rule);
     }
@@ -77,7 +78,7 @@ public class DeprecatedRuleDefinitionsTest {
     assertThat(rule.severity()).isEqualTo(Severity.BLOCKER);
     assertThat(rule.internalKey()).isEqualTo("Checker/TreeWalker/ConstantName");
     assertThat(rule.status()).isEqualTo(RuleStatus.BETA);
-    assertThat(rule.tags()).isEmpty();
+    assertThat(rule.tags()).containsOnly("style", "security");
     assertThat(rule.params()).hasSize(1);
     RuleDefinitions.Param param = rule.param("format");
     assertThat(param).isNotNull();