diff options
author | Julien Lancelot <julien.lancelot@sonarsource.com> | 2015-08-07 16:46:59 +0200 |
---|---|---|
committer | Sébastien Lesaint <sebastien.lesaint@sonarsource.com> | 2015-08-10 14:18:19 +0200 |
commit | 72e02c82b33ecdc6350ca11bcdd31633c2e09036 (patch) | |
tree | ae2a29bb680b32ed443ae5d2fef2fbae740d254d | |
parent | a2942f3c1c6b43be145f6342eb87bb6e745cc15b (diff) | |
download | sonarqube-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.java | 2 | ||||
-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.java | 8 | ||||
-rw-r--r-- | server/sonar-server/src/main/java/org/sonar/server/computation/step/ComputationSteps.java | 4 | ||||
-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(); |