]> source.dussan.org Git - sonarqube.git/commitdiff
Fix some quality flaws
authorSimon Brandhof <simon.brandhof@gmail.com>
Fri, 4 Apr 2014 14:56:26 +0000 (16:56 +0200)
committerSimon Brandhof <simon.brandhof@gmail.com>
Fri, 4 Apr 2014 14:56:26 +0000 (16:56 +0200)
12 files changed:
sonar-batch/src/main/java/org/sonar/batch/rule/RulesProvider.java
sonar-batch/src/test/java/org/sonar/batch/rule/RulesProviderTest.java
sonar-core/src/main/java/org/sonar/core/measure/MeasureFilter.java
sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterFactory.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/Rule.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/internal/DefaultRule.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/internal/NewRule.java
sonar-plugin-api/src/main/java/org/sonar/api/server/rule/RulesDefinition.java
sonar-plugin-api/src/main/java/org/sonar/api/server/rule/RulesDefinitionAnnotationLoader.java
sonar-plugin-api/src/test/java/org/sonar/api/batch/rule/internal/RulesBuilderTest.java
sonar-server/src/main/java/org/sonar/server/platform/DefaultServerUpgradeStatus.java
sonar-server/src/main/java/org/sonar/server/platform/RailsAppsDeployer.java

index 49b4cf95986051ff71b308e8d51f35aeca08ed08..3f1a487700d36b973db4969f3c183025466be139 100644 (file)
@@ -77,8 +77,8 @@ public class RulesProvider extends ProviderAdapter {
         .setName(ruleDto.getName())
         .setSeverity(ruleDto.getSeverityString())
         .setDescription(ruleDto.getDescription())
-        .setStatus(RuleStatus.valueOf(ruleDto.getStatus()));
-      // TODO should we set metadata ?
+        .setStatus(RuleStatus.valueOf(ruleDto.getStatus()))
+        .setInternalKey(ruleDto.getConfigKey());
 
       if (hasCharacteristic(ruleDto)) {
         newRule.setDebtSubCharacteristic(effectiveCharacteristic(ruleDto, ruleKey, debtModel).key());
index 3bf623aab5a9871bb476d9034284d9a7010fff04..42ab22fed38244b077e4811c439dbfb52d7e481c 100644 (file)
@@ -101,7 +101,7 @@ public class RulesProviderTest extends AbstractDaoTestCase {
     assertThat(rule.name()).isEqualTo("Avoid Null");
     assertThat(rule.description()).isEqualTo("Should avoid NULL");
     assertThat(rule.severity()).isEqualTo(Severity.MINOR);
-    assertThat(rule.metadata()).isNull();
+    assertThat(rule.internalKey()).isNull();
     assertThat(rule.params()).hasSize(1);
 
     RuleParam param = rule.param("myParameter");
index 4bed3ca31d12d2b7d473b9c517569b75b999d490..3b27ec556089049e2a13e8015463215ff7ff5896 100644 (file)
@@ -27,6 +27,7 @@ import org.apache.commons.lang.builder.ReflectionToStringBuilder;
 import org.sonar.api.measures.Metric;
 import org.sonar.api.resources.Qualifiers;
 
+import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
 
 import java.util.Collections;
@@ -141,20 +142,22 @@ public class MeasureFilter {
     return this;
   }
 
-  public MeasureFilter setFromDate(Date d) {
+  public MeasureFilter setFromDate(@Nullable Date d) {
     this.fromDate = d;
     return this;
   }
 
-  public MeasureFilter setToDate(Date d) {
+  public MeasureFilter setToDate(@Nullable Date d) {
     this.toDate = d;
     return this;
   }
 
+  @CheckForNull
   public Date getFromDate() {
     return fromDate;
   }
 
+  @CheckForNull
   public Date getToDate() {
     return toDate;
   }
index 5abbe9340ed7395044df1686edc01115cbcfe193..45e78f611906fb5268abaf3652768d1191b41c2c 100644 (file)
@@ -33,8 +33,11 @@ import org.sonar.api.utils.System2;
 
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
-
-import java.util.*;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
 public class MeasureFilterFactory implements ServerComponent {
 
@@ -55,15 +58,15 @@ public class MeasureFilterFactory implements ServerComponent {
     if (condition != null) {
       filter.addCondition(condition);
     }
-    String onBaseComponents = "onBaseComponents";
-    if (properties.containsKey(onBaseComponents)) {
-      filter.setOnBaseResourceChildren(Boolean.valueOf((String) properties.get(onBaseComponents)));
+    String onBaseComponents = (String) properties.get("onBaseComponents");
+    if (onBaseComponents != null) {
+      filter.setOnBaseResourceChildren(Boolean.valueOf(onBaseComponents));
     }
     filter.setResourceName((String) properties.get("nameSearch"));
     filter.setResourceKey((String) properties.get("keySearch"));
-    String onFavourites = "onFavourites";
-    if (properties.containsKey(onFavourites)) {
-      filter.setUserFavourites(Boolean.valueOf((String) properties.get(onFavourites)));
+    String onFavourites = (String) properties.get("onFavourites");
+    if (onFavourites != null) {
+      filter.setUserFavourites(Boolean.valueOf(onFavourites));
     }
     fillDateConditions(filter, properties);
     fillSorting(filter, properties);
@@ -72,23 +75,17 @@ public class MeasureFilterFactory implements ServerComponent {
   }
 
   private void fillDateConditions(MeasureFilter filter, Map<String, Object> properties) {
-    String fromDate = "fromDate";
-    if (properties.containsKey(fromDate)) {
-      filter.setFromDate(toDate((String) properties.get(fromDate)));
+    String fromDate = (String) properties.get("fromDate");
+    if (fromDate != null) {
+      filter.setFromDate(toDate(fromDate));
     } else {
-      String ageMaxDays = "ageMaxDays";
-      if (properties.containsKey(ageMaxDays)) {
-        filter.setFromDate(toDays((String) properties.get(ageMaxDays)));
-      }
+      filter.setFromDate(toDays((String) properties.get("ageMaxDays")));
     }
-    String toDate = "toDate";
-    if (properties.containsKey(toDate)) {
-      filter.setToDate(toDate((String) properties.get(toDate)));
+    String toDate = (String) properties.get("toDate");
+    if (toDate != null) {
+      filter.setToDate(toDate(toDate));
     } else {
-      String ageMinDays = "ageMinDays";
-      if (properties.containsKey(ageMinDays)) {
-        filter.setToDate(toDays((String) properties.get(ageMinDays)));
-      }
+      filter.setToDate(toDays((String) properties.get("ageMinDays")));
     }
   }
 
index 66d42e2be5cce6da62a07f0877cee489e77c4d03..35653424eb856f763fb7577ab1a6e43315d39508 100644 (file)
@@ -31,7 +31,6 @@ import java.util.Collection;
 /**
  * @since 4.2
  */
-@Beta
 public interface Rule {
 
   RuleKey key();
@@ -42,7 +41,7 @@ public interface Rule {
   String description();
 
   @CheckForNull
-  String metadata();
+  String internalKey();
 
   String severity();
 
index 7e311e2901cc1a83bbdef75aa39866a644b8ff00..07034bbfe56e6b4209e99fadcffbcbb3b3d56d8c 100644 (file)
@@ -37,7 +37,7 @@ public class DefaultRule implements Rule {
 
   private final RuleKey key;
   private final Integer id;
-  private final String name, severity, description, metadata, debtSubCharacteristic;
+  private final String name, severity, description, internalKey, debtSubCharacteristic;
   private final RuleStatus status;
   private final DebtRemediationFunction debtRemediationFunction;
 
@@ -49,7 +49,7 @@ public class DefaultRule implements Rule {
     this.name = newRule.name;
     this.severity = newRule.severity;
     this.description = newRule.description;
-    this.metadata = newRule.metadata;
+    this.internalKey = newRule.internalKey;
     this.status = newRule.status;
     this.debtSubCharacteristic = newRule.debtSubCharacteristic;
     this.debtRemediationFunction = newRule.debtRemediationFunction;
@@ -87,8 +87,8 @@ public class DefaultRule implements Rule {
   }
 
   @Override
-  public String metadata() {
-    return metadata;
+  public String internalKey() {
+    return internalKey;
   }
 
   @Override
index 5843672ade05ac4494ac3d1c008fabf144d962df..213236247d21d56caa74a1f219f3af08d760e3ff 100644 (file)
@@ -37,7 +37,7 @@ public class NewRule {
 
   final RuleKey key;
   Integer id;
-  String name, description, severity = DEFAULT_SEVERITY, metadata, debtSubCharacteristic;
+  String name, description, severity = DEFAULT_SEVERITY, internalKey, debtSubCharacteristic;
   DebtRemediationFunction debtRemediationFunction;
   RuleStatus status = RuleStatus.defaultStatus();
   Map<String, NewRuleParam> params = new HashMap<String, NewRuleParam>();
@@ -71,8 +71,8 @@ public class NewRule {
     return this;
   }
 
-  public NewRule setMetadata(@Nullable String metadata) {
-    this.metadata = metadata;
+  public NewRule setInternalKey(@Nullable String s) {
+    this.internalKey = s;
     return this;
   }
 
index d2470d6eabf47c8862b589871d11bb5403644142..831a05f1155d8a463e4829092b195017e0ff1079 100644 (file)
@@ -48,11 +48,11 @@ import java.util.Set;
  * <p/>
  * <h3>How to use</h3>
  * <pre>
- * public class JsSquidRulesDefinition implements RulesDefinition {
+ * public class MyJsRulesDefinition implements RulesDefinition {
  *
  *   {@literal @}Override
  *   public void define(Context context) {
- *     NewRepository repository = context.createRepository("js_squid", "js").setName("Javascript Squid");
+ *     NewRepository repository = context.createRepository("my_js", "js").setName("My Javascript Analyzer");
  *
  *     // define a rule programmatically. Note that rules
  *     // could be loaded from files (JSON, XML, ...)
@@ -84,20 +84,21 @@ import java.util.Set;
  * }
  * </pre>
  * <p/>
- * If rules are declared in a XML file with the standard SonarQube format, then it can be loaded by using :
+ * If rules are declared in a XML file with the standard SonarQube format (see
+ * {@link org.sonar.api.server.rule.RulesDefinitionXmlLoader}), then it can be loaded by using :
  * <p/>
  * <pre>
- * public class JsSquidRulesDefinition implements RulesDefinition {
+ * public class MyJsRulesDefinition implements RulesDefinition {
  *
  *   private final RulesDefinitionXmlLoader xmlLoader;
  *
- *   public JsSquidRulesDefinition(RulesDefinitionXmlLoader xmlLoader) {
+ *   public MyJsRulesDefinition(RulesDefinitionXmlLoader xmlLoader) {
  *     this.xmlLoader = xmlLoader;
  *   }
  *
  *   {@literal @}Override
  *   public void define(Context context) {
- *     NewRepository repository = context.createRepository("js_squid", "js").setName("Javascript Squid");
+ *     NewRepository repository = context.createRepository("my_js", "js").setName("My Javascript Analyzer");
  *     // see javadoc of RulesDefinitionXmlLoader for the format
  *     xmlLoader.load(repository, getClass().getResourceAsStream("/path/to/rules.xml"));
  *     repository.done();
@@ -109,19 +110,19 @@ import java.util.Set;
  * (deprecated) English bundles can be used :
  * <p/>
  * <pre>
- * public class JsSquidRulesDefinition implements RulesDefinition {
+ * public class MyJsRulesDefinition implements RulesDefinition {
  *
  *   private final RulesDefinitionXmlLoader xmlLoader;
  *   private final RulesDefinitionI18nLoader i18nLoader;
  *
- *   public JsSquidRulesDefinition(RulesDefinitionXmlLoader xmlLoader, RulesDefinitionI18nLoader i18nLoader) {
+ *   public MyJsRulesDefinition(RulesDefinitionXmlLoader xmlLoader, RulesDefinitionI18nLoader i18nLoader) {
  *     this.xmlLoader = xmlLoader;
  *     this.i18nLoader = i18nLoader;
  *   }
  *
  *   {@literal @}Override
  *   public void define(Context context) {
- *     NewRepository repository = context.createRepository("js_squid", "js").setName("Javascript Squid");
+ *     NewRepository repository = context.createRepository("my_js", "js").setName("My Javascript Analyzer");
  *     xmlLoader.load(repository, getClass().getResourceAsStream("/path/to/rules.xml"));
  *     i18nLoader.load(repository);
  *     repository.done();
index 2a2585110d7137da91446a21755c90408ffaf772..5c455ebdbf63308bc0f68fe8741f0d042dc63437 100644 (file)
@@ -45,6 +45,18 @@ public class RulesDefinitionAnnotationLoader {
 
   private static final Logger LOG = LoggerFactory.getLogger(RulesDefinitionAnnotationLoader.class);
 
+  private static final Function<Class<?>, RuleParamType> TYPE_FOR_CLASS = Functions.forMap(
+    ImmutableMap.<Class<?>, RuleParamType>builder()
+      .put(Integer.class, RuleParamType.INTEGER)
+      .put(int.class, RuleParamType.INTEGER)
+      .put(Float.class, RuleParamType.FLOAT)
+      .put(float.class, RuleParamType.FLOAT)
+      .put(Boolean.class, RuleParamType.BOOLEAN)
+      .put(boolean.class, RuleParamType.BOOLEAN)
+      .build(),
+    RuleParamType.STRING
+  );
+
   public void load(RulesDefinition.NewExtendedRepository repo, Class... annotatedClasses) {
     for (Class annotatedClass : annotatedClasses) {
       loadRule(repo, annotatedClass);
@@ -102,18 +114,6 @@ public class RulesDefinitionAnnotationLoader {
     }
   }
 
-  private static final Function<Class<?>, RuleParamType> TYPE_FOR_CLASS = Functions.forMap(
-    ImmutableMap.<Class<?>, RuleParamType>builder()
-      .put(Integer.class, RuleParamType.INTEGER)
-      .put(int.class, RuleParamType.INTEGER)
-      .put(Float.class, RuleParamType.FLOAT)
-      .put(float.class, RuleParamType.FLOAT)
-      .put(Boolean.class, RuleParamType.BOOLEAN)
-      .put(boolean.class, RuleParamType.BOOLEAN)
-      .build(),
-    RuleParamType.STRING
-  );
-
   @VisibleForTesting
   static RuleParamType guessType(Class<?> type) {
     return TYPE_FOR_CLASS.apply(type);
index e7a445bf90429f5c6611b78ab38f4e1f4437c96c..25e3649bbd15e63e4ffccbd3575ec4878241d614 100644 (file)
@@ -45,7 +45,7 @@ public class RulesBuilderTest {
     NewRule newSquid1 = builder.add(RuleKey.of("squid", "S0001"));
     newSquid1.setName("Detect bug");
     newSquid1.setDescription("Detect potential bug");
-    newSquid1.setMetadata("foo=bar");
+    newSquid1.setInternalKey("foo=bar");
     newSquid1.setSeverity(Severity.CRITICAL);
     newSquid1.setStatus(RuleStatus.BETA);
     newSquid1.setDebtSubCharacteristic("COMPILER");
@@ -68,7 +68,7 @@ public class RulesBuilderTest {
     assertThat(squid1.key().rule()).isEqualTo("S0001");
     assertThat(squid1.name()).isEqualTo("Detect bug");
     assertThat(squid1.description()).isEqualTo("Detect potential bug");
-    assertThat(squid1.metadata()).isEqualTo("foo=bar");
+    assertThat(squid1.internalKey()).isEqualTo("foo=bar");
     assertThat(squid1.status()).isEqualTo(RuleStatus.BETA);
     assertThat(squid1.severity()).isEqualTo(Severity.CRITICAL);
     assertThat(squid1.debtSubCharacteristic()).isEqualTo("COMPILER");
@@ -86,7 +86,7 @@ public class RulesBuilderTest {
     assertThat(squid2.key().repository()).isEqualTo("squid");
     assertThat(squid2.key().rule()).isEqualTo("S0002");
     assertThat(squid2.description()).isNull();
-    assertThat(squid2.metadata()).isNull();
+    assertThat(squid2.internalKey()).isNull();
     assertThat(squid2.status()).isEqualTo(RuleStatus.defaultStatus());
     assertThat(squid2.severity()).isEqualTo(Severity.defaultSeverity());
     assertThat(squid2.debtSubCharacteristic()).isNull();
index 29d421513b035372387eda74fa308318e079ea8e..4d12df6dcf6da379510012180d0c96cbe47fab6f 100644 (file)
@@ -47,7 +47,7 @@ public final class DefaultServerUpgradeStatus implements ServerUpgradeStatus, St
 
   @Override
   public void stop() {
-
+    // do nothing
   }
 
   @Override
index 2ba3bd2d4c8d6bfcf5da2b335af8aa1b15f54679..af91a4bad924d20e51bad6208cba3e144e78dd30 100644 (file)
@@ -26,6 +26,7 @@ import org.apache.commons.lang.StringUtils;
 import org.picocontainer.Startable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.sonar.api.Plugin;
 import org.sonar.api.platform.PluginMetadata;
 import org.sonar.api.platform.PluginRepository;
 import org.sonar.api.platform.ServerFileSystem;
@@ -60,10 +61,13 @@ public class RailsAppsDeployer implements Startable {
 
     for (PluginMetadata pluginMetadata : pluginRepository.getMetadata()) {
       String pluginKey = pluginMetadata.getKey();
-      try {
-        deployRailsApp(appsDir, pluginKey, pluginRepository.getPlugin(pluginKey).getClass().getClassLoader());
-      } catch (Exception e) {
-        throw new IllegalStateException("Fail to deploy Ruby on Rails application: " + pluginKey, e);
+      Plugin plugin = pluginRepository.getPlugin(pluginKey);
+      if (plugin != null) {
+        try {
+          deployRailsApp(appsDir, pluginKey, plugin.getClass().getClassLoader());
+        } catch (Exception e) {
+          throw new IllegalStateException("Fail to deploy Ruby on Rails application: " + pluginKey, e);
+        }
       }
     }
   }