]> source.dussan.org Git - sonarqube.git/commitdiff
the property sonar.core.codeCoveragePlugin is not used when it's set from UI console
authorsimonbrandhof <simon.brandhof@gmail.com>
Thu, 30 Sep 2010 09:37:00 +0000 (09:37 +0000)
committersimonbrandhof <simon.brandhof@gmail.com>
Thu, 30 Sep 2010 09:37:00 +0000 (09:37 +0000)
sonar-batch/src/main/java/org/sonar/batch/BatchPluginRepository.java
sonar-batch/src/main/java/org/sonar/batch/ProjectBatch.java
sonar-batch/src/test/java/org/sonar/batch/BatchPluginRepositoryTest.java
sonar-core/src/main/java/org/sonar/core/plugin/AbstractPluginRepository.java
sonar-core/src/test/java/org/sonar/core/plugin/AbstractPluginRepositoryTest.java
sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java
sonar-server/src/test/java/org/sonar/server/plugins/ServerPluginRepositoryTest.java

index 6ee190fabece593a27e1d5465ec54aeb7c7bab25..891d8e1fbf737f5ed7f576cb540f8317e1135776 100644 (file)
@@ -24,11 +24,13 @@ import org.apache.commons.configuration.Configuration;
 import org.apache.commons.lang.ArrayUtils;
 import org.apache.commons.lang.StringUtils;
 import org.picocontainer.MutablePicoContainer;
+import org.picocontainer.PicoContainer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.sonar.api.BatchExtension;
 import org.sonar.api.Plugin;
 import org.sonar.api.batch.AbstractCoverageExtension;
+import org.sonar.api.resources.Project;
 import org.sonar.api.utils.SonarException;
 import org.sonar.core.plugin.AbstractPluginRepository;
 import org.sonar.core.plugin.JpaPlugin;
