aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/DecoratorsSelector.java7
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/bootstrap/AbstractTaskModule.java3
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/bootstrap/AnalyseProjectModule.java6
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/bootstrap/MetricProvider.java6
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/phases/DecoratorsExecutor.java5
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/DecoratorsSelectorTest.java19
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/phases/DecoratorsExecutorTest.java3
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/batch/TaskExtensionDictionnary.java72
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/measures/Metric.java6
9 files changed, 21 insertions, 106 deletions
diff --git a/sonar-batch/src/main/java/org/sonar/batch/DecoratorsSelector.java b/sonar-batch/src/main/java/org/sonar/batch/DecoratorsSelector.java
index b96e0d648da..3bfbabdc31b 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/DecoratorsSelector.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/DecoratorsSelector.java
@@ -23,7 +23,6 @@ import com.google.common.collect.HashMultimap;
import com.google.common.collect.SetMultimap;
import org.sonar.api.batch.BatchExtensionDictionnary;
import org.sonar.api.batch.Decorator;
-import org.sonar.api.batch.TaskExtensionDictionnary;
import org.sonar.api.measures.Metric;
import org.sonar.api.resources.Project;
@@ -34,17 +33,15 @@ import java.util.List;
public final class DecoratorsSelector {
private BatchExtensionDictionnary batchExtDictionnary;
- private TaskExtensionDictionnary taskExtDictionnary;
- public DecoratorsSelector(TaskExtensionDictionnary taskExtDictionnary, BatchExtensionDictionnary dictionnary) {
- this.taskExtDictionnary = taskExtDictionnary;
+ public DecoratorsSelector(BatchExtensionDictionnary dictionnary) {
this.batchExtDictionnary = dictionnary;
}
public Collection<Decorator> select(Project project) {
List<Decorator> decorators = new ArrayList<Decorator>(batchExtDictionnary.select(Decorator.class, project, false));
SetMultimap<Metric, Decorator> decoratorsByGeneratedMetric = getDecoratorsByMetric(decorators);
- for (Metric metric : taskExtDictionnary.select(Metric.class)) {
+ for (Metric metric : batchExtDictionnary.select(Metric.class)) {
if (metric.getFormula() != null) {
decorators.add(new FormulaDecorator(metric, decoratorsByGeneratedMetric.get(metric)));
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/AbstractTaskModule.java b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/AbstractTaskModule.java
index de66cbbf39a..e01292dc88f 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/AbstractTaskModule.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/AbstractTaskModule.java
@@ -22,7 +22,6 @@ package org.sonar.batch.bootstrap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonar.api.batch.TaskDefinition;
-import org.sonar.api.batch.TaskExtensionDictionnary;
import org.sonar.api.config.EmailSettings;
import org.sonar.api.resources.ResourceTypes;
import org.sonar.batch.DefaultResourceCreationLock;
@@ -109,9 +108,7 @@ public abstract class AbstractTaskModule extends Module {
container.addSingleton(DefaultNotificationManager.class);
container.addSingleton(DefaultUserFinder.class);
container.addSingleton(ResourceTypes.class);
- container.addSingleton(MetricProvider.class);
container.addSingleton(SemaphoresImpl.class);
- container.addSingleton(TaskExtensionDictionnary.class);
}
private void registerDatabaseComponents() {
diff --git a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/AnalyseProjectModule.java b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/AnalyseProjectModule.java
index 74aff0245da..8257522b12b 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/AnalyseProjectModule.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/AnalyseProjectModule.java
@@ -32,10 +32,12 @@ public class AnalyseProjectModule extends Module {
@Override
protected void configure() {
- registerBatchExtensions();
+ container.addSingleton(MetricProvider.class);
+
+ registerPerBatchExtensions();
}
- private void registerBatchExtensions() {
+ private void registerPerBatchExtensions() {
ExtensionInstaller installer = container.getComponentByType(ExtensionInstaller.class);
installer.installBatchExtensions(container, InstantiationStrategy.PER_BATCH);
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/MetricProvider.java b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/MetricProvider.java
index 0cf3af16bc2..9df02c89559 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/MetricProvider.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/MetricProvider.java
@@ -21,15 +21,17 @@ package org.sonar.batch.bootstrap;
import com.google.common.collect.Lists;
import org.slf4j.LoggerFactory;
+import org.sonar.api.BatchExtension;
import org.sonar.api.ExtensionProvider;
-import org.sonar.api.TaskExtension;
+import org.sonar.api.batch.InstantiationStrategy;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.api.measures.Metric;
import org.sonar.api.measures.Metrics;
import java.util.List;
-public class MetricProvider extends ExtensionProvider implements TaskExtension {
+@InstantiationStrategy(InstantiationStrategy.PER_BATCH)
+public class MetricProvider extends ExtensionProvider implements BatchExtension {
private Metrics[] factories;
diff --git a/sonar-batch/src/main/java/org/sonar/batch/phases/DecoratorsExecutor.java b/sonar-batch/src/main/java/org/sonar/batch/phases/DecoratorsExecutor.java
index 0a298869676..e9a3a185078 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/phases/DecoratorsExecutor.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/phases/DecoratorsExecutor.java
@@ -25,7 +25,6 @@ import org.sonar.api.batch.BatchExtensionDictionnary;
import org.sonar.api.batch.Decorator;
import org.sonar.api.batch.DecoratorContext;
import org.sonar.api.batch.SonarIndex;
-import org.sonar.api.batch.TaskExtensionDictionnary;
import org.sonar.api.resources.Project;
import org.sonar.api.resources.Resource;
import org.sonar.api.utils.SonarException;
@@ -43,9 +42,9 @@ public class DecoratorsExecutor implements BatchComponent {
private EventBus eventBus;
private Project project;
- public DecoratorsExecutor(TaskExtensionDictionnary taskExtDictionnary, BatchExtensionDictionnary batchExtDictionnary,
+ public DecoratorsExecutor(BatchExtensionDictionnary batchExtDictionnary,
Project project, SonarIndex index, EventBus eventBus) {
- this.decoratorsSelector = new DecoratorsSelector(taskExtDictionnary, batchExtDictionnary);
+ this.decoratorsSelector = new DecoratorsSelector(batchExtDictionnary);
this.index = index;
this.eventBus = eventBus;
this.project = project;
diff --git a/sonar-batch/src/test/java/org/sonar/batch/DecoratorsSelectorTest.java b/sonar-batch/src/test/java/org/sonar/batch/DecoratorsSelectorTest.java
index ecb9a9bb8df..4cbb299f9c9 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/DecoratorsSelectorTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/DecoratorsSelectorTest.java
@@ -25,7 +25,6 @@ import org.sonar.api.batch.BatchExtensionDictionnary;
import org.sonar.api.batch.Decorator;
import org.sonar.api.batch.DecoratorContext;
import org.sonar.api.batch.DependedUpon;
-import org.sonar.api.batch.TaskExtensionDictionnary;
import org.sonar.api.measures.Formula;
import org.sonar.api.measures.FormulaContext;
import org.sonar.api.measures.FormulaData;
@@ -52,10 +51,9 @@ public class DecoratorsSelectorTest {
@Test
public void selectAndSortFormulas() {
Project project = new Project("key");
- TaskExtensionDictionnary taskExtDictionnary = newTaskDictionnary(withFormula1, withoutFormula3, withFormula2);
- BatchExtensionDictionnary batchExtDictionnary = newBatchDictionnary();
+ BatchExtensionDictionnary batchExtDictionnary = newBatchDictionnary(withFormula1, withoutFormula3, withFormula2);
- Collection<Decorator> decorators = new DecoratorsSelector(taskExtDictionnary, batchExtDictionnary).select(project);
+ Collection<Decorator> decorators = new DecoratorsSelector(batchExtDictionnary).select(project);
assertThat(decorators.size(), is(2));
assertThat(decorators, hasItem((Decorator) new FormulaDecorator(withFormula1)));
assertThat(decorators, hasItem((Decorator) new FormulaDecorator(withFormula2)));
@@ -65,10 +63,9 @@ public class DecoratorsSelectorTest {
public void decoratorsShouldBeExecutedBeforeFormulas() {
Project project = new Project("key");
Decorator metric1Decorator = new Metric1Decorator();
- TaskExtensionDictionnary taskExtDictionnary = newTaskDictionnary(withFormula1);
- BatchExtensionDictionnary batchExtDictionnary = newBatchDictionnary(metric1Decorator);
+ BatchExtensionDictionnary batchExtDictionnary = newBatchDictionnary(withFormula1, metric1Decorator);
- Collection<Decorator> decorators = new DecoratorsSelector(taskExtDictionnary, batchExtDictionnary).select(project);
+ Collection<Decorator> decorators = new DecoratorsSelector(batchExtDictionnary).select(project);
Decorator firstDecorator = (Decorator) CollectionUtils.get(decorators, 0);
Decorator secondDecorator = (Decorator) CollectionUtils.get(decorators, 1);
@@ -81,14 +78,6 @@ public class DecoratorsSelectorTest {
assertThat(CollectionUtils.get(formulaDecorator.dependsUponDecorators(), 0), is((Object) firstDecorator));
}
- private TaskExtensionDictionnary newTaskDictionnary(Object... extensions) {
- ComponentContainer ioc = new ComponentContainer();
- for (Object extension : extensions) {
- ioc.addSingleton(extension);
- }
- return new TaskExtensionDictionnary(ioc);
- }
-
private BatchExtensionDictionnary newBatchDictionnary(Object... extensions) {
ComponentContainer ioc = new ComponentContainer();
for (Object extension : extensions) {
diff --git a/sonar-batch/src/test/java/org/sonar/batch/phases/DecoratorsExecutorTest.java b/sonar-batch/src/test/java/org/sonar/batch/phases/DecoratorsExecutorTest.java
index 966f9cf0c1e..c55d83722a7 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/phases/DecoratorsExecutorTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/phases/DecoratorsExecutorTest.java
@@ -24,7 +24,6 @@ import org.sonar.api.batch.BatchExtensionDictionnary;
import org.sonar.api.batch.Decorator;
import org.sonar.api.batch.DecoratorContext;
import org.sonar.api.batch.SonarIndex;
-import org.sonar.api.batch.TaskExtensionDictionnary;
import org.sonar.api.resources.File;
import org.sonar.api.resources.Project;
import org.sonar.api.resources.Resource;
@@ -66,7 +65,7 @@ public class DecoratorsExecutorTest {
Decorator decorator = mock(Decorator.class);
doThrow(new SonarException()).when(decorator).decorate(any(Resource.class), any(DecoratorContext.class));
- DecoratorsExecutor executor = new DecoratorsExecutor(mock(TaskExtensionDictionnary.class), mock(BatchExtensionDictionnary.class), new Project("key"), mock(SonarIndex.class),
+ DecoratorsExecutor executor = new DecoratorsExecutor(mock(BatchExtensionDictionnary.class), new Project("key"), mock(SonarIndex.class),
mock(EventBus.class));
try {
executor.executeDecorator(decorator, mock(DefaultDecoratorContext.class), new File("org/foo/Bar.java"));
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/TaskExtensionDictionnary.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/TaskExtensionDictionnary.java
deleted file mode 100644
index 5d0fa31ca03..00000000000
--- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/TaskExtensionDictionnary.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2008-2012 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
- */
-package org.sonar.api.batch;
-
-import com.google.common.collect.Lists;
-import org.apache.commons.lang.ClassUtils;
-import org.sonar.api.TaskExtension;
-import org.sonar.api.platform.ComponentContainer;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * @since 3.5
- */
-public class TaskExtensionDictionnary {
-
- private ComponentContainer componentContainer;
-
- public TaskExtensionDictionnary(ComponentContainer componentContainer) {
- this.componentContainer = componentContainer;
- }
-
- public <T> Collection<T> select(Class<T> type) {
- List<T> result = getFilteredExtensions(type);
- return result;
- }
-
- private List<TaskExtension> getExtensions() {
- List<TaskExtension> extensions = Lists.newArrayList();
- completeTaskExtensions(componentContainer, extensions);
- return extensions;
- }
-
- private static void completeTaskExtensions(ComponentContainer container, List<TaskExtension> extensions) {
- if (container != null) {
- extensions.addAll(container.getComponentsByType(TaskExtension.class));
- completeTaskExtensions(container.getParent(), extensions);
- }
- }
-
- private <T> List<T> getFilteredExtensions(Class<T> type) {
- List<T> result = Lists.newArrayList();
- for (TaskExtension extension : getExtensions()) {
- if (shouldKeep(type, extension)) {
- result.add((T) extension);
- }
- }
- return result;
- }
-
- private boolean shouldKeep(Class type, Object extension) {
- return ClassUtils.isAssignable(extension.getClass(), type);
- }
-}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/measures/Metric.java b/sonar-plugin-api/src/main/java/org/sonar/api/measures/Metric.java
index 06391845a31..1c96d1535e7 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/measures/Metric.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/measures/Metric.java
@@ -22,8 +22,9 @@ package org.sonar.api.measures;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
+import org.sonar.api.BatchExtension;
import org.sonar.api.ServerExtension;
-import org.sonar.api.TaskExtension;
+import org.sonar.api.batch.InstantiationStrategy;
import javax.persistence.Column;
import javax.persistence.Entity;
@@ -41,7 +42,8 @@ import javax.persistence.Transient;
*/
@Table(name = "metrics")
@Entity(name = "Metric")
-public class Metric implements ServerExtension, TaskExtension {
+@InstantiationStrategy(InstantiationStrategy.PER_BATCH)
+public class Metric implements ServerExtension, BatchExtension {
/**
* A metric bigger value means a degradation