]> source.dussan.org Git - sonarqube.git/commitdiff
Fix quality flaws
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Fri, 15 May 2015 14:36:31 +0000 (16:36 +0200)
committerSimon Brandhof <simon.brandhof@sonarsource.com>
Fri, 15 May 2015 14:43:51 +0000 (16:43 +0200)
12 files changed:
server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginExploder.java
server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRuleChange.java
server/sonar-server/src/main/java/org/sonar/server/rule/ws/ActiveRuleCompleter.java
server/sonar-server/src/main/java/org/sonar/server/startup/GeneratePluginIndex.java
sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginExploder.java
sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginPredicate.java
sonar-batch/src/main/java/org/sonar/batch/bootstrap/PluginInstaller.java
sonar-core/src/main/java/org/sonar/core/platform/PluginLoader.java
sonar-core/src/main/java/org/sonar/core/qualityprofile/db/ActiveRuleKey.java
sonar-plugin-api/src/main/java/org/sonar/api/resources/AbstractLanguage.java
sonar-plugin-api/src/test/java/org/sonar/api/resources/AbstractLanguageTest.java

index 3c4865831c33722785a62a332baae4faf1a096e3..5d3bad59fa8f6b82dcdfae20016ba37375ef9bd2 100644 (file)
 package org.sonar.server.plugins;
 
 import org.apache.commons.io.FileUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.ZipUtils;
-import org.sonar.core.platform.PluginInfo;
-import org.sonar.core.platform.PluginExploder;
 import org.sonar.core.platform.ExplodedPlugin;
+import org.sonar.core.platform.PluginExploder;
+import org.sonar.core.platform.PluginInfo;
 import org.sonar.server.platform.DefaultServerFileSystem;
 
 import java.io.File;
@@ -32,7 +32,8 @@ import java.io.File;
 import static org.apache.commons.io.FileUtils.cleanDirectory;
 import static org.apache.commons.io.FileUtils.forceMkdir;
 
