--- /dev/null
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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 this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.sonar.server.computation.component;
+
+public interface ComponentVisitor {
+
+ Order getOrder();
+
+ Component.Type getMaxDepth();
+
+ enum Order {
+ /**
+ * Each component is visited BEFORE its children. Top-down traversal of
+ * tree of components.
+ */
+ PRE_ORDER,
+
+ /**
+ * Each component is visited AFTER its children. Bottom-up traversal of
+ * tree of components.
+ */
+ POST_ORDER
+ }
+}
*/
public abstract class DepthTraversalTypeAwareCrawler implements TypeAwareCrawler {
private final Component.Type maxDepth;
- private final Visitor.Order order;
+ private final ComponentVisitor.Order order;
- protected DepthTraversalTypeAwareCrawler(Component.Type maxDepth, Visitor.Order order) {
+ protected DepthTraversalTypeAwareCrawler(Component.Type maxDepth, ComponentVisitor.Order order) {
this.maxDepth = requireNonNull(maxDepth);
this.order = requireNonNull(order);
}
return;
}
- if (order == Visitor.Order.PRE_ORDER) {
+ if (order == ComponentVisitor.Order.PRE_ORDER) {
visitNode(component);
}
visitChildren(component);
- if (order == Visitor.Order.POST_ORDER) {
+ if (order == ComponentVisitor.Order.POST_ORDER) {
visitNode(component);
}
}
*/
package org.sonar.server.computation.component;
-import static org.sonar.server.computation.component.Visitor.Order.POST_ORDER;
-import static org.sonar.server.computation.component.Visitor.Order.PRE_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.POST_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.PRE_ORDER;
/**
* A {@link ComponentCrawler} which provide access to a representation of the path from the root to the currently visited
private final DequeBasedPath<T> stack = new DequeBasedPath<>();
- public PathAwareCrawler(Component.Type maxDepth, Visitor.Order order, StackElementFactory<T> factory) {
+ public PathAwareCrawler(Component.Type maxDepth, ComponentVisitor.Order order, StackElementFactory<T> factory) {
super(maxDepth, order, factory);
}
import java.util.NoSuchElementException;
/**
- * A {@link Visitor} which provide access to a representation of the path from the root to the currently visited
+ * A {@link ComponentVisitor} which provide access to a representation of the path from the root to the currently visited
* Component. It also provides a way to have an object associated to each Component and access it and all of its
* parent's.
*/
-public interface PathAwareVisitor<T> extends Visitor {
+public interface PathAwareVisitor<T> extends ComponentVisitor {
StackElementFactory<T> getFactory();
}
@Override
- public Visitor.Order getOrder() {
+ public ComponentVisitor.Order getOrder() {
return delegate.getOrder();
}
import java.util.Map;
import java.util.Objects;
-import static org.sonar.server.computation.component.Visitor.Order.POST_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.POST_ORDER;
/**
* Holds the reference to the root of the {@link Component} tree for the current CE run.
package org.sonar.server.computation.component;
/**
- * A {@link Visitor} which can exposes methods which ensure the type of the visited Component.
+ * A {@link ComponentVisitor} which can exposes methods which ensure the type of the visited Component.
*/
-public interface TypeAwareVisitor extends Visitor {
+public interface TypeAwareVisitor extends ComponentVisitor {
/**
* Called when encountering a Component of type {@link Component.Type#PROJECT}
*/
}
@Override
- public Visitor.Order getOrder() {
+ public ComponentVisitor.Order getOrder() {
return delegate.getOrder();
}
+++ /dev/null
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube 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.
- *
- * SonarQube 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 this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-package org.sonar.server.computation.component;
-
-public interface Visitor {
-
- Order getOrder();
-
- Component.Type getMaxDepth();
-
- enum Order {
- /**
- * Each component is visited BEFORE its children. Top-down traversal of
- * tree of components.
- */
- PRE_ORDER,
-
- /**
- * Each component is visited AFTER its children. Bottom-up traversal of
- * tree of components.
- */
- POST_ORDER
- }
-}
private final List<VisitorWrapper> preOrderVisitorWrappers;
private final List<VisitorWrapper> postOrderVisitorWrappers;
- public VisitorsCrawler(Iterable<Visitor> visitors) {
+ public VisitorsCrawler(Iterable<ComponentVisitor> visitors) {
List<VisitorWrapper> visitorWrappers = from(visitors).transform(ToVisitorWrapper.INSTANCE).toList();
this.preOrderVisitorWrappers = from(visitorWrappers).filter(MathPreOrderVisitor.INSTANCE).toList();
this.postOrderVisitorWrappers = from(visitorWrappers).filter(MatchPostOrderVisitor.INSTANCE).toList();
}
}
- private enum ToVisitorWrapper implements Function<Visitor, VisitorWrapper> {
+ private enum ToVisitorWrapper implements Function<ComponentVisitor, VisitorWrapper> {
INSTANCE;
@Override
- public VisitorWrapper apply(@Nonnull Visitor visitor) {
- if (visitor instanceof TypeAwareVisitor) {
- return new TypeAwareVisitorWrapper((TypeAwareVisitor) visitor);
- } else if (visitor instanceof PathAwareVisitor) {
- return new PathAwareVisitorWrapper((PathAwareVisitor) visitor);
+ public VisitorWrapper apply(@Nonnull ComponentVisitor componentVisitor) {
+ if (componentVisitor instanceof TypeAwareVisitor) {
+ return new TypeAwareVisitorWrapper((TypeAwareVisitor) componentVisitor);
+ } else if (componentVisitor instanceof PathAwareVisitor) {
+ return new PathAwareVisitorWrapper((PathAwareVisitor) componentVisitor);
} else {
throw new IllegalArgumentException("Only TypeAwareVisitor and PathAwareVisitor can be used");
}
@Override
public boolean apply(@Nonnull VisitorWrapper visitorWrapper) {
- return visitorWrapper.getOrder() == Visitor.Order.PRE_ORDER;
+ return visitorWrapper.getOrder() == ComponentVisitor.Order.PRE_ORDER;
}
}
@Override
public boolean apply(@Nonnull VisitorWrapper visitorWrapper) {
- return visitorWrapper.getOrder() == Visitor.Order.POST_ORDER;
+ return visitorWrapper.getOrder() == ComponentVisitor.Order.POST_ORDER;
}
}
}
import org.sonar.core.platform.ComponentContainer;
import org.sonar.server.computation.ReportQueue.Item;
-import org.sonar.server.computation.component.Visitor;
+import org.sonar.server.computation.component.ComponentVisitor;
import org.sonar.server.computation.step.ComputationStep;
/**
*/
<T extends ComputationStep> T getStep(Class<T> type);
- <T extends Visitor> T getComponentVisitor(Class<T> type);
+ <T extends ComponentVisitor> T getComponentVisitor(Class<T> type);
}
import org.sonar.server.computation.activity.ActivityManager;
import org.sonar.server.computation.batch.BatchReportDirectoryHolderImpl;
import org.sonar.server.computation.batch.BatchReportReaderImpl;
+import org.sonar.server.computation.component.ComponentVisitor;
import org.sonar.server.computation.component.DbIdsRepository;
import org.sonar.server.computation.component.ProjectSettingsRepository;
import org.sonar.server.computation.component.TreeRootHolderImpl;
-import org.sonar.server.computation.component.Visitor;
import org.sonar.server.computation.debt.DebtModelHolderImpl;
import org.sonar.server.computation.event.EventRepositoryImpl;
import org.sonar.server.computation.issue.BaseIssuesLoader;
}
@Override
- public <T extends Visitor> T getComponentVisitor(Class<T> type) {
+ public <T extends ComponentVisitor> T getComponentVisitor(Class<T> type) {
return getComponentByType(type);
}
import java.util.Map;
import javax.annotation.CheckForNull;
import org.sonar.server.computation.component.Component;
+import org.sonar.server.computation.component.ComponentVisitor;
import org.sonar.server.computation.component.PathAwareCrawler;
-import org.sonar.server.computation.component.Visitor;
import org.sonar.server.computation.measure.Measure;
import org.sonar.server.computation.measure.MeasureRepository;
import org.sonar.server.computation.metric.Metric;
private final List<Formula> formulas;
private FormulaExecutorComponentCrawler(Builder builder, List<Formula> formulas) {
- super(Component.Type.FILE, Visitor.Order.POST_ORDER, COUNTERS_FACTORY);
+ super(Component.Type.FILE, ComponentVisitor.Order.POST_ORDER, COUNTERS_FACTORY);
this.periodsHolder = builder.periodsHolder;
this.measureRepository = builder.measureRepository;
this.metricRepository = builder.metricRepository;
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;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.PRE_ORDER;
public class MeasureComputersVisitor extends TypeAwareVisitorAdapter {
import com.google.common.base.Optional;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.server.computation.component.Component;
+import org.sonar.server.computation.component.ComponentVisitor;
import org.sonar.server.computation.component.PathAwareVisitorAdapter;
-import org.sonar.server.computation.component.Visitor;
import org.sonar.server.computation.measure.Measure;
import org.sonar.server.computation.measure.MeasureRepository;
import org.sonar.server.computation.metric.Metric;
private final Metric sqaleRatingMetric;
public SqaleMeasuresVisitor(MetricRepository metricRepository, MeasureRepository measureRepository, SqaleRatingSettings sqaleRatingSettings) {
- super(Component.Type.FILE, Visitor.Order.POST_ORDER, new SimpleStackElementFactory<DevelopmentCost>() {
+ super(Component.Type.FILE, ComponentVisitor.Order.POST_ORDER, new SimpleStackElementFactory<DevelopmentCost>() {
@Override
public DevelopmentCost createForAny(Component component) {
return new DevelopmentCost();
import com.google.common.collect.Iterables;
import java.util.List;
import javax.annotation.Nonnull;
-import org.sonar.server.computation.component.Visitor;
+import org.sonar.server.computation.component.ComponentVisitor;
import org.sonar.server.computation.container.ComputeEngineContainer;
import org.sonar.server.computation.measure.MeasureComputersVisitor;
import org.sonar.server.computation.sqale.SqaleMeasuresVisitor;
*/
public class ComponentVisitors {
- private static final List<Class<? extends Visitor>> ORDERED_VISITOR_CLASSES = ImmutableList.of(
+ private static final List<Class<? extends ComponentVisitor>> ORDERED_VISITOR_CLASSES = ImmutableList.of(
SqaleMeasuresVisitor.class,
// Must be after all other visitors as it requires measures computed by previous visitors
);
/**
- * List of all {@link Visitor}, ordered by execution sequence.
+ * List of all {@link ComponentVisitor}, ordered by execution sequence.
*/
- public List<Class<? extends Visitor>> orderedClasses() {
+ public List<Class<? extends ComponentVisitor>> orderedClasses() {
return ORDERED_VISITOR_CLASSES;
}
this.computeEngineContainer = computeEngineContainer;
}
- public Iterable<Visitor> instances() {
- return Iterables.transform(orderedClasses(), new Function<Class<? extends Visitor>, Visitor>() {
+ public Iterable<ComponentVisitor> instances() {
+ return Iterables.transform(orderedClasses(), new Function<Class<? extends ComponentVisitor>, ComponentVisitor>() {
@Override
- public Visitor apply(@Nonnull Class<? extends Visitor> input) {
- Visitor visitor = computeEngineContainer.getComponentVisitor(input);
- Preconditions.checkState(visitor != null, String.format("Visitor not found: %s", input));
- return visitor;
+ public ComponentVisitor apply(@Nonnull Class<? extends ComponentVisitor> input) {
+ ComponentVisitor componentVisitor = computeEngineContainer.getComponentVisitor(input);
+ Preconditions.checkState(componentVisitor != null, String.format("Visitor not found: %s", input));
+ return componentVisitor;
}
});
}
import org.sonar.server.computation.qualityprofile.QualityProfile;
import static org.sonar.server.computation.component.Component.Type.MODULE;
-import static org.sonar.server.computation.component.Visitor.Order.POST_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.POST_ORDER;
/**
* Aggregates quality profile on lower-level module nodes on their parent modules and project
import org.sonar.db.MyBatis;
import org.sonar.db.measure.custom.CustomMeasureDto;
import org.sonar.server.computation.component.Component;
+import org.sonar.server.computation.component.ComponentVisitor;
import org.sonar.server.computation.component.DepthTraversalTypeAwareCrawler;
import org.sonar.server.computation.component.TreeRootHolder;
-import org.sonar.server.computation.component.Visitor;
import org.sonar.server.computation.measure.Measure;
import org.sonar.server.computation.measure.MeasureRepository;
import org.sonar.server.computation.metric.Metric;
@Override
public void execute() {
- new DepthTraversalTypeAwareCrawler(Component.Type.FILE, Visitor.Order.PRE_ORDER) {
+ new DepthTraversalTypeAwareCrawler(Component.Type.FILE, ComponentVisitor.Order.PRE_ORDER) {
@Override
public void visitAny(Component component) {
copy(component);
package org.sonar.server.computation.step;
+import org.sonar.server.computation.component.ComponentVisitor;
import org.sonar.server.computation.component.TreeRootHolder;
-import org.sonar.server.computation.component.Visitor;
import org.sonar.server.computation.component.VisitorsCrawler;
public class ExecuteVisitorsStep implements ComputationStep {
private final TreeRootHolder treeRootHolder;
- private final Iterable<Visitor> visitors;
+ private final Iterable<ComponentVisitor> visitors;
public ExecuteVisitorsStep(TreeRootHolder treeRootHolder, ComponentVisitors visitors) {
this.treeRootHolder = treeRootHolder;
import org.sonar.server.computation.period.Period;
import org.sonar.server.computation.period.PeriodsHolder;
-import static org.sonar.server.computation.component.Visitor.Order.PRE_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.PRE_ORDER;
/**
* Set variations on all numeric measures found in the repository.
import org.sonar.server.computation.issue.TrackerExecution;
import org.sonar.server.util.cache.DiskCache;
-import static org.sonar.server.computation.component.Visitor.Order.POST_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.POST_ORDER;
public class IntegrateIssuesStep implements ComputationStep {
import org.sonar.server.computation.component.DepthTraversalTypeAwareCrawler;
import org.sonar.server.computation.component.TreeRootHolder;
-import static org.sonar.server.computation.component.Visitor.Order.PRE_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.PRE_ORDER;
/**
* Persist duplications into
import org.sonar.db.event.EventDto;
import org.sonar.server.computation.batch.BatchReportReader;
import org.sonar.server.computation.component.Component;
+import org.sonar.server.computation.component.ComponentVisitor;
import org.sonar.server.computation.component.DbIdsRepository;
import org.sonar.server.computation.component.DepthTraversalTypeAwareCrawler;
import org.sonar.server.computation.component.TreeRootHolder;
-import org.sonar.server.computation.component.Visitor;
import org.sonar.server.computation.event.Event;
import org.sonar.server.computation.event.EventRepository;
private final long analysisDate;
public PersistEventComponentCrawler(DbSession session, long analysisDate) {
- super(Component.Type.FILE, Visitor.Order.PRE_ORDER);
+ super(Component.Type.FILE, ComponentVisitor.Order.PRE_ORDER);
this.session = session;
this.analysisDate = analysisDate;
}
import org.sonar.server.computation.source.ScmLineReader;
import org.sonar.server.computation.source.SymbolsLineReader;
-import static org.sonar.server.computation.component.Visitor.Order.PRE_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.PRE_ORDER;
public class PersistFileSourcesStep implements ComputationStep {
import static org.sonar.api.measures.CoreMetrics.CLASS_COMPLEXITY_DISTRIBUTION_KEY;
import static org.sonar.api.measures.CoreMetrics.FILE_COMPLEXITY_DISTRIBUTION_KEY;
import static org.sonar.api.measures.CoreMetrics.FUNCTION_COMPLEXITY_DISTRIBUTION_KEY;
-import static org.sonar.server.computation.component.Visitor.Order.PRE_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.PRE_ORDER;
public class PersistMeasuresStep implements ComputationStep {
import org.sonar.server.source.index.SourceLineIndex;
import static com.google.common.base.Objects.firstNonNull;
-import static org.sonar.server.computation.component.Visitor.Order.PRE_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.PRE_ORDER;
public class PersistNumberOfDaysSinceLastCommitStep implements ComputationStep {
import org.sonar.server.computation.component.TreeRootHolder;
import static com.google.common.collect.Sets.newHashSet;
-import static org.sonar.server.computation.component.Visitor.Order.PRE_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.PRE_ORDER;
/**
* Persist project and module links
import org.sonar.db.source.FileSourceDto.Type;
import org.sonar.server.computation.batch.BatchReportReader;
import org.sonar.server.computation.component.Component;
+import org.sonar.server.computation.component.ComponentVisitor;
import org.sonar.server.computation.component.DepthTraversalTypeAwareCrawler;
import org.sonar.server.computation.component.TreeRootHolder;
-import org.sonar.server.computation.component.Visitor;
public class PersistTestsStep implements ComputationStep {
boolean hasUnprocessedCoverageDetails = false;
public TestDepthTraversalTypeAwareCrawler(DbSession session) {
- super(Component.Type.FILE, Visitor.Order.PRE_ORDER);
+ super(Component.Type.FILE, ComponentVisitor.Order.PRE_ORDER);
this.session = session;
this.existingFileSourcesByUuid = new HashMap<>();
this.projectUuid = treeRootHolder.getRoot().getUuid();
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
import org.sonar.server.computation.component.Component;
+import org.sonar.server.computation.component.ComponentVisitor;
import org.sonar.server.computation.component.DepthTraversalTypeAwareCrawler;
import org.sonar.server.computation.component.TreeRootHolder;
-import org.sonar.server.computation.component.Visitor;
import org.sonar.server.computation.event.Event;
import org.sonar.server.computation.event.EventRepository;
import org.sonar.server.computation.measure.Measure;
@Override
public void execute() {
- new DepthTraversalTypeAwareCrawler(Component.Type.PROJECT, Visitor.Order.PRE_ORDER) {
+ new DepthTraversalTypeAwareCrawler(Component.Type.PROJECT, ComponentVisitor.Order.PRE_ORDER) {
@Override
public void visitProject(Component project) {
executeForProject(project);
import org.sonar.server.computation.qualitygate.QualityGateService;
import static org.sonar.server.computation.component.Component.Type.PROJECT;
-import static org.sonar.server.computation.component.Visitor.Order.PRE_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.PRE_ORDER;
/**
* This step retrieves the QualityGate for the current {@link ReportQueue.Item} and stores it in
import org.sonar.server.computation.qualitygate.QualityGateHolder;
import static org.sonar.server.computation.component.Component.Type.PROJECT;
-import static org.sonar.server.computation.component.Visitor.Order.PRE_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.PRE_ORDER;
/**
* This step:
import org.sonar.server.computation.qualityprofile.QPMeasureData;
import org.sonar.server.computation.qualityprofile.QualityProfile;
-import static org.sonar.server.computation.component.Visitor.Order.POST_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.POST_ORDER;
/**
* Computation of quality profile events
import static org.sonar.api.measures.CoreMetrics.NCLOC_KEY;
import static org.sonar.api.measures.CoreMetrics.STATEMENTS_KEY;
import static org.sonar.server.computation.component.Component.Type.FILE;
-import static org.sonar.server.computation.component.Visitor.Order.POST_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.POST_ORDER;
import static org.sonar.server.computation.measure.Measure.newMeasureBuilder;
/**
import org.sonar.db.component.SnapshotDto;
import org.sonar.server.computation.batch.BatchReportReader;
import org.sonar.server.computation.component.Component;
+import org.sonar.server.computation.component.ComponentVisitor;
import org.sonar.server.computation.component.DepthTraversalTypeAwareCrawler;
import org.sonar.server.computation.component.TreeRootHolder;
-import org.sonar.server.computation.component.Visitor;
import static org.sonar.api.utils.DateUtils.formatDateTime;
private Component rawProject;
public ValidateProjectsCrawler(DbSession session, ComponentDao componentDao, boolean preventAutomaticProjectCreation, Map<String, ComponentDto> baseModulesByKey) {
- super(Component.Type.MODULE, Visitor.Order.PRE_ORDER);
+ super(Component.Type.MODULE, ComponentVisitor.Order.PRE_ORDER);
this.session = session;
this.componentDao = componentDao;
import org.sonar.server.computation.component.MutableTreeRootHolder;
import org.sonar.server.computation.component.TreeRootHolder;
-import static org.sonar.server.computation.component.Visitor.Order.POST_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.POST_ORDER;
public class TreeRootHolderRule implements TestRule, MutableTreeRootHolder {
private Component root;
import static org.sonar.server.computation.component.Component.Type.FILE;
import static org.sonar.server.computation.component.Component.Type.MODULE;
import static org.sonar.server.computation.component.Component.Type.PROJECT;
-import static org.sonar.server.computation.component.Visitor.Order.POST_ORDER;
-import static org.sonar.server.computation.component.Visitor.Order.PRE_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.POST_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.PRE_ORDER;
public class PathAwareCrawlerTest {
private static class TestPathAwareCrawler extends PathAwareCrawler<Integer> {
private final List<CallRecord> callsRecords = new ArrayList<>();
- public TestPathAwareCrawler(Component.Type maxDepth, Visitor.Order order) {
+ public TestPathAwareCrawler(Component.Type maxDepth, ComponentVisitor.Order order) {
super(maxDepth, order, new SimpleStackElementFactory<Integer>() {
@Override
public Integer createForAny(Component component) {
import static org.sonar.server.computation.component.Component.Type.FILE;
import static org.sonar.server.computation.component.Component.Type.MODULE;
import static org.sonar.server.computation.component.Component.Type.PROJECT;
-import static org.sonar.server.computation.component.Visitor.Order.POST_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.POST_ORDER;
public class PostOrderDepthTraversalTypeAwareCrawlerTest {
import static org.sonar.server.computation.component.Component.Type.FILE;
import static org.sonar.server.computation.component.Component.Type.MODULE;
import static org.sonar.server.computation.component.Component.Type.PROJECT;
-import static org.sonar.server.computation.component.Visitor.Order.PRE_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.PRE_ORDER;
public class PreOrderDepthTraversalTypeAwareCrawlerTest {
import static org.sonar.server.computation.component.Component.Type.FILE;
import static org.sonar.server.computation.component.Component.Type.MODULE;
import static org.sonar.server.computation.component.Component.Type.PROJECT;
-import static org.sonar.server.computation.component.Visitor.Order.POST_ORDER;
-import static org.sonar.server.computation.component.Visitor.Order.PRE_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.POST_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.PRE_ORDER;
public class VisitorsCrawlerTest {
@Test
public void execute_pre_visitor_before_post_visitor() throws Exception {
InOrder inOrder = inOrder(spyPreOrderTypeAwareVisitor, spyPostOrderTypeAwareVisitor);
- VisitorsCrawler underTest = new VisitorsCrawler(Arrays.<Visitor>asList(spyPreOrderTypeAwareVisitor, spyPostOrderTypeAwareVisitor));
+ VisitorsCrawler underTest = new VisitorsCrawler(Arrays.<ComponentVisitor>asList(spyPreOrderTypeAwareVisitor, spyPostOrderTypeAwareVisitor));
underTest.visit(COMPONENT_TREE);
inOrder.verify(spyPreOrderTypeAwareVisitor).visitProject(COMPONENT_TREE);
thrown.expect(IllegalArgumentException.class);
thrown.expectMessage("Only TypeAwareVisitor and PathAwareVisitor can be used");
- Visitor visitor = new Visitor() {
+ ComponentVisitor componentVisitor = new ComponentVisitor() {
@Override
public Order getOrder() {
return PRE_ORDER;
return FILE;
}
};
- new VisitorsCrawler(Arrays.asList(visitor));
+ new VisitorsCrawler(Arrays.asList(componentVisitor));
}
private static Component component(final Component.Type type, final int ref, final Component... children) {
private static class TestTypeAwareVisitor extends TypeAwareVisitorAdapter {
- public TestTypeAwareVisitor(Component.Type maxDepth, Visitor.Order order) {
+ public TestTypeAwareVisitor(Component.Type maxDepth, ComponentVisitor.Order order) {
super(maxDepth, order);
}
}
private static class TestPathAwareVisitor extends PathAwareVisitorAdapter<Integer> {
- public TestPathAwareVisitor(Component.Type maxDepth, Visitor.Order order) {
+ public TestPathAwareVisitor(Component.Type maxDepth, ComponentVisitor.Order order) {
super(maxDepth, order, new SimpleStackElementFactory<Integer>() {
@Override
public Integer createForAny(Component component) {
import static org.sonar.server.computation.component.Component.Type.FILE;
import static org.sonar.server.computation.component.Component.Type.MODULE;
import static org.sonar.server.computation.component.Component.Type.PROJECT;
-import static org.sonar.server.computation.component.Visitor.Order.POST_ORDER;
-import static org.sonar.server.computation.component.Visitor.Order.PRE_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.POST_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.PRE_ORDER;
public class VisitorsCrawlerWithPathAwareVisitorTest {
return new CallRecord(method, currentRef, currentRef, parentRef, ROOT_REF, path);
}
- private static VisitorsCrawler newVisitorsCrawler(Visitor visitor) {
- return new VisitorsCrawler(Arrays.asList(visitor));
+ private static VisitorsCrawler newVisitorsCrawler(ComponentVisitor componentVisitor) {
+ return new VisitorsCrawler(Arrays.asList(componentVisitor));
}
private static class TestPathAwareVisitor extends PathAwareVisitorAdapter<Integer> {
private final List<CallRecord> callsRecords = new ArrayList<>();
- public TestPathAwareVisitor(Component.Type maxDepth, Visitor.Order order) {
+ public TestPathAwareVisitor(Component.Type maxDepth, ComponentVisitor.Order order) {
super(maxDepth, order, new SimpleStackElementFactory<Integer>() {
@Override
public Integer createForAny(Component component) {
import static org.sonar.server.computation.component.Component.Type.FILE;
import static org.sonar.server.computation.component.Component.Type.MODULE;
import static org.sonar.server.computation.component.Component.Type.PROJECT;
-import static org.sonar.server.computation.component.Visitor.Order.POST_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.POST_ORDER;
public class VisitorsCrawlerWithPostOrderTypeAwareVisitorTest {
return DumbComponent.builder(type, ref).addChildren(children).build();
}
- private static VisitorsCrawler newVisitorsCrawler(Visitor visitor) {
- return new VisitorsCrawler(Arrays.asList(visitor));
+ private static VisitorsCrawler newVisitorsCrawler(ComponentVisitor componentVisitor) {
+ return new VisitorsCrawler(Arrays.asList(componentVisitor));
}
}
import static org.sonar.server.computation.component.Component.Type.FILE;
import static org.sonar.server.computation.component.Component.Type.MODULE;
import static org.sonar.server.computation.component.Component.Type.PROJECT;
-import static org.sonar.server.computation.component.Visitor.Order.PRE_ORDER;
+import static org.sonar.server.computation.component.ComponentVisitor.Order.PRE_ORDER;
public class VisitorsCrawlerWithPreOrderTypeAwareVisitorTest {
return DumbComponent.builder(type, ref).addChildren(children).build();
}
- private static VisitorsCrawler newVisitorsCrawler(Visitor visitor) {
- return new VisitorsCrawler(Arrays.asList(visitor));
+ private static VisitorsCrawler newVisitorsCrawler(ComponentVisitor componentVisitor) {
+ return new VisitorsCrawler(Arrays.asList(componentVisitor));
}
}
import org.junit.Test;
import org.sonar.api.ce.measure.MeasureComputer;
import org.sonar.server.computation.component.Component;
-import org.sonar.server.computation.component.Visitor;
+import org.sonar.server.computation.component.ComponentVisitor;
import org.sonar.server.computation.component.VisitorsCrawler;
import org.sonar.server.computation.measure.api.MeasureComputerImpl;
import org.sonar.server.computation.metric.MetricRepositoryRule;
.build()
));
- VisitorsCrawler visitorsCrawler = new VisitorsCrawler(Arrays.<Visitor>asList(new MeasureComputersVisitor(metricRepository, measureRepository, null, measureComputersHolder)));
+ VisitorsCrawler visitorsCrawler = new VisitorsCrawler(Arrays.<ComponentVisitor>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)));
measureRepository.addRawMeasure(ROOT_REF, COMMENT_LINES_KEY, newMeasureBuilder().create(7));
measureComputersHolder.setMeasureComputers(Collections.<MeasureComputer>emptyList());
- VisitorsCrawler visitorsCrawler = new VisitorsCrawler(Arrays.<Visitor>asList(new MeasureComputersVisitor(metricRepository, measureRepository, null, measureComputersHolder)));
+ VisitorsCrawler visitorsCrawler = new VisitorsCrawler(Arrays.<ComponentVisitor>asList(new MeasureComputersVisitor(metricRepository, measureRepository, null, measureComputersHolder)));
visitorsCrawler.visit(ROOT);
assertThat(toEntries(measureRepository.getAddedRawMeasures(FILE_1_REF))).isEmpty();
import org.junit.rules.ExternalResource;
import org.sonar.db.rule.RuleDto;
import org.sonar.server.computation.component.Component;
+import org.sonar.server.computation.component.ComponentVisitor;
import org.sonar.server.computation.component.DepthTraversalTypeAwareCrawler;
import org.sonar.server.computation.component.TreeRootHolder;
-import org.sonar.server.computation.component.Visitor;
import org.sonar.server.computation.debt.Characteristic;
import org.sonar.server.computation.metric.Metric;
import org.sonar.server.computation.metric.MetricRepositoryRule;
private final Map<Integer, Component> componentsByRef = new HashMap<>();
public TreeComponentProvider(Component root) {
- new DepthTraversalTypeAwareCrawler(Component.Type.FILE, Visitor.Order.PRE_ORDER) {
+ new DepthTraversalTypeAwareCrawler(Component.Type.FILE, ComponentVisitor.Order.PRE_ORDER) {
@Override
public void visitAny(Component component) {
checkState(!componentsByRef.containsKey(component.getRef()), "Tree contains more than one component with ref " + component.getRef());
import org.junit.Test;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.server.computation.batch.TreeRootHolderRule;
+import org.sonar.server.computation.component.ComponentVisitor;
import org.sonar.server.computation.component.DumbComponent;
import org.sonar.server.computation.component.FileAttributes;
-import org.sonar.server.computation.component.Visitor;
import org.sonar.server.computation.component.VisitorsCrawler;
import org.sonar.server.computation.measure.Measure;
import org.sonar.server.computation.measure.MeasureRepoEntry;
private SqaleRatingSettings sqaleRatingSettings = mock(SqaleRatingSettings.class);
- private VisitorsCrawler underTest = new VisitorsCrawler(Arrays.<Visitor>asList(new SqaleMeasuresVisitor(metricRepository, measureRepository, sqaleRatingSettings)));
+ private VisitorsCrawler underTest = new VisitorsCrawler(Arrays.<ComponentVisitor>asList(new SqaleMeasuresVisitor(metricRepository, measureRepository, sqaleRatingSettings)));
@Before
public void setUp() {
import org.junit.Test;
import org.sonar.server.computation.batch.TreeRootHolderRule;
import org.sonar.server.computation.component.Component;
+import org.sonar.server.computation.component.ComponentVisitor;
import org.sonar.server.computation.component.PathAwareVisitorAdapter;
import org.sonar.server.computation.component.TypeAwareVisitorAdapter;
-import org.sonar.server.computation.component.Visitor;
import org.sonar.server.computation.measure.MeasureRepositoryRule;
import org.sonar.server.computation.metric.Metric;
import org.sonar.server.computation.metric.MetricImpl;
@Test
public void execute_with_type_aware_visitor() throws Exception {
- when(visitors.instances()).thenReturn(Arrays.<Visitor>asList(new TestTypeAwareVisitor()));
+ when(visitors.instances()).thenReturn(Arrays.<ComponentVisitor>asList(new TestTypeAwareVisitor()));
ExecuteVisitorsStep underStep = new ExecuteVisitorsStep(treeRootHolder, visitors);
measureRepository.addRawMeasure(FILE_1_REF, NCLOC_KEY, newMeasureBuilder().create(1));
@Test
public void execute_with_path_aware_visitor() throws Exception {
- when(visitors.instances()).thenReturn(Arrays.<Visitor>asList(new TestPathAwareVisitor()));
+ when(visitors.instances()).thenReturn(Arrays.<ComponentVisitor>asList(new TestPathAwareVisitor()));
ExecuteVisitorsStep underStep = new ExecuteVisitorsStep(treeRootHolder, visitors);
measureRepository.addRawMeasure(FILE_1_REF, NCLOC_KEY, newMeasureBuilder().create(1));
private class TestTypeAwareVisitor extends TypeAwareVisitorAdapter {
public TestTypeAwareVisitor() {
- super(Component.Type.FILE, Visitor.Order.POST_ORDER);
+ super(Component.Type.FILE, ComponentVisitor.Order.POST_ORDER);
}
@Override
private class TestPathAwareVisitor extends PathAwareVisitorAdapter<Counter> {
public TestPathAwareVisitor() {
- super(Component.Type.FILE, Visitor.Order.POST_ORDER, new SimpleStackElementFactory<Counter>() {
+ super(Component.Type.FILE, ComponentVisitor.Order.POST_ORDER, new SimpleStackElementFactory<Counter>() {
@Override
public Counter createForAny(Component component) {
return new Counter();