private final Component component;
public ComputationContext(ComponentTreeBuilder componentTreeBuilder) {
- this.component = componentTreeBuilder.build(this);
+ this.component = componentTreeBuilder.build();
}
@Override
package org.sonar.server.computation.component;
import java.util.List;
-import org.sonar.server.computation.context.ComputationContext;
import org.sonar.server.computation.step.PopulateComponentsUuidAndKeyStep;
public interface Component {
}
}
- ComputationContext getContext();
-
Type getType();
/**
import javax.annotation.Nullable;
import org.sonar.batch.protocol.Constants;
import org.sonar.batch.protocol.output.BatchReport;
-import org.sonar.server.computation.ComputationContext;
import static com.google.common.base.Predicates.notNull;
import static com.google.common.collect.ImmutableList.copyOf;
import static com.google.common.collect.Iterables.filter;
public class ComponentImpl implements Component {
- private final ComputationContext context;
private final Type type;
private final BatchReport.Component component;
private final List<Component> children;
private String key;
private String uuid;
- public ComponentImpl(ComputationContext context, BatchReport.Component component, @Nullable Iterable<Component> children) {
- this.context = context;
+ public ComponentImpl(BatchReport.Component component, @Nullable Iterable<Component> children) {
this.component = component;
this.type = convertType(component.getType());
this.children = children == null ? Collections.<Component>emptyList() : copyOf(filter(children, notNull()));
return children;
}
- @Override
- public org.sonar.server.computation.context.ComputationContext getContext() {
- return context;
- }
-
}
*/
package org.sonar.server.computation.component;
-import org.sonar.server.computation.ComputationContext;
-
public interface ComponentTreeBuilder {
/**
* Builds the tree of components for the specified ComputationContext and returns the Component of the root of this
* tree.
*/
- Component build(ComputationContext context);
+ Component build();
}
import javax.annotation.Nonnull;
import org.sonar.batch.protocol.output.BatchReport;
import org.sonar.server.computation.batch.BatchReportReader;
-import org.sonar.server.computation.ComputationContext;
import static java.util.Objects.requireNonNull;
requireNonNull(root);
return new ComponentTreeBuilder() {
@Override
- public Component build(ComputationContext context) {
+ public Component build() {
return root;
}
};
}
@Override
- public Component build(ComputationContext context) {
- return buildComponentRoot(context, reportReader);
+ public Component build() {
+ return buildComponentRoot(reportReader);
}
- private Component buildComponentRoot(ComputationContext computationContext, BatchReportReader reportReader) {
+ private Component buildComponentRoot(BatchReportReader reportReader) {
int rootComponentRef = reportReader.readMetadata().getRootComponentRef();
BatchReport.Component component = reportReader.readComponent(rootComponentRef);
- return new ComponentImpl(computationContext, component, buildComponent(computationContext, rootComponentRef));
+ return new ComponentImpl(component, buildComponent(rootComponentRef));
}
- private Iterable<Component> buildComponent(final ComputationContext computationContext, int componentRef) {
+ private Iterable<Component> buildComponent(int componentRef) {
BatchReport.Component component = reportReader.readComponent(componentRef);
return Iterables.transform(
component.getChildRefList(),
@Override
public Component apply(@Nonnull Integer componentRef) {
BatchReport.Component component = reportReader.readComponent(componentRef);
- return new ComponentImpl(computationContext, component, buildComponent(computationContext, componentRef));
+ return new ComponentImpl(component, buildComponent(componentRef));
}
}
);
@Override
public void execute(ComputationContext context) {
- IssueDepthTraversalTypeAwareVisitor visitor = new IssueDepthTraversalTypeAwareVisitor(context);
+ IssueDepthTraversalTypeAwareVisitor visitor = new IssueDepthTraversalTypeAwareVisitor();
visitor.visit(context.getRoot());
- processDeletedComponents(context, visitor);
+ processDeletedComponents(visitor);
issueComputation.afterReportProcessing();
}
- private void processDeletedComponents(ComputationContext context, IssueDepthTraversalTypeAwareVisitor visitor) {
+ private void processDeletedComponents(IssueDepthTraversalTypeAwareVisitor visitor) {
int deletedComponentsCount = reportReader.readMetadata().getDeletedComponentsCount();
for (int componentRef = 1; componentRef <= deletedComponentsCount; componentRef++) {
BatchReport.Issues issues = reportReader.readDeletedComponentIssues(componentRef);
}
private class IssueDepthTraversalTypeAwareVisitor extends DepthTraversalTypeAwareVisitor {
-
- private final ComputationContext context;
-
private String projectKey;
private String projectUuid;
- public IssueDepthTraversalTypeAwareVisitor(ComputationContext context) {
+ public IssueDepthTraversalTypeAwareVisitor() {
super(Component.Type.FILE, Order.PRE_ORDER);
- this.context = context;
}
@Override
public void visitProject(Component tree) {
projectKey = tree.getKey();
projectUuid = tree.getUuid();
- executeForComponent(tree, context);
+ executeForComponent(tree);
}
@Override
public void visitModule(Component module) {
- executeForComponent(module, context);
+ executeForComponent(module);
}
@Override
public void visitDirectory(Component directory) {
- executeForComponent(directory, context);
+ executeForComponent(directory);
}
@Override
public void visitFile(Component file) {
- executeForComponent(file, context);
+ executeForComponent(file);
}
- private void executeForComponent(Component component, ComputationContext context) {
+ private void executeForComponent(Component component) {
int componentRef = component.getRef();
List<BatchReport.Issue> issues = reportReader.readComponentIssues(componentRef);
issueComputation.processComponentIssues(issues, component.getUuid(), componentRef, projectKey, projectUuid);
DbSession session = dbClient.openSession(true);
try {
MetricDto duplicationMetric = dbClient.metricDao().selectByKey(session, CoreMetrics.DUPLICATIONS_DATA_KEY);
- DuplicationContext duplicationContext = new DuplicationContext(context, duplicationMetric, session);
+ DuplicationContext duplicationContext = new DuplicationContext(duplicationMetric, session);
int rootComponentRef = reportReader.readMetadata().getRootComponentRef();
recursivelyProcessComponent(duplicationContext, rootComponentRef);
session.commit();
private static class DuplicationContext {
private DbSession session;
- private ComputationContext context;
private MetricDto duplicationMetric;
- DuplicationContext(ComputationContext context, MetricDto duplicationMetric, DbSession session) {
- this.context = context;
+ DuplicationContext(MetricDto duplicationMetric, DbSession session) {
this.duplicationMetric = duplicationMetric;
this.session = session;
}
- public ComputationContext context() {
- return context;
- }
-
public MetricDto metric() {
return duplicationMetric;
}
DbSession session = dbClient.openSession(false);
try {
int rootComponentRef = reportReader.readMetadata().getRootComponentRef();
- recursivelyProcessComponent(session, context, rootComponentRef);
+ recursivelyProcessComponent(session, rootComponentRef);
session.commit();
} finally {
MyBatis.closeQuietly(session);
}
}
- private void recursivelyProcessComponent(DbSession session, ComputationContext context, int componentRef) {
+ private void recursivelyProcessComponent(DbSession session, int componentRef) {
BatchReport.Component component = reportReader.readComponent(componentRef);
long analysisDate = reportReader.readMetadata().getAnalysisDate();
processEvents(session, component, analysisDate);
saveVersionEvent(session, component, analysisDate);
for (Integer childRef : component.getChildRefList()) {
- recursivelyProcessComponent(session, context, childRef);
+ recursivelyProcessComponent(session, childRef);
}
}
}
});
- recursivelyProcessComponent(new FileSourcesContext(session, context, previousFileSourcesByUuid, projectUuid), rootComponentRef);
+ recursivelyProcessComponent(new FileSourcesContext(session, previousFileSourcesByUuid, projectUuid), rootComponentRef);
} finally {
MyBatis.closeQuietly(session);
}
private static class FileSourcesContext {
DbSession session;
- ComputationContext context;
Map<String, FileSourceDto> previousFileSourcesByUuid;
String projectUuid;
- public FileSourcesContext(DbSession session, ComputationContext context, Map<String, FileSourceDto> previousFileSourcesByUuid, String projectUuid) {
- this.context = context;
+ public FileSourcesContext(DbSession session, Map<String, FileSourceDto> previousFileSourcesByUuid, String projectUuid) {
this.previousFileSourcesByUuid = previousFileSourcesByUuid;
this.session = session;
this.projectUuid = projectUuid;
public void execute(ComputationContext context) {
int rootComponentRef = reportReader.readMetadata().getRootComponentRef();
try (DbSession dbSession = dbClient.openSession(true)) {
- recursivelyProcessComponent(dbSession, context, rootComponentRef);
+ recursivelyProcessComponent(dbSession, rootComponentRef);
dbSession.commit();
}
}
- private void recursivelyProcessComponent(DbSession dbSession, ComputationContext context, int componentRef) {
+ private void recursivelyProcessComponent(DbSession dbSession, int componentRef) {
BatchReport.Component component = reportReader.readComponent(componentRef);
List<BatchReport.Measure> measures = reportReader.readComponentMeasures(componentRef);
persistMeasures(dbSession, measures, component);
for (Integer childRef : component.getChildRefList()) {
- recursivelyProcessComponent(dbSession, context, childRef);
+ recursivelyProcessComponent(dbSession, childRef);
}
}
@Override
public void execute(ComputationContext context) {
int rootComponentRef = reportReader.readMetadata().getRootComponentRef();
- recursivelyProcessComponent(context, rootComponentRef);
+ recursivelyProcessComponent(rootComponentRef);
if (!commitFound()) {
Long lastCommitFromIndex = lastCommitFromIndex(dbComponentsRefCache.getByRef(rootComponentRef).getUuid());
}
}
- private void recursivelyProcessComponent(ComputationContext context, int componentRef) {
+ private void recursivelyProcessComponent(int componentRef) {
BatchReport.Component component = reportReader.readComponent(componentRef);
BatchReport.Changesets scm = reportReader.readChangesets(componentRef);
processScm(scm);
for (Integer childRef : component.getChildRefList()) {
- recursivelyProcessComponent(context, childRef);
+ recursivelyProcessComponent(childRef);
}
}
DbSession session = dbClient.openSession(false);
try {
int rootComponentRef = reportReader.readMetadata().getRootComponentRef();
- recursivelyProcessComponent(session, context, rootComponentRef);
+ recursivelyProcessComponent(session, rootComponentRef);
session.commit();
} finally {
MyBatis.closeQuietly(session);
}
}
- private void recursivelyProcessComponent(DbSession session, ComputationContext context, int componentRef) {
+ private void recursivelyProcessComponent(DbSession session, int componentRef) {
BatchReport.Component component = reportReader.readComponent(componentRef);
processLinks(session, component);
for (Integer childRef : component.getChildRefList()) {
- recursivelyProcessComponent(session, context, childRef);
+ recursivelyProcessComponent(session, childRef);
}
}
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
-import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-import org.sonar.server.computation.context.ComputationContext;
+/**
+ * Implementation of {@link Component} for unit tests.
+ */
public class DumbComponent implements Component {
public static final Component DUMB_PROJECT = new DumbComponent(Type.PROJECT, 1, "PROJECT_KEY", "PROJECT_UUID");
- private static final String UNSUPPORTED_OPERATION_ERROR = "This node has no repository nor context";
-
- @CheckForNull
- private final ComputationContext context;
private final Type type;
private final int ref;
private final String uuid;
private final String key;
private final List<Component> children;
- public DumbComponent(Type type, int ref, String uuid, String key, @Nullable Component... children) {
- this(null, type, ref, uuid, key, children);
- }
-
- public DumbComponent(@Nullable ComputationContext context, Type type, int ref, String uuid, String key, @Nullable Component... children) {
- this.context = context;
+ public DumbComponent(Type type, int ref, @Nullable String uuid, @Nullable String key, @Nullable Component... children) {
this.type = type;
this.ref = ref;
this.uuid = uuid;
return children;
}
- @Override
- public ComputationContext getContext() {
- if (context == null) {
- throw new UnsupportedOperationException(UNSUPPORTED_OPERATION_ERROR);
- }
- return context;
- }
-
}
private ComputationContext newNoChildRootContext() {
return new ComputationContext(new ComponentTreeBuilder() {
@Override
- public Component build(ComputationContext context) {
- return new DumbComponent(context, Component.Type.PROJECT, 1, "uuid", "key");
+ public Component build() {
+ return new DumbComponent(Component.Type.PROJECT, 1, "uuid", "key");
}
});
}