-public class ServerPluginExploder extends PluginExploder implements ServerComponent {
+@ServerSide
+public class ServerPluginExploder extends PluginExploder {
 
   private final DefaultServerFileSystem fs;
 
index 4b6cd9e193750eca3cb274e8a422097a1ae8ca53..284d71ef18c56b3cdb2ceaca9426351fd02f1ef5 100644 (file)
@@ -49,6 +49,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import org.sonar.updatecenter.common.Version;
 
 import static com.google.common.collect.Iterables.transform;
 import static com.google.common.collect.Lists.newArrayList;
@@ -255,13 +256,14 @@ public class ServerPluginRepository implements PluginRepository, Startable {
     }
 
     for (PluginInfo.RequiredPlugin requiredPlugin : plugin.getRequiredPlugins()) {
-      PluginInfo available = allPluginsByKeys.get(requiredPlugin.getKey());
-      if (available == null) {
+      PluginInfo installedRequirement = allPluginsByKeys.get(requiredPlugin.getKey());
+      if (installedRequirement == null) {
         // it requires a plugin that is not installed
         LOG.warn("Plugin {} [{}] is ignored because the required plugin [{}] is not installed", plugin.getName(), plugin.getKey(), requiredPlugin.getKey());
         return false;
       }
-      if (requiredPlugin.getMinimalVersion().compareToIgnoreQualifier(available.getVersion()) > 0) {
+      Version installedRequirementVersion = installedRequirement.getVersion();
+      if (installedRequirementVersion != null && requiredPlugin.getMinimalVersion().compareToIgnoreQualifier(installedRequirementVersion) > 0) {
         // it requires a more recent version
         LOG.warn("Plugin {} [{}] is ignored because the version {} of required plugin [{}] is not supported", plugin.getName(), plugin.getKey(),
           requiredPlugin.getKey(), requiredPlugin.getMinimalVersion());
index 8ad045dc6fbdf2e3a7284851052685bbad35e79d..ba7de0e10e59040e619b41a6978c45a6213c2b4f 100644 (file)
@@ -96,7 +96,7 @@ public class ActiveRuleChange {
     activity.setAction(type.name());
     activity.setData("key", getKey().toString());
     activity.setData("ruleKey", getKey().ruleKey().toString());
-    activity.setData("profileKey", getKey().qProfile().toString());
+    activity.setData("profileKey", getKey().qProfile());
 
     for (Map.Entry<String, String> param : parameters.entrySet()) {
       if (!param.getKey().isEmpty()) {
index 2e693b191178f42cde77deff164eb23fa3f3588c..1c805f711157f6815fdb2567ec49ea5680bbdf0c 100644 (file)
@@ -112,7 +112,7 @@ public class ActiveRuleCompleter {
   private String writeActiveRule(ActiveRule activeRule, JsonWriter json) {
     json
       .beginObject()
-      .prop("qProfile", activeRule.key().qProfile().toString())
+      .prop("qProfile", activeRule.key().qProfile())
       .prop("inherit", activeRule.inheritance().toString())
       .prop("severity", activeRule.severity());
     ActiveRuleKey parentKey = activeRule.parentKey();
index 163ad22b6d38a58fd71694f5bb8389564926f01a..a71661900f1ea06575d695ca54759c4cc7d98812 100644 (file)
@@ -22,7 +22,7 @@ package org.sonar.server.startup;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.CharUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.core.platform.PluginInfo;
 import org.sonar.core.platform.PluginRepository;
 import org.sonar.core.plugins.RemotePlugin;
@@ -35,7 +35,8 @@ import java.io.OutputStreamWriter;
 import java.io.Writer;
 import java.nio.charset.StandardCharsets;
 
-public final class GeneratePluginIndex implements ServerComponent {
+@ServerSide
+public final class GeneratePluginIndex {
 
   private DefaultServerFileSystem fileSystem;
   private PluginRepository repository;
index 3ecb3e244c8dddd6616db2d19a4de013977fe617..b11df16d984f67ee0f551cb01b2189a5aab0e2fc 100644 (file)
@@ -20,7 +20,7 @@
 package org.sonar.batch.bootstrap;
 
 import org.apache.commons.io.FileUtils;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.utils.ZipUtils;
 import org.sonar.core.platform.ExplodedPlugin;
 import org.sonar.core.platform.PluginExploder;
@@ -31,7 +31,8 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 
-public class BatchPluginExploder extends PluginExploder implements BatchComponent {
+@BatchSide
+public class BatchPluginExploder extends PluginExploder {
 
   private final FileCache fileCache;
 
index 0cd7f1c62e7e5050e697c24b02814dce72cd0c71..49113fabe75a787fbeffbb126661fd4affa0628e 100644 (file)
@@ -24,7 +24,7 @@ import com.google.common.base.Predicate;
 import com.google.common.base.Splitter;
 import com.google.common.collect.Lists;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.config.Settings;
 import org.sonar.api.utils.log.Logger;
@@ -41,7 +41,8 @@ import static com.google.common.collect.Sets.newHashSet;
 /**
  * Filters the plugins to be enabled during analysis
  */
-public class BatchPluginPredicate implements Predicate<String>, BatchComponent {
+@BatchSide
+public class BatchPluginPredicate implements Predicate<String>{
 
   private static final Logger LOG = Loggers.get(BatchPluginPredicate.class);
 
index 97eb513d4a6269e088817e612332e68d5fe3c46d..6a20ce077853d1df14b2fd1a43b1db71f0288517 100644 (file)
  */
 package org.sonar.batch.bootstrap;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.Plugin;
 import org.sonar.core.platform.PluginInfo;
 
 import java.util.Map;
 
-public interface PluginInstaller extends BatchComponent {
+@BatchSide
+public interface PluginInstaller {
 
   /**
    * Gets the list of plugins installed on server and downloads them if not
index 1e602c1e55637e6452bdc219a282d731f0e09228..f0cbc1defe3ba10aacdfe099b16b70282f153008 100644 (file)
@@ -22,11 +22,10 @@ package org.sonar.core.platform;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Strings;
 import org.apache.commons.lang.SystemUtils;
-import org.sonar.api.BatchComponent;
 import org.sonar.api.Plugin;
-import org.sonar.api.ServerComponent;
 import org.sonar.api.utils.log.Loggers;
 import org.sonar.classloader.ClassloaderBuilder;
+import org.sonar.classloader.Mask;
 
 import java.io.Closeable;
 import java.io.File;
@@ -35,7 +34,6 @@ import java.net.URL;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
-import org.sonar.classloader.Mask;
 
 import static java.util.Arrays.asList;
 import static org.sonar.classloader.ClassloaderBuilder.LoadingOrder.PARENT_FIRST;
@@ -157,7 +155,7 @@ public class PluginLoader {
         } catch (UnsupportedClassVersionError e) {
           throw new IllegalStateException(String.format("The plugin [%s] does not support Java %s",
             pluginKey, SystemUtils.JAVA_VERSION_TRIMMED), e);
-        } catch (ClassNotFoundException|IllegalAccessException|InstantiationException e) {
+        } catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) {
           throw new IllegalStateException(String.format(
             "Fail to instantiate class [%s] of plugin [%s]", mainClass, pluginKey), e);
         }
index 8ecd3cb43e0306d08938a2d14791a6839fb6a5ee..c42b8050b09e0d61ae8ed21f8e2c9f6d94e65fc9 100644 (file)
@@ -103,6 +103,6 @@ public class ActiveRuleKey implements Serializable {
    */
   @Override
   public String toString() {
-    return String.format("%s:%s", qualityProfileKey.toString(), ruleKey.toString());
+    return String.format("%s:%s", qualityProfileKey, ruleKey.toString());
   }
 }
index 8cd32fad761e07ad4bc9de8d1b0042392e447fad..7f28b2475b27d691a62abcbdc72e59fc9168c2ff 100644 (file)
@@ -81,18 +81,17 @@ public abstract class AbstractLanguage implements Language {
     if (this == o) {
       return true;
     }
-    if (!(o instanceof Language)) {
+    if (o == null || !(o instanceof Language)) {
       return false;
     }
-
-    Language language = (Language) o;
-    return !(key != null ? !key.equals(language.getKey()) : language.getKey() != null);
+    Language that = (Language) o;
+    return key.equals(that.getKey());
 
   }
 
   @Override
   public int hashCode() {
-    return key != null ? key.hashCode() : 0;
+    return key.hashCode();
   }
 
   @Override
index ad6a547080a71e9d27dcbf6220bce63505fe89b2..796750991ff09b4ba4f8b9998c45b03727e972fe 100644 (file)
@@ -24,7 +24,6 @@ import org.junit.Test;
 import org.junit.rules.ExpectedException;
 
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.Assert.assertEquals;
 
 public class AbstractLanguageTest {
 
@@ -32,13 +31,34 @@ public class AbstractLanguageTest {
   public ExpectedException thrown = ExpectedException.none();
 
   @Test
-  public void a_language_should_equal_itself() {
-    assertEquals(new Language1(), new Language1());
-  }
+  public void test_equals_and_hashcode() {
+    final Language1 lang1 = new Language1();
+    assertThat(lang1.equals(lang1)).isTrue();
+    assertThat(lang1.equals(new Language2())).isFalse();
+    assertThat(lang1.equals(new Language1Too())).isTrue();
+    assertThat(lang1.equals("not a language")).isFalse();
+    assertThat(lang1.equals(null)).isFalse();
 
-  @Test
-  public void should_be_equal_to_another_language_implementation_having_same_key() {
-    assertThat(new Language1()).isEqualTo(new Language2());
+    // not an AbstractLanguage but a Language
+    assertThat(lang1.equals(new Language() {
+      @Override
+      public String getKey() {
+        return lang1.getKey();
+      }
+
+      @Override
+      public String getName() {
+        return lang1.getName();
+      }
+
+      @Override
+      public String[] getFileSuffixes() {
+        return lang1.getFileSuffixes();
+      }
+    })).isTrue();
+
+    assertThat(lang1.hashCode()).isEqualTo(lang1.hashCode());
+    assertThat(lang1.hashCode()).isEqualTo(new Language1Too().hashCode());
   }
 
   @Test
@@ -62,7 +82,17 @@ public class AbstractLanguageTest {
 
   static class Language1 extends AbstractLanguage {
     public Language1() {
-      super("language_key");
+      super("lang1");
+    }
+
+    public String[] getFileSuffixes() {
+      return new String[0];
+    }
+  }
+
+  static class Language1Too extends AbstractLanguage {
+    public Language1Too() {
+      super("lang1");
     }
 
     public String[] getFileSuffixes() {
@@ -72,12 +102,11 @@ public class AbstractLanguageTest {
 
   static class Language2 extends AbstractLanguage {
     public Language2() {
-      super("language_key");
+      super("lang2");
     }
 
     public String[] getFileSuffixes() {
       return new String[0];
     }
   }
-
 }