aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@sonarsource.com>2015-08-07 16:46:59 +0200
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>2015-08-10 14:18:19 +0200
commit72e02c82b33ecdc6350ca11bcdd31633c2e09036 (patch)
treeae2a29bb680b32ed443ae5d2fef2fbae740d254d
parenta2942f3c1c6b43be145f6342eb87bb6e745cc15b (diff)
downloadsonarqube-72e02c82b33ecdc6350ca11bcdd31633c2e09036.tar.gz
sonarqube-72e02c82b33ecdc6350ca11bcdd31633c2e09036.zip
SONAR-6730 Replace step executing MeasureComputers by a visitor
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/component/DequeBasedPath.java2
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/measure/MeasureComputersVisitor.java (renamed from server/sonar-server/src/main/java/org/sonar/server/computation/step/ComputePluginMeasuresStep.java)40
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/step/ComponentVisitors.java8
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/step/ComputationSteps.java4
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/measure/MeasureComputersVisitorTest.java (renamed from server/sonar-server/src/test/java/org/sonar/server/computation/step/ComputePluginMeasuresStepTest.java)57
5 files changed, 42 insertions, 69 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/component/DequeBasedPath.java b/server/sonar-server/src/main/java/org/sonar/server/computation/component/DequeBasedPath.java
index 0c7bb8f64a7..733f9782271 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/component/DequeBasedPath.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/component/DequeBasedPath.java
@@ -25,7 +25,7 @@ import java.util.Deque;
import java.util.Iterator;
import java.util.NoSuchElementException;
-public class DequeBasedPath<T> implements PathAwareVisitor.Path<T>, Iterable<PathAwareVisitor.PathElement<T>> {
+final class DequeBasedPath<T> implements PathAwareVisitor.Path<T>, Iterable<PathAwareVisitor.PathElement<T>> {
private final Deque<PathAwareVisitor.PathElement<T>> deque = new ArrayDeque<>();
@Override
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/step/ComputePluginMeasuresStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/measure/MeasureComputersVisitor.java
index 9d4692a811b..e0e105a547f 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/step/ComputePluginMeasuresStep.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/measure/MeasureComputersVisitor.java
@@ -18,32 +18,28 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.server.computation.step;
+package org.sonar.server.computation.measure;
import org.sonar.api.ce.measure.MeasureComputer;
-import org.sonar.server.computation.component.DepthTraversalTypeAwareCrawler;
import org.sonar.server.computation.component.ProjectSettingsRepository;
-import org.sonar.server.computation.component.TreeRootHolder;
-import org.sonar.server.computation.measure.MeasureComputersHolder;
-import org.sonar.server.computation.measure.MeasureRepository;
+import org.sonar.server.computation.component.TypeAwareVisitorAdapter;
import org.sonar.server.computation.measure.api.MeasureComputerImplementationContext;
import org.sonar.server.computation.metric.MetricRepository;
import static org.sonar.server.computation.component.Component.Type.FILE;
import static org.sonar.server.computation.component.Visitor.Order.PRE_ORDER;
-public class ComputePluginMeasuresStep implements ComputationStep {
+public class MeasureComputersVisitor extends TypeAwareVisitorAdapter {
- private final TreeRootHolder treeRootHolder;
private final MetricRepository metricRepository;
private final MeasureRepository measureRepository;
private final ProjectSettingsRepository settings;
private final MeasureComputersHolder measureComputersHolder;
- public ComputePluginMeasuresStep(TreeRootHolder treeRootHolder, MetricRepository metricRepository, MeasureRepository measureRepository, ProjectSettingsRepository settings,
+ public MeasureComputersVisitor(MetricRepository metricRepository, MeasureRepository measureRepository, ProjectSettingsRepository settings,
MeasureComputersHolder measureComputersHolder) {
- this.treeRootHolder = treeRootHolder;
+ super(FILE, PRE_ORDER);
this.metricRepository = metricRepository;
this.measureRepository = measureRepository;
this.settings = settings;
@@ -51,28 +47,10 @@ public class ComputePluginMeasuresStep implements ComputationStep {
}
@Override
- public void execute() {
- new NewMetricDefinitionsVisitor().visit(treeRootHolder.getRoot());
- }
-
- private class NewMetricDefinitionsVisitor extends DepthTraversalTypeAwareCrawler {
-
- public NewMetricDefinitionsVisitor() {
- super(FILE, PRE_ORDER);
- }
-
- @Override
- public void visitAny(org.sonar.server.computation.component.Component component) {
- for (MeasureComputer computer : measureComputersHolder.getMeasureComputers()) {
- MeasureComputerImplementationContext measureComputerContext = new MeasureComputerImplementationContext(component, computer, settings, measureRepository, metricRepository);
- computer.getImplementation().compute(measureComputerContext);
- }
+ public void visitAny(org.sonar.server.computation.component.Component component) {
+ for (MeasureComputer computer : measureComputersHolder.getMeasureComputers()) {
+ MeasureComputerImplementationContext measureComputerContext = new MeasureComputerImplementationContext(component, computer, settings, measureRepository, metricRepository);
+ computer.getImplementation().compute(measureComputerContext);
}
}
-
- @Override
- public String getDescription() {
- return "Compute measures from plugin";
- }
-
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/step/ComponentVisitors.java b/server/sonar-server/src/main/java/org/sonar/server/computation/step/ComponentVisitors.java
index 35673b68066..34257d49906 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/step/ComponentVisitors.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/step/ComponentVisitors.java
@@ -28,6 +28,7 @@ import java.util.List;
import javax.annotation.Nonnull;
import org.sonar.server.computation.component.Visitor;
import org.sonar.server.computation.container.ComputeEngineContainer;
+import org.sonar.server.computation.measure.MeasureComputersVisitor;
import org.sonar.server.computation.sqale.SqaleMeasuresVisitor;
/**
@@ -35,8 +36,11 @@ import org.sonar.server.computation.sqale.SqaleMeasuresVisitor;
*/
public class ComponentVisitors {
- private static final List<Class<? extends Visitor>> ORDERED_VISITOR_CLASSES = ImmutableList.<Visitor>of(
- SqaleMeasuresVisitor.class
+ private static final List<Class<? extends Visitor>> ORDERED_VISITOR_CLASSES = ImmutableList.of(
+ SqaleMeasuresVisitor.class,
+
+ // Must be after all other visitors as it requires measures computed by previous visitors
+ MeasureComputersVisitor.class
);
/**
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/step/ComputationSteps.java b/server/sonar-server/src/main/java/org/sonar/server/computation/step/ComputationSteps.java
index 982942e0517..da0a1a9243b 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/step/ComputationSteps.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/step/ComputationSteps.java
@@ -65,10 +65,8 @@ public class ComputationSteps {
// must be executed after the measures required for common rules (coverage, comment density, duplications)
IntegrateIssuesStep.class,
- ExecuteVisitorsStep.class,
-
FeedMeasureComputers.class,
- ComputePluginMeasuresStep.class,
+ ExecuteVisitorsStep.class,
// Must be executed after computation of all measures
FillMeasuresWithVariationsStep.class,
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/step/ComputePluginMeasuresStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/measure/MeasureComputersVisitorTest.java
index 4b3c42f8340..1780a720025 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/step/ComputePluginMeasuresStepTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/measure/MeasureComputersVisitorTest.java
@@ -18,17 +18,16 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-package org.sonar.server.computation.step;
+package org.sonar.server.computation.measure;
+import java.util.Arrays;
import java.util.Collections;
-import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
-import org.sonar.api.ce.measure.Measure;
import org.sonar.api.ce.measure.MeasureComputer;
-import org.sonar.server.computation.batch.TreeRootHolderRule;
-import org.sonar.server.computation.measure.MeasureComputersHolderImpl;
-import org.sonar.server.computation.measure.MeasureRepositoryRule;
+import org.sonar.server.computation.component.Component;
+import org.sonar.server.computation.component.Visitor;
+import org.sonar.server.computation.component.VisitorsCrawler;
import org.sonar.server.computation.measure.api.MeasureComputerImpl;
import org.sonar.server.computation.metric.MetricRepositoryRule;
@@ -47,7 +46,7 @@ import static org.sonar.server.computation.measure.Measure.newMeasureBuilder;
import static org.sonar.server.computation.measure.MeasureRepoEntry.entryOf;
import static org.sonar.server.computation.measure.MeasureRepoEntry.toEntries;
-public class ComputePluginMeasuresStepTest {
+public class MeasureComputersVisitorTest {
private static final String NEW_METRIC_KEY = "new_metric_key";
private static final String NEW_METRIC_NAME = "new metric name";
@@ -62,8 +61,17 @@ public class ComputePluginMeasuresStepTest {
private static final int FILE_1_REF = 1231;
private static final int FILE_2_REF = 1232;
- @Rule
- public TreeRootHolderRule treeRootHolder = new TreeRootHolderRule();
+ private static final Component ROOT = builder(PROJECT, ROOT_REF).setKey("project")
+ .addChildren(
+ builder(MODULE, MODULE_REF).setKey("module")
+ .addChildren(
+ builder(DIRECTORY, DIRECTORY_REF).setKey("directory")
+ .addChildren(
+ builder(FILE, FILE_1_REF).setKey("file1").build(),
+ builder(FILE, FILE_2_REF).setKey("file2").build()
+ ).build()
+ ).build()
+ ).build();
@Rule
public MetricRepositoryRule metricRepository = new MetricRepositoryRule()
@@ -72,23 +80,7 @@ public class ComputePluginMeasuresStepTest {
.add(NEW_METRIC);
@Rule
- public MeasureRepositoryRule measureRepository = MeasureRepositoryRule.create(treeRootHolder, metricRepository);
-
- @Before
- public void setUp() throws Exception {
- treeRootHolder.setRoot(
- builder(PROJECT, ROOT_REF).setKey("project")
- .addChildren(
- builder(MODULE, MODULE_REF).setKey("module")
- .addChildren(
- builder(DIRECTORY, DIRECTORY_REF).setKey("directory")
- .addChildren(
- builder(FILE, FILE_1_REF).setKey("file1").build(),
- builder(FILE, FILE_2_REF).setKey("file2").build()
- ).build()
- ).build()
- ).build());
- }
+ public MeasureRepositoryRule measureRepository = MeasureRepositoryRule.create(ROOT, metricRepository);
MeasureComputersHolderImpl measureComputersHolder = new MeasureComputersHolderImpl();
@@ -113,8 +105,8 @@ public class ComputePluginMeasuresStepTest {
new MeasureComputer.Implementation() {
@Override
public void compute(Context ctx) {
- Measure ncloc = ctx.getMeasure(NCLOC_KEY);
- Measure comment = ctx.getMeasure(COMMENT_LINES_KEY);
+ org.sonar.api.ce.measure.Measure ncloc = ctx.getMeasure(NCLOC_KEY);
+ org.sonar.api.ce.measure.Measure comment = ctx.getMeasure(COMMENT_LINES_KEY);
if (ncloc != null && comment != null) {
ctx.addMeasure(NEW_METRIC_KEY, ncloc.getIntValue() + comment.getIntValue());
}
@@ -123,8 +115,9 @@ public class ComputePluginMeasuresStepTest {
)
.build()
));
- ComputationStep underTest = new ComputePluginMeasuresStep(treeRootHolder, metricRepository, measureRepository, null, measureComputersHolder);
- underTest.execute();
+
+ VisitorsCrawler visitorsCrawler = new VisitorsCrawler(Arrays.<Visitor>asList(new MeasureComputersVisitor(metricRepository, measureRepository, null, measureComputersHolder)));
+ visitorsCrawler.visit(ROOT);
assertThat(toEntries(measureRepository.getAddedRawMeasures(FILE_1_REF))).containsOnly(entryOf(NEW_METRIC_KEY, newMeasureBuilder().create(12)));
assertThat(toEntries(measureRepository.getAddedRawMeasures(FILE_2_REF))).containsOnly(entryOf(NEW_METRIC_KEY, newMeasureBuilder().create(45)));
@@ -147,8 +140,8 @@ public class ComputePluginMeasuresStepTest {
measureRepository.addRawMeasure(ROOT_REF, COMMENT_LINES_KEY, newMeasureBuilder().create(7));
measureComputersHolder.setMeasureComputers(Collections.<MeasureComputer>emptyList());
- ComputationStep underTest = new ComputePluginMeasuresStep(treeRootHolder, metricRepository, measureRepository, null, measureComputersHolder);
- underTest.execute();
+ VisitorsCrawler visitorsCrawler = new VisitorsCrawler(Arrays.<Visitor>asList(new MeasureComputersVisitor(metricRepository, measureRepository, null, measureComputersHolder)));
+ visitorsCrawler.visit(ROOT);
assertThat(toEntries(measureRepository.getAddedRawMeasures(FILE_1_REF))).isEmpty();
assertThat(toEntries(measureRepository.getAddedRawMeasures(FILE_2_REF))).isEmpty();