From: Simon Brandhof Date: Fri, 15 May 2015 14:36:31 +0000 (+0200) Subject: Fix quality flaws X-Git-Tag: 5.2-RC1~1938 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=aa0cc3c59c5c4d4efe52edc8684ff3c224d745de;p=sonarqube.git Fix quality flaws --- diff --git a/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginExploder.java b/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginExploder.java index 3c4865831c3..5d3bad59fa8 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginExploder.java +++ b/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginExploder.java @@ -20,11 +20,11 @@ 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; diff --git a/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java b/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java index 4b6cd9e1937..284d71ef18c 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java +++ b/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java @@ -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()); diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRuleChange.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRuleChange.java index 8ad045dc6fb..ba7de0e10e5 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRuleChange.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRuleChange.java @@ -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 param : parameters.entrySet()) { if (!param.getKey().isEmpty()) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/ActiveRuleCompleter.java b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/ActiveRuleCompleter.java index 2e693b19117..1c805f71115 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/ActiveRuleCompleter.java +++ b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/ActiveRuleCompleter.java @@ -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(); diff --git a/server/sonar-server/src/main/java/org/sonar/server/startup/GeneratePluginIndex.java b/server/sonar-server/src/main/java/org/sonar/server/startup/GeneratePluginIndex.java index 163ad22b6d3..a71661900f1 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/startup/GeneratePluginIndex.java +++ b/server/sonar-server/src/main/java/org/sonar/server/startup/GeneratePluginIndex.java @@ -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; diff --git a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginExploder.java b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginExploder.java index 3ecb3e244c8..b11df16d984 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginExploder.java +++ b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginExploder.java @@ -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; diff --git a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginPredicate.java b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginPredicate.java index 0cd7f1c62e7..49113fabe75 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginPredicate.java +++ b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginPredicate.java @@ -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, BatchComponent { +@BatchSide +public class BatchPluginPredicate implements Predicate{ private static final Logger LOG = Loggers.get(BatchPluginPredicate.class); diff --git a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/PluginInstaller.java b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/PluginInstaller.java index 97eb513d4a6..6a20ce07785 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/PluginInstaller.java +++ b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/PluginInstaller.java @@ -19,13 +19,14 @@ */ 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 diff --git a/sonar-core/src/main/java/org/sonar/core/platform/PluginLoader.java b/sonar-core/src/main/java/org/sonar/core/platform/PluginLoader.java index 1e602c1e556..f0cbc1defe3 100644 --- a/sonar-core/src/main/java/org/sonar/core/platform/PluginLoader.java +++ b/sonar-core/src/main/java/org/sonar/core/platform/PluginLoader.java @@ -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); } diff --git a/sonar-core/src/main/java/org/sonar/core/qualityprofile/db/ActiveRuleKey.java b/sonar-core/src/main/java/org/sonar/core/qualityprofile/db/ActiveRuleKey.java index 8ecd3cb43e0..c42b8050b09 100644 --- a/sonar-core/src/main/java/org/sonar/core/qualityprofile/db/ActiveRuleKey.java +++ b/sonar-core/src/main/java/org/sonar/core/qualityprofile/db/ActiveRuleKey.java @@ -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()); } } diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/resources/AbstractLanguage.java b/sonar-plugin-api/src/main/java/org/sonar/api/resources/AbstractLanguage.java index 8cd32fad761..7f28b2475b2 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/resources/AbstractLanguage.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/resources/AbstractLanguage.java @@ -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 diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/resources/AbstractLanguageTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/resources/AbstractLanguageTest.java index ad6a547080a..796750991ff 100644 --- a/sonar-plugin-api/src/test/java/org/sonar/api/resources/AbstractLanguageTest.java +++ b/sonar-plugin-api/src/test/java/org/sonar/api/resources/AbstractLanguageTest.java @@ -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]; } } - }