@@ -48,19 +50,17 @@ public class BatchPluginRepository extends AbstractPluginRepository {
   private Map<String, ClassLoader> classloaders;
   private String baseUrl;
   private JpaPluginDao dao;
-  private Configuration configuration;
 
-  public BatchPluginRepository(JpaPluginDao dao, ServerMetadata server, Configuration configuration) {
+  public BatchPluginRepository(JpaPluginDao dao, ServerMetadata server) {
     this.dao = dao;
     this.baseUrl = server.getUrl() + "/deploy/plugins/";
-    this.configuration = configuration;
   }
 
   /**
-   * only for unit tests
+   * for unit tests only
    */
-  BatchPluginRepository(Configuration configuration) {
-    this.configuration = configuration;
+  BatchPluginRepository() {
+
   }
 
   public void start() {
@@ -109,15 +109,6 @@ public class BatchPluginRepository extends AbstractPluginRepository {
     invokeExtensionProviders(pico);
   }
 
-  boolean shouldRegisterCoverageExtension(String pluginKey) {
-    String[] selectedPluginKeys = configuration.getStringArray(AbstractCoverageExtension.PARAM_PLUGIN);
-    if (ArrayUtils.isEmpty(selectedPluginKeys)) {
-      selectedPluginKeys = new String[]{AbstractCoverageExtension.DEFAULT_PLUGIN};
-    }
-    String oldCoveragePluginKey = getOldCoveragePluginKey(pluginKey);
-    return ArrayUtils.contains(selectedPluginKeys, pluginKey) || ArrayUtils.contains(selectedPluginKeys, oldCoveragePluginKey);
-  }
-
   private String getOldCoveragePluginKey(String pluginKey) {
     if (StringUtils.equals("sonar-jacoco-plugin", pluginKey)) {
       return "jacoco";
@@ -129,14 +120,23 @@ public class BatchPluginRepository extends AbstractPluginRepository {
   }
 
   @Override
-  protected boolean shouldRegisterExtension(String pluginKey, Object extension) {
+  protected boolean shouldRegisterExtension(PicoContainer container, String pluginKey, Object extension) {
     boolean ok = isType(extension, BatchExtension.class);
     if (ok && isType(extension, AbstractCoverageExtension.class)) {
-      ok = shouldRegisterCoverageExtension(pluginKey);
+      ok = shouldRegisterCoverageExtension(pluginKey, container.getComponent(Configuration.class));
       if (!ok) {
         LOG.debug("The following extension is ignored: " + extension + ". See the parameter " + AbstractCoverageExtension.PARAM_PLUGIN);
       }
     }
     return ok;
   }
+
+  boolean shouldRegisterCoverageExtension(String pluginKey, Configuration conf) {
+    String[] selectedPluginKeys = conf.getStringArray(AbstractCoverageExtension.PARAM_PLUGIN);
+    if (ArrayUtils.isEmpty(selectedPluginKeys)) {
+      selectedPluginKeys = new String[]{AbstractCoverageExtension.DEFAULT_PLUGIN};
+    }
+    String oldCoveragePluginKey = getOldCoveragePluginKey(pluginKey);
+    return ArrayUtils.contains(selectedPluginKeys, pluginKey) || ArrayUtils.contains(selectedPluginKeys, oldCoveragePluginKey);
+  }
 }
index eb0f9b18db83e8530886aca155c78ff92fecdd8d..d47ed8d69396031bc683cb80253c3d66d2fdb8ee 100644 (file)
@@ -68,7 +68,6 @@ public class ProjectBatch {
 
   public void startChildContainer(DefaultSonarIndex index, Project project) {
     batchContainer = globalContainer.makeChildContainer();
-    batchContainer.getComponent(BatchPluginRepository.class).registerPlugins(batchContainer);
 
     batchContainer.as(Characteristics.CACHE).addComponent(project);
     batchContainer.as(Characteristics.CACHE).addComponent(project.getPom());
@@ -76,6 +75,9 @@ public class ProjectBatch {
     batchContainer.as(Characteristics.CACHE).addComponent(index.getBucket(project).getSnapshot());
     batchContainer.as(Characteristics.CACHE).addComponent(project.getConfiguration());
 
+    //need to be registered after the Configuration
+    batchContainer.getComponent(BatchPluginRepository.class).registerPlugins(batchContainer);
+
     batchContainer.as(Characteristics.CACHE).addComponent(DaoFacade.class);
     batchContainer.as(Characteristics.CACHE).addComponent(RulesDao.class);
     batchContainer.as(Characteristics.CACHE).addComponent(org.sonar.api.database.daos.RulesDao.class);
index 337d40f81e1eab7f3b7ac1b6d4426fd6d8f6edd6..604c82962067ad85942d0bf52463289e796bc38e 100644 (file)
@@ -22,9 +22,11 @@ package org.sonar.batch;
 import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.PropertiesConfiguration;
 import org.junit.Test;
+import org.picocontainer.MutablePicoContainer;
 import org.sonar.api.BatchExtension;
 import org.sonar.api.ServerExtension;
 import org.sonar.api.batch.AbstractCoverageExtension;
+import org.sonar.api.utils.IocContainer;
 
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
@@ -33,62 +35,64 @@ public class BatchPluginRepositoryTest {
 
   @Test
   public void shouldRegisterBatchExtension() {
-    BatchPluginRepository repository = new BatchPluginRepository(new PropertiesConfiguration());
+    MutablePicoContainer pico = IocContainer.buildPicoContainer();
+    pico.addComponent(new PropertiesConfiguration());
+    BatchPluginRepository repository = new BatchPluginRepository();
 
     // check classes
-    assertThat(repository.shouldRegisterExtension("foo", FakeBatchExtension.class), is(true));
-    assertThat(repository.shouldRegisterExtension("foo", FakeServerExtension.class), is(false));
-    assertThat(repository.shouldRegisterExtension("foo", String.class), is(false));
+    assertThat(repository.shouldRegisterExtension(pico, "foo", FakeBatchExtension.class), is(true));
+    assertThat(repository.shouldRegisterExtension(pico, "foo", FakeServerExtension.class), is(false));
+    assertThat(repository.shouldRegisterExtension(pico, "foo", String.class), is(false));
 
     // check objects
-    assertThat(repository.shouldRegisterExtension("foo", new FakeBatchExtension()), is(true));
-    assertThat(repository.shouldRegisterExtension("foo", new FakeServerExtension()), is(false));
-    assertThat(repository.shouldRegisterExtension("foo", "bar"), is(false));
+    assertThat(repository.shouldRegisterExtension(pico, "foo", new FakeBatchExtension()), is(true));
+    assertThat(repository.shouldRegisterExtension(pico, "foo", new FakeServerExtension()), is(false));
+    assertThat(repository.shouldRegisterExtension(pico, "foo", "bar"), is(false));
   }
 
   @Test
   public void shouldRegisterOnlyCoberturaExtensionByDefault() {
-    Configuration conf = new PropertiesConfiguration();
-    BatchPluginRepository repository = new BatchPluginRepository(conf);
-    assertThat(repository.shouldRegisterCoverageExtension("cobertura"), is(true));
-    assertThat(repository.shouldRegisterCoverageExtension("clover"), is(false));
+    BatchPluginRepository repository = new BatchPluginRepository();
+    PropertiesConfiguration conf = new PropertiesConfiguration();
+    assertThat(repository.shouldRegisterCoverageExtension("cobertura", conf), is(true));
+    assertThat(repository.shouldRegisterCoverageExtension("clover", conf), is(false));
   }
 
   @Test
   public void shouldRegisterCustomCoverageExtension() {
     Configuration conf = new PropertiesConfiguration();
     conf.setProperty(AbstractCoverageExtension.PARAM_PLUGIN, "clover,phpunit");
-    BatchPluginRepository repository = new BatchPluginRepository(conf);
-    assertThat(repository.shouldRegisterCoverageExtension("cobertura"), is(false));
-    assertThat(repository.shouldRegisterCoverageExtension("clover"), is(true));
-    assertThat(repository.shouldRegisterCoverageExtension("phpunit"), is(true));
-    assertThat(repository.shouldRegisterCoverageExtension("other"), is(false));
+    BatchPluginRepository repository = new BatchPluginRepository();
+    assertThat(repository.shouldRegisterCoverageExtension("cobertura", conf), is(false));
+    assertThat(repository.shouldRegisterCoverageExtension("clover", conf), is(true));
+    assertThat(repository.shouldRegisterCoverageExtension("phpunit", conf), is(true));
+    assertThat(repository.shouldRegisterCoverageExtension("other", conf), is(false));
   }
 
   @Test
   public void shouldActivateOldVersionOfEmma() {
     Configuration conf = new PropertiesConfiguration();
     conf.setProperty(AbstractCoverageExtension.PARAM_PLUGIN, "emma");
-    BatchPluginRepository repository = new BatchPluginRepository(conf);
+    BatchPluginRepository repository = new BatchPluginRepository();
 
-    assertThat(repository.shouldRegisterCoverageExtension("sonar-emma-plugin"), is(true));
-    assertThat(repository.shouldRegisterCoverageExtension("emma"), is(true));
+    assertThat(repository.shouldRegisterCoverageExtension("sonar-emma-plugin", conf), is(true));
+    assertThat(repository.shouldRegisterCoverageExtension("emma", conf), is(true));
 
-    assertThat(repository.shouldRegisterCoverageExtension("sonar-jacoco-plugin"), is(false));
-    assertThat(repository.shouldRegisterCoverageExtension("jacoco"), is(false));
-    assertThat(repository.shouldRegisterCoverageExtension("clover"), is(false));
-    assertThat(repository.shouldRegisterCoverageExtension("cobertura"), is(false));
+    assertThat(repository.shouldRegisterCoverageExtension("sonar-jacoco-plugin", conf), is(false));
+    assertThat(repository.shouldRegisterCoverageExtension("jacoco", conf), is(false));
+    assertThat(repository.shouldRegisterCoverageExtension("clover", conf), is(false));
+    assertThat(repository.shouldRegisterCoverageExtension("cobertura", conf), is(false));
   }
 
   @Test
   public void shouldActivateOldVersionOfJacoco() {
     Configuration conf = new PropertiesConfiguration();
     conf.setProperty(AbstractCoverageExtension.PARAM_PLUGIN, "cobertura,jacoco");
-    BatchPluginRepository repository = new BatchPluginRepository(conf);
+    BatchPluginRepository repository = new BatchPluginRepository();
 
-    assertThat(repository.shouldRegisterCoverageExtension("sonar-jacoco-plugin"), is(true));
-    assertThat(repository.shouldRegisterCoverageExtension("jacoco"), is(true));
-    assertThat(repository.shouldRegisterCoverageExtension("emma"), is(false));
+    assertThat(repository.shouldRegisterCoverageExtension("sonar-jacoco-plugin", conf), is(true));
+    assertThat(repository.shouldRegisterCoverageExtension("jacoco", conf), is(true));
+    assertThat(repository.shouldRegisterCoverageExtension("emma", conf), is(false));
   }
 
   public static class FakeBatchExtension implements BatchExtension {
index 9a15c9e06bab406d29d7b0acbb59abf1e500edf6..a1e51e95d9a26edfafb9fc0b2879a1c3f0ec63ae 100644 (file)
@@ -24,6 +24,7 @@ import com.google.common.collect.HashBiMap;
 import com.google.common.collect.Maps;
 import org.picocontainer.Characteristics;
 import org.picocontainer.MutablePicoContainer;
+import org.picocontainer.PicoContainer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.sonar.api.*;
@@ -70,7 +71,7 @@ public abstract class AbstractPluginRepository implements PluginRepository {
   }
 
   private void registerExtension(MutablePicoContainer container, Plugin plugin, String pluginKey, Object extension) {
-    if (shouldRegisterExtension(pluginKey, extension)) {
+    if (shouldRegisterExtension(container, pluginKey, extension)) {
       LOG.debug("Register the extension: {}", extension);
       container.as(Characteristics.CACHE).addComponent(getExtensionKey(extension), extension);
       pluginByExtension.put(extension, plugin);
@@ -78,7 +79,7 @@ public abstract class AbstractPluginRepository implements PluginRepository {
     }
   }
 
-  protected abstract boolean shouldRegisterExtension(String pluginKey, Object extension);
+  protected abstract boolean shouldRegisterExtension(PicoContainer container, String pluginKey, Object extension);
 
   public Collection<Plugin> getPlugins() {
     return pluginByKey.values();
index de2343a07f5f7b7ca56b67a87ec479799605a7e3..6e1aa0d93dea0486649b58be7c0dc085b7343311 100644 (file)
@@ -21,6 +21,7 @@ package org.sonar.core.plugin;
 
 import org.junit.Test;
 import org.picocontainer.MutablePicoContainer;
+import org.picocontainer.PicoContainer;
 import org.sonar.api.BatchExtension;
 import org.sonar.api.ExtensionProvider;
 import org.sonar.api.Plugin;
@@ -72,7 +73,7 @@ public class AbstractPluginRepositoryTest {
     MutablePicoContainer pico = IocContainer.buildPicoContainer();
     AbstractPluginRepository repository = new AbstractPluginRepository() {
       @Override
-      protected boolean shouldRegisterExtension(String pluginKey, Object extension) {
+      protected boolean shouldRegisterExtension(PicoContainer container, String pluginKey, Object extension) {
         return isType(extension, ServerExtension.class);
       }
     };
index 318a5ac57694a45c4126ed67cde9b92ae1231eef..bf14cd42349b8bdc97e4b35bf5365b1f65fbb021 100644 (file)
@@ -21,6 +21,7 @@ package org.sonar.server.plugins;
 
 import org.picocontainer.Characteristics;
 import org.picocontainer.MutablePicoContainer;
+import org.picocontainer.PicoContainer;
 import org.sonar.api.Plugin;
 import org.sonar.api.ServerExtension;
 import org.sonar.api.utils.SonarException;
@@ -64,7 +65,7 @@ public class ServerPluginRepository extends AbstractPluginRepository {
   }
 
   @Override
-  protected boolean shouldRegisterExtension(String pluginKey, Object extension) {
+  protected boolean shouldRegisterExtension(PicoContainer container, String pluginKey, Object extension) {
     return isType(extension, ServerExtension.class);
   }
 }
index d6d3115e806462e0baae83cf9c9da47419769b3b..99190fe2bebe847334ff08e7b7f32eeaf244f034 100644 (file)
@@ -32,14 +32,14 @@ public class ServerPluginRepositoryTest {
     ServerPluginRepository repository = new ServerPluginRepository();
 
     // check classes
-    assertThat(repository.shouldRegisterExtension("foo", FakeBatchExtension.class), is(false));
-    assertThat(repository.shouldRegisterExtension("foo", FakeServerExtension.class), is(true));
-    assertThat(repository.shouldRegisterExtension("foo", String.class), is(false));
+    assertThat(repository.shouldRegisterExtension(null, "foo", FakeBatchExtension.class), is(false));
+    assertThat(repository.shouldRegisterExtension(null, "foo", FakeServerExtension.class), is(true));
+    assertThat(repository.shouldRegisterExtension(null, "foo", String.class), is(false));
 
     // check objects
-    assertThat(repository.shouldRegisterExtension("foo", new FakeBatchExtension()), is(false));
-    assertThat(repository.shouldRegisterExtension("foo", new FakeServerExtension()), is(true));
-    assertThat(repository.shouldRegisterExtension("foo", "foo"), is(false));
+    assertThat(repository.shouldRegisterExtension(null, "foo", new FakeBatchExtension()), is(false));
+    assertThat(repository.shouldRegisterExtension(null, "foo", new FakeServerExtension()), is(true));
+    assertThat(repository.shouldRegisterExtension(null, "foo", "foo"), is(false));
   }
 
   public static class FakeBatchExtension implements BatchExtension {