this is a preparatory change to add support for Views components in CE's Component interface
remove Component#getRef and Component#getVersion
package org.sonar.server.computation.component;
import java.util.List;
-import javax.annotation.CheckForNull;
import org.sonar.server.computation.step.FillComponentsStep;
public interface Component {
Type getType();
/**
- * Return the component uuid only when {@link FillComponentsStep} has been executed, otherwise it will throw an exception.
+ * Returns the component uuid only when {@link FillComponentsStep} has been executed, otherwise it will throw an exception.
*/
String getUuid();
/**
- * Return the component key only when {@link FillComponentsStep} has been executed, otherwise it will throw an exception.
+ * Returns the component key only when {@link FillComponentsStep} has been executed, otherwise it will throw an exception.
*/
String getKey();
/**
- * The component ref in the batch report.
+ * Returns the attributes specific to components of type {@link Type#PROJECT}, {@link Type#MODULE},
+ * {@link Type#DIRECTORY} or {@link Type#FILE}.
+ *
+ * @throws IllegalStateException when the component's type is neither {@link Type#PROJECT}, {@link Type#MODULE},
+ * {@link Type#DIRECTORY} nor {@link Type#FILE}.
*/
- int getRef();
+ ReportAttributes getReportAttributes();
/**
- * The component name as defined in the batch report.
+ * The component name.
*/
String getName();
- /**
- * The project or module version as defined in the batch report.
- */
- @CheckForNull
- String getVersion();
-
/**
* The attributes of the Component if it's type is File.
*
import org.sonar.batch.protocol.Constants;
import org.sonar.batch.protocol.output.BatchReport;
+import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
import static com.google.common.base.Predicates.notNull;
import static com.google.common.collect.ImmutableList.copyOf;
public class ComponentImpl implements Component {
private final Type type;
- private final int ref;
private final String name;
- private final String version;
+ @CheckForNull
+ private final ReportAttributes reportAttributes;
@CheckForNull
private final FileAttributes fileAttributes;
private final List<Component> children;
private String uuid;
public ComponentImpl(BatchReport.Component component, @Nullable Iterable<Component> children) {
- this.ref = component.getRef();
this.type = convertType(component.getType());
- this.name = component.getName();
- this.version = component.hasVersion() ? component.getVersion() : null;
+ this.name = checkNotNull(component.getName());
+ this.reportAttributes = createBatchAttributes(component);
this.fileAttributes = createFileAttributes(component);
this.children = children == null ? Collections.<Component>emptyList() : copyOf(filter(children, notNull()));
}
+ private static ReportAttributes createBatchAttributes(BatchReport.Component component) {
+ return new ReportAttributes(component.getRef(), component.hasVersion() ? component.getVersion() : null);
+ }
+
@CheckForNull
private static FileAttributes createFileAttributes(BatchReport.Component component) {
if (component.getType() != Constants.ComponentType.FILE) {
return type;
}
- @Override
- public int getRef() {
- return ref;
- }
-
@Override
public String getUuid() {
if (uuid == null) {
- throw new UnsupportedOperationException(String.format("Component uuid of ref '%s' has not be fed yet", getRef()));
+ throw new UnsupportedOperationException(String.format("Component uuid of ref '%s' has not be fed yet", this.reportAttributes.getRef()));
}
return uuid;
}
@Override
public String getKey() {
if (key == null) {
- throw new UnsupportedOperationException(String.format("Component key of ref '%s' has not be fed yet", getRef()));
+ throw new UnsupportedOperationException(String.format("Component key of ref '%s' has not be fed yet", this.reportAttributes.getRef()));
}
return key;
}
- @Override
- public String getName() {
- return name;
+ public ComponentImpl setKey(String key) {
+ this.key = key;
+ return this;
}
@Override
- @CheckForNull
- public String getVersion() {
- return version;
+ public ReportAttributes getReportAttributes() {
+ return this.reportAttributes;
}
- public ComponentImpl setKey(String key) {
- this.key = key;
- return this;
+ @Override
+ public String getName() {
+ return this.name;
}
@Override
private final Map<Integer, Long> snapshotIdsByRef = new HashMap<>();
public DbIdsRepository setComponentId(Component component, long componentId) {
- int ref = component.getRef();
+ int ref = component.getReportAttributes().getRef();
Long existingComponentId = componentIdsByRef.get(ref);
if (existingComponentId != null) {
throw new IllegalArgumentException(String.format("Component ref '%s' has already a component id", ref));
}
public long getComponentId(Component component) {
- int ref = component.getRef();
+ int ref = component.getReportAttributes().getRef();
Long componentId = componentIdsByRef.get(ref);
if (componentId == null) {
throw new IllegalArgumentException(String.format("Component ref '%s' has no component id", ref));
}
public DbIdsRepository setSnapshotId(Component component, long snapshotId) {
- int ref = component.getRef();
+ int ref = component.getReportAttributes().getRef();
Long existingSnapshotId = snapshotIdsByRef.get(ref);
if (existingSnapshotId != null) {
throw new IllegalArgumentException(String.format("Component ref '%s' has already a snapshot id", ref));
}
public long getSnapshotId(Component component) {
- int ref = component.getRef();
+ int ref = component.getReportAttributes().getRef();
Long snapshotId = snapshotIdsByRef.get(ref);
if (snapshotId == null) {
throw new IllegalArgumentException(String.format("Component ref '%s' has no snapshot id", ref));
--- /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;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.Immutable;
+
+import static java.util.Objects.requireNonNull;
+
+@Immutable
+public class ReportAttributes {
+ private final int ref;
+ private final String version;
+
+ public ReportAttributes(int ref, @Nullable String version) {
+ this.ref = ref;
+ this.version = version;
+ }
+
+ /**
+ * The component ref in the batch report.
+ */
+ public int getRef() {
+ return ref;
+ }
+
+ /**
+ * The project or module version as defined in the batch report.
+ */
+ @CheckForNull
+ public String getVersion() {
+ return this.version;
+ }
+
+}
new DepthTraversalTypeAwareCrawler(Component.Type.FILE, POST_ORDER) {
@Override
public void visitAny(Component component) {
- componentsByRef.put(component.getRef(), component);
+ componentsByRef.put(component.getReportAttributes().getRef(), component);
}
}.visit(root);
}
@Override
public void add(Component component, Event event) {
- events.put(component.getRef(), requireNonNull(event));
+ events.put(component.getReportAttributes().getRef(), requireNonNull(event));
}
@Override
public Iterable<Event> getEvents(Component component) {
- return this.events.get(component.getRef());
+ return this.events.get(component.getReportAttributes().getRef());
}
}
@Override
public void beforeComponent(Component component) {
currentDebt = new Debt();
- debtsByComponentRef.put(component.getRef(), currentDebt);
+ debtsByComponentRef.put(component.getReportAttributes().getRef(), currentDebt);
// aggregate children counters
for (Component child : component.getChildren()) {
// no need to keep the children in memory. They can be garbage-collected.
- Debt childDebt = debtsByComponentRef.remove(child.getRef());
+ Debt childDebt = debtsByComponentRef.remove(child.getReportAttributes().getRef());
if (childDebt != null) {
currentDebt.add(childDebt);
}
}
private BatchReport.Changesets loadScmChangesetsFromReport(Component component) {
- return reportReader.readChangesets(component.getRef());
+ return reportReader.readChangesets(component.getReportAttributes().getRef());
}
private BatchReport.Changesets loadScmChangesetsFromIndex(Component component) {
List<SourceLineDoc> lines = sourceLineIndex.getLines(component.getUuid());
Map<String, BatchReport.Changesets.Changeset> changesetByRevision = new HashMap<>();
BatchReport.Changesets.Builder scmBuilder = BatchReport.Changesets.newBuilder()
- .setComponentRef(component.getRef());
+ .setComponentRef(component.getReportAttributes().getRef());
for (SourceLineDoc sourceLine : lines) {
String scmRevision = sourceLine.scmRevision();
if (scmRevision == null || changesetByRevision.get(scmRevision) == null) {
public void beforeComponent(Component component) {
// TODO optimization no need to instantiate counter if no open issues
currentCounters = new Counters();
- countersByComponentRef.put(component.getRef(), currentCounters);
+ countersByComponentRef.put(component.getReportAttributes().getRef(), currentCounters);
// aggregate children counters
for (Component child : component.getChildren()) {
// no need to keep the children in memory. They can be garbage-collected.
- Counters childCounters = countersByComponentRef.remove(child.getRef());
+ Counters childCounters = countersByComponentRef.remove(child.getReportAttributes().getRef());
currentCounters.add(childCounters);
}
}
@Override
public void beforeComponent(Component component) {
currentSum = new DebtSum();
- sumsByComponentRef.put(component.getRef(), currentSum);
+ sumsByComponentRef.put(component.getReportAttributes().getRef(), currentSum);
List<IssueChangeDto> changes = dbClient.issueChangeDao().selectChangelogOfNonClosedIssuesByComponent(component.getUuid());
for (IssueChangeDto change : changes) {
changesByIssueUuid.put(change.getIssueKey(), change);
}
for (Component child : component.getChildren()) {
- DebtSum childSum = sumsByComponentRef.remove(child.getRef());
+ DebtSum childSum = sumsByComponentRef.remove(child.getReportAttributes().getRef());
if (childSum != null) {
currentSum.add(childSum);
}
protected LineHashSequence loadLineHashSequence() {
Iterable<String> lines;
if (component.getType() == Component.Type.FILE) {
- lines = Lists.newArrayList(reportReader.readFileSource(component.getRef()));
+ lines = Lists.newArrayList(reportReader.readFileSource(component.getReportAttributes().getRef()));
} else {
lines = Collections.emptyList();
}
for (DefaultIssue commonRuleIssue : commonRuleEngine.process(component)) {
result.add(init(commonRuleIssue));
}
- try (CloseableIterator<BatchReport.Issue> reportIssues = reportReader.readComponentIssues(component.getRef())) {
+ try (CloseableIterator<BatchReport.Issue> reportIssues = reportReader.readComponentIssues(component.getReportAttributes().getRef())) {
// optimization - do not load line hashes if there are no issues -> getLineHashSequence() is executed
// as late as possible
while (reportIssues.hasNext()) {
private DbIssues.Location convertLocation(BatchReport.IssueLocation source) {
DbIssues.Location.Builder target = DbIssues.Location.newBuilder();
- if (source.hasComponentRef() && source.getComponentRef() != component.getRef()) {
+ if (source.hasComponentRef() && source.getComponentRef() != component.getReportAttributes().getRef()) {
target.setComponentId(treeRootHolder.getComponentByRef(source.getComponentRef()).getUuid());
}
if (source.hasMsg()) {
@Override
public SetMultimap<String, Measure> getRawMeasures(Component component) {
loadBatchMeasuresForComponent(component);
- Map<MeasureKey, Measure> rawMeasures = measures.get(component.getRef());
+ Map<MeasureKey, Measure> rawMeasures = measures.get(component.getReportAttributes().getRef());
if (rawMeasures == null) {
return ImmutableSetMultimap.of();
}
}
private void loadBatchMeasuresForComponent(Component component) {
- if (loadedComponents.contains(component.getRef())) {
+ if (loadedComponents.contains(component.getReportAttributes().getRef())) {
return;
}
- try (CloseableIterator<BatchReport.Measure> readIt = reportReader.readComponentMeasures(component.getRef())) {
+ try (CloseableIterator<BatchReport.Measure> readIt = reportReader.readComponentMeasures(component.getReportAttributes().getRef())) {
while (readIt.hasNext()) {
BatchReport.Measure batchMeasure = readIt.next();
String metricKey = batchMeasure.getMetricKey();
}
}
}
- loadedComponents.add(component.getRef());
+ loadedComponents.add(component.getReportAttributes().getRef());
}
private Optional<Measure> findLocal(Component component, Metric metric,
@Nullable RuleDto rule, @Nullable Characteristic characteristic) {
- Map<MeasureKey, Measure> measuresPerMetric = measures.get(component.getRef());
+ Map<MeasureKey, Measure> measuresPerMetric = measures.get(component.getReportAttributes().getRef());
if (measuresPerMetric == null) {
return Optional.absent();
}
}
private Optional<Measure> findLocal(Component component, Metric metric, Measure measure) {
- Map<MeasureKey, Measure> measuresPerMetric = measures.get(component.getRef());
+ Map<MeasureKey, Measure> measuresPerMetric = measures.get(component.getReportAttributes().getRef());
if (measuresPerMetric == null) {
return Optional.absent();
}
}
private void addLocal(Component component, Metric metric, Measure measure, OverridePolicy overridePolicy) {
- Map<MeasureKey, Measure> measuresPerMetric = measures.get(component.getRef());
+ Map<MeasureKey, Measure> measuresPerMetric = measures.get(component.getReportAttributes().getRef());
if (measuresPerMetric == null) {
measuresPerMetric = new HashMap<>();
- measures.put(component.getRef(), measuresPerMetric);
+ measures.put(component.getReportAttributes().getRef(), measuresPerMetric);
}
MeasureKey key = new MeasureKey(metric.getKey(), measure.getRuleId(), measure.getCharacteristicId());
if (!measuresPerMetric.containsKey(key) || overridePolicy == OverridePolicy.OVERRIDE) {
// No project on first analysis, no period
if (projectDto.isPresent()) {
List<Period> periods = new ArrayList<>(5);
- PeriodResolver periodResolver = new PeriodResolver(session, projectDto.get().getId(), batchReportReader.readMetadata().getAnalysisDate(), project.getVersion(),
+ PeriodResolver periodResolver = new PeriodResolver(session, projectDto.get().getId(), batchReportReader.readMetadata().getAnalysisDate(), project.getReportAttributes().getVersion(),
// TODO qualifier will be different for Views
Qualifiers.PROJECT);
BatchReport.Metadata reportMetadata = reportReader.readMetadata();
String branch = reportMetadata.hasBranch() ? reportMetadata.getBranch() : null;
- BatchReport.Component reportComponent = reportReader.readComponent(component.getRef());
+ BatchReport.Component reportComponent = reportReader.readComponent(component.getReportAttributes().getRef());
String key = ComponentKeys.createKey(reportComponent.getKey(), branch);
component.setKey(key);
component.setUuid(uuidFactory.getOrCreateForKey(key));
}
private void processDirectoryAndFile(UuidFactory uuidFactory, ComponentImpl component, Component nearestModule) {
- BatchReport.Component reportComponent = reportReader.readComponent(component.getRef());
+ BatchReport.Component reportComponent = reportReader.readComponent(component.getReportAttributes().getRef());
// TODO fail if path is null
String key = ComponentKeys.createEffectiveKey(nearestModule.getKey(), reportComponent.getPath());
component.setKey(key);
@Override
public void aggregate(FileAggregateContext context) {
Component fileComponent = context.getFile();
- BatchReport.Changesets componentScm = batchReportReader.readChangesets(fileComponent.getRef());
+ BatchReport.Changesets componentScm = batchReportReader.readChangesets(fileComponent.getReportAttributes().getRef());
if (componentScm == null) {
return;
}
}
public void recursivelyProcessComponent(Component component, @Nullable ComponentDto lastModule) {
- BatchReport.Component reportComponent = reportReader.readComponent(component.getRef());
+ BatchReport.Component reportComponent = reportReader.readComponent(component.getReportAttributes().getRef());
switch (component.getType()) {
case PROJECT:
componentDto.setProjectUuid(componentDto.uuid());
componentDto.setModuleUuidPath(ComponentDto.MODULE_UUID_PATH_SEP + componentDto.uuid() + ComponentDto.MODULE_UUID_PATH_SEP);
- ComponentDto projectDto = persistComponent(project.getRef(), componentDto);
+ ComponentDto projectDto = persistComponent(project.getReportAttributes().getRef(), componentDto);
addToCache(project, projectDto);
return projectDto;
}
componentDto.setModuleUuid(lastModule.uuid());
componentDto.setModuleUuidPath(lastModule.moduleUuidPath() + componentDto.uuid() + ComponentDto.MODULE_UUID_PATH_SEP);
- ComponentDto moduleDto = persistComponent(module.getRef(), componentDto);
+ ComponentDto moduleDto = persistComponent(module.getReportAttributes().getRef(), componentDto);
addToCache(module, moduleDto);
return moduleDto;
}
componentDto.setModuleUuid(lastModule.uuid());
componentDto.setModuleUuidPath(lastModule.moduleUuidPath());
- ComponentDto directoryDto = persistComponent(directory.getRef(), componentDto);
+ ComponentDto directoryDto = persistComponent(directory.getReportAttributes().getRef(), componentDto);
addToCache(directory, directoryDto);
return directoryDto;
}
componentDto.setModuleUuid(lastModule.uuid());
componentDto.setModuleUuidPath(lastModule.moduleUuidPath());
- ComponentDto fileDto = persistComponent(file.getRef(), componentDto);
+ ComponentDto fileDto = persistComponent(file.getReportAttributes().getRef(), componentDto);
addToCache(file, fileDto);
}
}
private void visitComponent(Component component) {
- try (CloseableIterator<BatchReport.Duplication> duplications = reportReader.readComponentDuplications(component.getRef())) {
+ try (CloseableIterator<BatchReport.Duplication> duplications = reportReader.readComponentDuplications(component.getReportAttributes().getRef())) {
if (duplications.hasNext()) {
saveDuplications(component, duplications);
}
}
private void saveVersionEvent(DbSession session, Component component, Long analysisDate) {
- String version = component.getVersion();
+ String version = component.getReportAttributes().getVersion();
if (version != null) {
deletePreviousEventsHavingSameVersion(session, version, component);
dbClient.eventDao().insert(session, newBaseEvent(component, analysisDate)
@Override
public void visitFile(Component file) {
- int fileRef = file.getRef();
+ int fileRef = file.getReportAttributes().getRef();
BatchReport.Component component = reportReader.readComponent(fileRef);
CloseableIterator<String> linesIterator = reportReader.readFileSource(fileRef);
LineReaders lineReaders = new LineReaders(reportReader, fileRef);
@Override
public void visitFile(Component component) {
- BatchReport.Changesets scm = reportReader.readChangesets(component.getRef());
+ BatchReport.Changesets scm = reportReader.readChangesets(component.getReportAttributes().getRef());
processScm(scm);
}
}
private void processComponent(Component component) {
- BatchReport.Component batchComponent = reportReader.readComponent(component.getRef());
+ BatchReport.Component batchComponent = reportReader.readComponent(component.getReportAttributes().getRef());
processLinks(component.getUuid(), batchComponent.getLinkList());
}
switch (component.getType()) {
case PROJECT:
this.projectId = componentId;
- SnapshotDto projectSnapshot = persistSnapshot(componentId, Qualifiers.PROJECT, Scopes.PROJECT, component.getVersion(), parentSnapshot, true);
+ SnapshotDto projectSnapshot = persistSnapshot(componentId, Qualifiers.PROJECT, Scopes.PROJECT, component.getReportAttributes().getVersion(), parentSnapshot, true);
addToCache(component, projectSnapshot);
processChildren(component, projectSnapshot);
break;
case MODULE:
- SnapshotDto moduleSnapshot = persistSnapshot(componentId, Qualifiers.MODULE, Scopes.PROJECT, component.getVersion(), parentSnapshot, true);
+ SnapshotDto moduleSnapshot = persistSnapshot(componentId, Qualifiers.MODULE, Scopes.PROJECT, component.getReportAttributes().getVersion(), parentSnapshot, true);
addToCache(component, moduleSnapshot);
processChildren(component, moduleSnapshot);
break;
}
private void persistTestResults(Component component) {
- Multimap<String, DbFileSources.Test.Builder> testsByName = buildDbTests(component.getRef());
- Table<String, String, DbFileSources.Test.CoveredFile.Builder> coveredFilesByName = loadCoverageDetails(component.getRef());
+ Multimap<String, DbFileSources.Test.Builder> testsByName = buildDbTests(component.getReportAttributes().getRef());
+ Table<String, String, DbFileSources.Test.CoveredFile.Builder> coveredFilesByName = loadCoverageDetails(component.getReportAttributes().getRef());
List<DbFileSources.Test> tests = addCoveredFilesToTests(testsByName, coveredFilesByName);
if (checkIfThereAreUnprocessedCoverageDetails(testsByName, coveredFilesByName, component.getKey())) {
hasUnprocessedCoverageDetails = true;
return;
}
- String componentUuid = getUuid(component.getRef());
+ String componentUuid = getUuid(component.getReportAttributes().getRef());
FileSourceDto existingDto = existingFileSourcesByUuid.get(componentUuid);
long now = system.now();
if (existingDto != null) {
// Load base profiles
Optional<Measure> rawMeasure = measureRepository.getRawMeasure(projectComponent, metricRepository.getByKey(CoreMetrics.QUALITY_PROFILES_KEY));
if (!rawMeasure.isPresent()) {
- throw new IllegalStateException("Missing measure " + CoreMetrics.QUALITY_PROFILES + " for component " + projectComponent.getRef());
+ throw new IllegalStateException("Missing measure " + CoreMetrics.QUALITY_PROFILES + " for component " + projectComponent.getReportAttributes().getRef());
}
Map<String, QualityProfile> rawProfiles = QPMeasureData.fromJson(rawMeasure.get().getStringValue()).getProfilesByKey();
}
private void validateBatchKey(Component rawComponent) {
- String batchKey = reportReader.readComponent(rawComponent.getRef()).getKey();
+ String batchKey = reportReader.readComponent(rawComponent.getReportAttributes().getRef()).getKey();
if (!ComponentKeys.isValidModuleKey(batchKey)) {
validationMessages.add(String.format("\"%s\" is not a valid project or module key. "
+ "Allowed characters are alphanumeric, '-', '_', '.' and ':', with at least one non-digit.", batchKey));
new DepthTraversalTypeAwareCrawler(Component.Type.FILE, POST_ORDER) {
@Override
public void visitAny(Component component) {
- componentsByRef.put(component.getRef(), component);
+ componentsByRef.put(component.getReportAttributes().getRef(), component);
}
}.visit(root);
return this;
public void get_version_from_batch_component() {
String version = "1.0";
ComponentImpl component = new ComponentImpl(BatchReport.Component.newBuilder().setVersion(version).build(), EMPTY_CHILD_LIST);
- assertThat(component.getVersion()).isEqualTo(version);
+ assertThat(component.getReportAttributes().getVersion()).isEqualTo(version);
}
@Test
@Test
public void fail_to_get_component_id_on_unknown_ref() {
thrown.expect(IllegalArgumentException.class);
- thrown.expectMessage("Component ref '" + component.getRef() + "' has no component id");
+ thrown.expectMessage("Component ref '" + component.getReportAttributes().getRef() + "' has no component id");
new DbIdsRepository().getComponentId(DumbComponent.DUMB_PROJECT);
}
@Test
public void fail_if_component_id_already_set() {
thrown.expect(IllegalArgumentException.class);
- thrown.expectMessage("Component ref '" + component.getRef() + "' has already a component id");
+ thrown.expectMessage("Component ref '" + component.getReportAttributes().getRef() + "' has already a component id");
DbIdsRepository cache = new DbIdsRepository();
cache.setComponentId(component, 10L);
@Test
public void fail_to_get_snapshot_id_on_unknown_ref() {
thrown.expect(IllegalArgumentException.class);
- thrown.expectMessage("Component ref '" + component.getRef() + "' has no snapshot id");
+ thrown.expectMessage("Component ref '" + component.getReportAttributes().getRef() + "' has no snapshot id");
new DbIdsRepository().getSnapshotId(DumbComponent.DUMB_PROJECT);
}
@Test
public void fail_if_snapshot_id_already_set() {
thrown.expect(IllegalArgumentException.class);
- thrown.expectMessage("Component ref '" + component.getRef() + "' has already a snapshot id");
+ thrown.expectMessage("Component ref '" + component.getReportAttributes().getRef() + "' has already a snapshot id");
DbIdsRepository cache = new DbIdsRepository();
cache.setSnapshotId(component, 10L);
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.List;
-import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
import static com.google.common.base.Preconditions.checkState;
public static final Component DUMB_PROJECT = builder(Type.PROJECT, 1).setKey("PROJECT_KEY").setUuid("PROJECT_UUID").setName("Project Name").setVersion("1.0-SNAPSHOT").build();
private final Type type;
- private final int ref;
- private final String uuid;
- private final String key;
private final String name;
- private final String version;
+ private final String key;
+ private final String uuid;
+ private final ReportAttributes reportAttributes;
private final FileAttributes fileAttributes;
private final List<Component> children;
private DumbComponent(Builder builder) {
this.type = builder.type;
- this.ref = builder.ref;
- this.uuid = builder.uuid;
this.key = builder.key;
- this.name = builder.name;
- this.version = builder.version;
+ this.name = builder.name == null ? String.valueOf(builder.key) : builder.name;
+ this.uuid = builder.uuid;
+ this.reportAttributes = new ReportAttributes(builder.ref, builder.version);
this.fileAttributes = builder.fileAttributes == null ? DEFAULT_FILE_ATTRIBUTES : builder.fileAttributes;
this.children = ImmutableList.copyOf(builder.children);
}
@Override
public String getUuid() {
if (uuid == null) {
- throw new UnsupportedOperationException(String.format("Component uuid of ref '%d' has not be fed yet", ref));
+ throw new UnsupportedOperationException(String.format("Component uuid of ref '%d' has not be fed yet", this.reportAttributes.getRef()));
}
return uuid;
}
@Override
public String getKey() {
if (key == null) {
- throw new UnsupportedOperationException(String.format("Component key of ref '%d' has not be fed yet", ref));
+ throw new UnsupportedOperationException(String.format("Component key of ref '%d' has not be fed yet", this.reportAttributes.getRef()));
}
return key;
}
@Override
- public String getName() {
- return name;
+ public ReportAttributes getReportAttributes() {
+ return this.reportAttributes;
}
@Override
- @CheckForNull
- public String getVersion() {
- return version;
- }
-
- @Override
- public int getRef() {
- return ref;
+ public String getName() {
+ return this.name;
}
@Override
return false;
}
DumbComponent that = (DumbComponent) o;
- return ref == that.ref;
+ return reportAttributes.getRef() == that.reportAttributes.getRef();
}
@Override
public int hashCode() {
- return ref;
+ return this.reportAttributes.getRef();
}
@Override
public String toString() {
return "DumbComponent{" +
- "ref=" + ref +
+ "ref=" + this.reportAttributes.getRef() +
", key='" + key + '\'' +
", type=" + type +
'}';
super(maxDepth, order, new SimpleStackElementFactory<Integer>() {
@Override
public Integer createForAny(Component component) {
- return component.getRef();
+ return component.getReportAttributes().getRef();
}
});
}
}
private static CallRecord newCallRecord(Component project, Path<Integer> path, String method) {
- return new CallRecord(method, project.getRef(), path.current(), getParent(path), path.root(),
+ return new CallRecord(method, project.getReportAttributes().getRef(), path.current(), getParent(path), path.root(),
toValueList(path));
}
@Test
public void fail_to_get_by_ref_if_root_not_set() {
thrown.expect(IllegalStateException.class);
- treeRootHolder.getComponentByRef(project.getRef());
+ treeRootHolder.getComponentByRef(project.getReportAttributes().getRef());
}
@Test
super(maxDepth, order, new SimpleStackElementFactory<Integer>() {
@Override
public Integer createForAny(Component component) {
- return component.getRef();
+ return component.getReportAttributes().getRef();
}
});
}
super(maxDepth, order, new SimpleStackElementFactory<Integer>() {
@Override
public Integer createForAny(Component component) {
- return component.getRef();
+ return component.getReportAttributes().getRef();
}
});
}
}
private static CallRecord newCallRecord(Component project, Path<Integer> path, String method) {
- return new CallRecord(method, project.getRef(), path.current(), getParent(path), path.root(),
+ return new CallRecord(method, project.getReportAttributes().getRef(), path.current(), getParent(path), path.root(),
toValueList(path));
}
@Override
public void aggregate(FileAggregateContext context) {
// verify the context which is passed to the method
- assertThat(context.getFile().getRef()).isIn(1111, 1112, 1211);
+ assertThat(context.getFile().getReportAttributes().getRef()).isIn(1111, 1112, 1211);
assertThat(context.getPeriods()).isEqualTo(periodsHolder.getPeriods());
Optional<Measure> measureOptional = context.getMeasure(LINES_KEY);
@Override
public void aggregate(FileAggregateContext context) {
// verify the context which is passed to the method
- assertThat(context.getFile().getRef()).isIn(1111, 1112, 1211);
+ assertThat(context.getFile().getReportAttributes().getRef()).isIn(1111, 1112, 1211);
assertThat(context.getPeriods()).isEqualTo(periodsHolder.getPeriods());
Optional<Measure> measureOptional = context.getMeasure(NEW_LINES_TO_COVER_KEY);
@Test
public void load_source_hash_sequences() throws Exception {
- reportReader.putFileSourceLines(FILE.getRef(), "line 1;", "line 2;");
+ reportReader.putFileSourceLines(FILE.getReportAttributes().getRef(), "line 1;", "line 2;");
Input<DefaultIssue> input = underTest.create(FILE);
assertThat(input.getLineHashSequence()).isNotNull();
@Test
public void load_issues() throws Exception {
- reportReader.putFileSourceLines(FILE.getRef(), "line 1;", "line 2;");
+ reportReader.putFileSourceLines(FILE.getReportAttributes().getRef(), "line 1;", "line 2;");
BatchReport.Issue reportIssue = BatchReport.Issue.newBuilder()
.setLine(2)
.setMsg("the message")
.setSeverity(Constants.Severity.BLOCKER)
.setEffortToFix(3.14)
.build();
- reportReader.putIssues(FILE.getRef(), asList(reportIssue));
+ reportReader.putIssues(FILE.getReportAttributes().getRef(), asList(reportIssue));
Input<DefaultIssue> input = underTest.create(FILE);
Collection<DefaultIssue> issues = input.getIssues();
@Test
public void ignore_report_issues_on_common_rules() throws Exception {
- reportReader.putFileSourceLines(FILE.getRef(), "line 1;", "line 2;");
+ reportReader.putFileSourceLines(FILE.getReportAttributes().getRef(), "line 1;", "line 2;");
BatchReport.Issue reportIssue = BatchReport.Issue.newBuilder()
.setMsg("the message")
.setRuleRepository(CommonRuleKeys.commonRepositoryForLang("java"))
.setRuleKey("S001")
.setSeverity(Constants.Severity.BLOCKER)
.build();
- reportReader.putIssues(FILE.getRef(), asList(reportIssue));
+ reportReader.putIssues(FILE.getReportAttributes().getRef(), asList(reportIssue));
Input<DefaultIssue> input = underTest.create(FILE);
@Test
public void load_issues_of_compute_engine_common_rules() throws Exception {
- reportReader.putFileSourceLines(FILE.getRef(), "line 1;", "line 2;");
+ reportReader.putFileSourceLines(FILE.getReportAttributes().getRef(), "line 1;", "line 2;");
DefaultIssue ceIssue = new DefaultIssue()
.setRuleKey(RuleKey.of(CommonRuleKeys.commonRepositoryForLang("java"), "InsufficientCoverage"))
.setMessage("not enough coverage")
@Test
public void no_issues_if_enough_comments() {
activeRuleHolder.put(new ActiveRule(RULE_KEY, Severity.CRITICAL, ImmutableMap.of(CommonRuleKeys.INSUFFICIENT_COMMENT_DENSITY_PROPERTY, "25")));
- measureRepository.addRawMeasure(FILE.getRef(), CoreMetrics.COMMENT_LINES_DENSITY_KEY, Measure.newMeasureBuilder().create(90.0));
+ measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.COMMENT_LINES_DENSITY_KEY, Measure.newMeasureBuilder().create(90.0));
DefaultIssue issue = underTest.processFile(FILE, "java");
@Test
public void issue_if_not_enough_comments() {
activeRuleHolder.put(new ActiveRule(RULE_KEY, Severity.CRITICAL, ImmutableMap.of(CommonRuleKeys.INSUFFICIENT_COMMENT_DENSITY_PROPERTY, "25")));
- measureRepository.addRawMeasure(FILE.getRef(), CoreMetrics.COMMENT_LINES_DENSITY_KEY, Measure.newMeasureBuilder().create(10.0));
- measureRepository.addRawMeasure(FILE.getRef(), CoreMetrics.COMMENT_LINES_KEY, Measure.newMeasureBuilder().create(40));
- measureRepository.addRawMeasure(FILE.getRef(), CoreMetrics.NCLOC_KEY, Measure.newMeasureBuilder().create(360));
+ measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.COMMENT_LINES_DENSITY_KEY, Measure.newMeasureBuilder().create(10.0));
+ measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.COMMENT_LINES_KEY, Measure.newMeasureBuilder().create(40));
+ measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.NCLOC_KEY, Measure.newMeasureBuilder().create(360));
DefaultIssue issue = underTest.processFile(FILE, "java");
@Test
public void issue_if_not_enough_comments__test_ceil() {
activeRuleHolder.put(new ActiveRule(RULE_KEY, Severity.CRITICAL, ImmutableMap.of(CommonRuleKeys.INSUFFICIENT_COMMENT_DENSITY_PROPERTY, "25")));
- measureRepository.addRawMeasure(FILE.getRef(), CoreMetrics.COMMENT_LINES_DENSITY_KEY, Measure.newMeasureBuilder().create(0.0));
- measureRepository.addRawMeasure(FILE.getRef(), CoreMetrics.COMMENT_LINES_KEY, Measure.newMeasureBuilder().create(0));
- measureRepository.addRawMeasure(FILE.getRef(), CoreMetrics.NCLOC_KEY, Measure.newMeasureBuilder().create(1));
+ measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.COMMENT_LINES_DENSITY_KEY, Measure.newMeasureBuilder().create(0.0));
+ measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.COMMENT_LINES_KEY, Measure.newMeasureBuilder().create(0));
+ measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.NCLOC_KEY, Measure.newMeasureBuilder().create(1));
DefaultIssue issue = underTest.processFile(FILE, "java");
thrown.expectMessage("Minimum density of rule [common-java:InsufficientCommentDensity] is incorrect. Got [100] but must be strictly less than 100.");
activeRuleHolder.put(new ActiveRule(RULE_KEY, Severity.CRITICAL, ImmutableMap.of(CommonRuleKeys.INSUFFICIENT_COMMENT_DENSITY_PROPERTY, "100")));
- measureRepository.addRawMeasure(FILE.getRef(), CoreMetrics.COMMENT_LINES_DENSITY_KEY, Measure.newMeasureBuilder().create(0.0));
- measureRepository.addRawMeasure(FILE.getRef(), CoreMetrics.COMMENT_LINES_KEY, Measure.newMeasureBuilder().create(0));
- measureRepository.addRawMeasure(FILE.getRef(), CoreMetrics.NCLOC_KEY, Measure.newMeasureBuilder().create(1));
+ measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.COMMENT_LINES_DENSITY_KEY, Measure.newMeasureBuilder().create(0.0));
+ measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.COMMENT_LINES_KEY, Measure.newMeasureBuilder().create(0));
+ measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.NCLOC_KEY, Measure.newMeasureBuilder().create(1));
underTest.processFile(FILE, "java");
}
@Test
public void no_issue_if_enough_coverage() {
activeRuleHolder.put(new ActiveRule(getRuleKey(), Severity.CRITICAL, ImmutableMap.of(getMinPropertyKey(), "65")));
- measureRepository.addRawMeasure(FILE.getRef(), getCoverageMetricKey(), Measure.newMeasureBuilder().create(90.0));
+ measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), getCoverageMetricKey(), Measure.newMeasureBuilder().create(90.0));
DefaultIssue issue = underTest.processFile(FILE, "java");
@Test
public void issue_if_coverage_is_too_low() {
activeRuleHolder.put(new ActiveRule(getRuleKey(), Severity.CRITICAL, ImmutableMap.of(getMinPropertyKey(), "65")));
- measureRepository.addRawMeasure(FILE.getRef(), getCoverageMetricKey(), Measure.newMeasureBuilder().create(20.0));
- measureRepository.addRawMeasure(FILE.getRef(), getUncoveredMetricKey(), Measure.newMeasureBuilder().create(40));
- measureRepository.addRawMeasure(FILE.getRef(), getToCoverMetricKey(), Measure.newMeasureBuilder().create(50));
+ measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), getCoverageMetricKey(), Measure.newMeasureBuilder().create(20.0));
+ measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), getUncoveredMetricKey(), Measure.newMeasureBuilder().create(40));
+ measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), getToCoverMetricKey(), Measure.newMeasureBuilder().create(50));
DefaultIssue issue = underTest.processFile(FILE, "java");
@Test
public void ignored_if_rule_is_deactivated() {
// coverage is too low, but rule is not activated
- measureRepository.addRawMeasure(FILE.getRef(), getCoverageMetricKey(), Measure.newMeasureBuilder().create(20.0));
+ measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), getCoverageMetricKey(), Measure.newMeasureBuilder().create(20.0));
DefaultIssue issue = underTest.processFile(FILE, "java");
@Test
public void no_issue_if_no_duplicated_blocks() throws Exception {
activeRuleHolder.put(new ActiveRule(RULE_KEY, Severity.CRITICAL, Collections.<String, String>emptyMap()));
- measureRepository.addRawMeasure(FILE.getRef(), CoreMetrics.DUPLICATED_BLOCKS_KEY, Measure.newMeasureBuilder().create(0));
+ measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.DUPLICATED_BLOCKS_KEY, Measure.newMeasureBuilder().create(0));
DefaultIssue issue = underTest.processFile(FILE, "java");
@Test
public void issue_if_duplicated_blocks() throws Exception {
activeRuleHolder.put(new ActiveRule(RULE_KEY, Severity.CRITICAL, Collections.<String, String>emptyMap()));
- measureRepository.addRawMeasure(FILE.getRef(), CoreMetrics.DUPLICATED_BLOCKS_KEY, Measure.newMeasureBuilder().create(3));
+ measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.DUPLICATED_BLOCKS_KEY, Measure.newMeasureBuilder().create(3));
DefaultIssue issue = underTest.processFile(FILE, "java");
@Test
public void issue_if_skipped_tests() throws Exception {
activeRuleHolder.put(new ActiveRule(RULE_KEY, Severity.CRITICAL, Collections.<String, String>emptyMap()));
- measureRepository.addRawMeasure(FILE.getRef(), CoreMetrics.SKIPPED_TESTS_KEY, Measure.newMeasureBuilder().create(2));
+ measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.SKIPPED_TESTS_KEY, Measure.newMeasureBuilder().create(2));
DefaultIssue issue = underTest.processFile(FILE, "java");
@Test
public void no_issues_if_zero_skipped_tests() throws Exception {
activeRuleHolder.put(new ActiveRule(RULE_KEY, Severity.CRITICAL, Collections.<String, String>emptyMap()));
- measureRepository.addRawMeasure(FILE.getRef(), CoreMetrics.SKIPPED_TESTS_KEY, Measure.newMeasureBuilder().create(0));
+ measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.SKIPPED_TESTS_KEY, Measure.newMeasureBuilder().create(0));
DefaultIssue issue = underTest.processFile(FILE, "java");
@Test
public void issue_if_errors_or_failures() throws Exception {
activeRuleHolder.put(new ActiveRule(RULE_KEY, Severity.CRITICAL, Collections.<String, String>emptyMap()));
- measureRepository.addRawMeasure(FILE.getRef(), CoreMetrics.TEST_ERRORS_KEY, Measure.newMeasureBuilder().create(2));
- measureRepository.addRawMeasure(FILE.getRef(), CoreMetrics.TEST_FAILURES_KEY, Measure.newMeasureBuilder().create(1));
+ measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.TEST_ERRORS_KEY, Measure.newMeasureBuilder().create(2));
+ measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.TEST_FAILURES_KEY, Measure.newMeasureBuilder().create(1));
DefaultIssue issue = underTest.processFile(FILE, "java");
@Test
public void no_issues_if_zero_errors_and_failures() throws Exception {
activeRuleHolder.put(new ActiveRule(RULE_KEY, Severity.CRITICAL, Collections.<String, String>emptyMap()));
- measureRepository.addRawMeasure(FILE.getRef(), CoreMetrics.TEST_ERRORS_KEY, Measure.newMeasureBuilder().create(0));
- measureRepository.addRawMeasure(FILE.getRef(), CoreMetrics.TEST_FAILURES_KEY, Measure.newMeasureBuilder().create(0));
+ measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.TEST_ERRORS_KEY, Measure.newMeasureBuilder().create(0));
+ measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.TEST_FAILURES_KEY, Measure.newMeasureBuilder().create(0));
DefaultIssue issue = underTest.processFile(FILE, "java");
when(reportMetricValidator.validate(METRIC_KEY_1)).thenReturn(true);
- reportReader.putMeasures(FILE_COMPONENT.getRef(), ImmutableList.of(
+ reportReader.putMeasures(FILE_COMPONENT.getReportAttributes().getRef(), ImmutableList.of(
BatchReport.Measure.newBuilder().setMetricKey(METRIC_KEY_1).setStringValue(value).build()
));
when(reportMetricValidator.validate(METRIC_KEY_1)).thenReturn(true);
when(reportMetricValidator.validate(METRIC_KEY_2)).thenReturn(false);
- reportReader.putMeasures(FILE_COMPONENT.getRef(), ImmutableList.of(
+ reportReader.putMeasures(FILE_COMPONENT.getReportAttributes().getRef(), ImmutableList.of(
BatchReport.Measure.newBuilder().setMetricKey(METRIC_KEY_1).setStringValue("value1").build(),
BatchReport.Measure.newBuilder().setMetricKey(METRIC_KEY_2).setStringValue("value2").build()
));
@Test
public void getRawMeasure_retrieves_added_measure_over_batch_measure() {
when(reportMetricValidator.validate(METRIC_KEY_1)).thenReturn(true);
- reportReader.putMeasures(FILE_COMPONENT.getRef(), ImmutableList.of(
+ reportReader.putMeasures(FILE_COMPONENT.getReportAttributes().getRef(), ImmutableList.of(
BatchReport.Measure.newBuilder().setMetricKey(METRIC_KEY_1).setStringValue("some value").build()
));
@Test
public void getRawMeasure_retrieves_measure_from_batch_and_caches_it_locally_so_that_it_can_be_updated() {
when(reportMetricValidator.validate(METRIC_KEY_1)).thenReturn(true);
- reportReader.putMeasures(FILE_COMPONENT.getRef(), ImmutableList.of(
+ reportReader.putMeasures(FILE_COMPONENT.getReportAttributes().getRef(), ImmutableList.of(
BatchReport.Measure.newBuilder().setMetricKey(METRIC_KEY_1).setStringValue("some value").build()
));
when(reportMetricValidator.validate(METRIC_KEY_2)).thenReturn(true);
BatchReport.Measure batchMeasure1 = BatchReport.Measure.newBuilder().setMetricKey(METRIC_KEY_1).setStringValue("some value").build();
BatchReport.Measure batchMeasure2 = BatchReport.Measure.newBuilder().setMetricKey(METRIC_KEY_2).setStringValue("some value").build();
- reportReader.putMeasures(FILE_COMPONENT.getRef(), ImmutableList.of(batchMeasure1, batchMeasure2));
+ reportReader.putMeasures(FILE_COMPONENT.getReportAttributes().getRef(), ImmutableList.of(batchMeasure1, batchMeasure2));
Measure addedMeasure = SOME_MEASURE;
underTest.add(FILE_COMPONENT, metric1, addedMeasure);
checkAndInitProvidersState();
InternalKey internalKey = new InternalKey(component, metric);
- checkState(!baseMeasures.containsKey(internalKey), format("Can not add a BaseMeasure twice for a Component (ref=%s) and Metric (key=%s)", component.getRef(), metric.getKey()));
+ checkState(!baseMeasures.containsKey(internalKey), format("Can not add a BaseMeasure twice for a Component (ref=%s) and Metric (key=%s)", component.getReportAttributes().getRef(), metric.getKey()));
baseMeasures.put(internalKey, measure);
@Override
public void add(Component component, Metric metric, Measure measure) {
- InternalKey internalKey = new InternalKey(component.getRef(), metric.getKey(), measure.getRuleId(), measure.getCharacteristicId());
+ InternalKey internalKey = new InternalKey(component.getReportAttributes().getRef(), metric.getKey(), measure.getRuleId(), measure.getCharacteristicId());
if (rawMeasures.containsKey(internalKey)) {
throw new UnsupportedOperationException(format(
"A measure can only be set once for Component (ref=%s), Metric (key=%s), ruleId=%s, characteristicId=%s",
- component.getRef(), metric.getKey(), measure.getRuleId(), measure.getCharacteristicId()));
+ component.getReportAttributes().getRef(), metric.getKey(), measure.getRuleId(), measure.getCharacteristicId()));
}
rawMeasures.put(internalKey, measure);
}
@Override
public void update(Component component, Metric metric, Measure measure) {
- InternalKey internalKey = new InternalKey(component.getRef(), metric.getKey(), measure.getRuleId(), measure.getCharacteristicId());
+ InternalKey internalKey = new InternalKey(component.getReportAttributes().getRef(), metric.getKey(), measure.getRuleId(), measure.getCharacteristicId());
if (!rawMeasures.containsKey(internalKey)) {
throw new UnsupportedOperationException(format(
"A measure can only be updated if it has been added first for Component (ref=%s), Metric (key=%s), ruleId=%s, characteristicId=%s",
- component.getRef(), metric.getKey(), measure.getRuleId(), measure.getCharacteristicId()));
+ component.getReportAttributes().getRef(), metric.getKey(), measure.getRuleId(), measure.getCharacteristicId()));
}
rawMeasures.put(internalKey, measure);
}
private final int characteristicId;
public InternalKey(Component component, Metric metric) {
- this(component.getRef(), metric.getKey(), null, null);
+ this(component.getReportAttributes().getRef(), metric.getKey(), null, null);
}
public InternalKey(Component component, Metric metric, @Nullable Integer ruleId, @Nullable Integer characteristicId) {
- this(component.getRef(), metric.getKey(), ruleId, characteristicId);
+ this(component.getReportAttributes().getRef(), metric.getKey(), ruleId, characteristicId);
}
public InternalKey(int componentRef, String metricKey) {
@Override
public boolean apply(@Nonnull InternalKey input) {
- return input.getComponentRef() == component.getRef();
+ return input.getComponentRef() == component.getReportAttributes().getRef();
}
}
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());
- componentsByRef.put(component.getRef(), component);
+ checkState(!componentsByRef.containsKey(component.getReportAttributes().getRef()), "Tree contains more than one component with ref " + component.getReportAttributes().getRef());
+ componentsByRef.put(component.getReportAttributes().getRef(), component);
}
}.visit(root);
}
DumbComponent fileComponent = createFileComponent(languageKey, 1);
treeRootHolder.setRoot(fileComponent);
- measureRepository.addRawMeasure(fileComponent.getRef(), metricKey, newMeasureBuilder().create(measureValue));
- measureRepository.addRawMeasure(fileComponent.getRef(), TECHNICAL_DEBT_KEY, newMeasureBuilder().create(debt));
+ measureRepository.addRawMeasure(fileComponent.getReportAttributes().getRef(), metricKey, newMeasureBuilder().create(measureValue));
+ measureRepository.addRawMeasure(fileComponent.getReportAttributes().getRef(), TECHNICAL_DEBT_KEY, newMeasureBuilder().create(debt));
underTest.visit(fileComponent);
- verifyFileMeasures(fileComponent.getRef(), measureValue, debt, languageCost, expectedRating);
+ verifyFileMeasures(fileComponent.getReportAttributes().getRef(), measureValue, debt, languageCost, expectedRating);
}
@Test
Component root = treeRootHolder.getRoot();
assertThat(root).isNotNull();
assertThat(root.getType()).isEqualTo(Component.Type.valueOf(componentType.name()));
- assertThat(root.getRef()).isEqualTo(ROOT_REF);
+ assertThat(root.getReportAttributes().getRef()).isEqualTo(ROOT_REF);
assertThat(root.getChildren()).isEmpty();
}
}
private void verifyComponent(Component component, Component.Type type, int componentRef, int size) {
assertThat(component.getType()).isEqualTo(type);
- assertThat(component.getRef()).isEqualTo(componentRef);
+ assertThat(component.getReportAttributes().getRef()).isEqualTo(componentRef);
assertThat(component.getChildren()).hasSize(size);
}
}
private static void feedComponentByRef(Component component, Map<Integer, Component> map) {
- map.put(component.getRef(), component);
+ map.put(component.getReportAttributes().getRef(), component);
for (Component child : component.getChildren()) {
feedComponentByRef(child, map);
}
}
private void addRawMeasure(Component component, Metric metric, Measure measure) {
- measureRepository.addRawMeasure(component.getRef(), metric.getKey(), measure);
+ measureRepository.addRawMeasure(component.getReportAttributes().getRef(), metric.getKey(), measure);
}
}
public void verify_measure_of_condition_not_computed_if_there_is_none() {
treeRootHolder.setRoot(FILE_COMPONENT);
reportReader.putChangesets(Changesets.newBuilder()
- .setComponentRef(FILE_COMPONENT.getRef())
+ .setComponentRef(FILE_COMPONENT.getReportAttributes().getRef())
.addChangeset(Changesets.Changeset.newBuilder().build())
.addChangeset(Changesets.Changeset.newBuilder()
.setDate(parseDate("2007-01-15").getTime())
public void verify_no_measure_when_nothing_has_changed() {
treeRootHolder.setRoot(FILE_COMPONENT);
reportReader.putChangesets(BatchReport.Changesets.newBuilder()
- .setComponentRef(FILE_COMPONENT.getRef())
+ .setComponentRef(FILE_COMPONENT.getReportAttributes().getRef())
.addChangeset(Changesets.Changeset.newBuilder()
.setDate(parseDate("2008-08-02").getTime())
.build())
.addChangesetIndexByLine(0)
.addChangesetIndexByLine(0)
.build());
- measureRepository.addRawMeasure(FILE_COMPONENT.getRef(), COVERAGE_LINE_HITS_DATA_KEY, newMeasureBuilder().create("2=1;3=1"));
- measureRepository.addRawMeasure(FILE_COMPONENT.getRef(), CONDITIONS_BY_LINE_KEY, newMeasureBuilder().create("2=1"));
- measureRepository.addRawMeasure(FILE_COMPONENT.getRef(), COVERED_CONDITIONS_BY_LINE_KEY, newMeasureBuilder().create("2=1"));
+ measureRepository.addRawMeasure(FILE_COMPONENT.getReportAttributes().getRef(), COVERAGE_LINE_HITS_DATA_KEY, newMeasureBuilder().create("2=1;3=1"));
+ measureRepository.addRawMeasure(FILE_COMPONENT.getReportAttributes().getRef(), CONDITIONS_BY_LINE_KEY, newMeasureBuilder().create("2=1"));
+ measureRepository.addRawMeasure(FILE_COMPONENT.getReportAttributes().getRef(), COVERED_CONDITIONS_BY_LINE_KEY, newMeasureBuilder().create("2=1"));
underTest.execute();
- assertThat(measureRepository.getAddedRawMeasures(FILE_COMPONENT.getRef())).isEmpty();
+ assertThat(measureRepository.getAddedRawMeasures(FILE_COMPONENT.getReportAttributes().getRef())).isEmpty();
}
@Test
treeRootHolder.setRoot(fileComponent);
reportReader.putChangesets(Changesets.newBuilder()
- .setComponentRef(fileComponent.getRef())
+ .setComponentRef(fileComponent.getReportAttributes().getRef())
.addChangeset(Changesets.Changeset.newBuilder()
.setDate(parseDate("2008-05-18").getTime())
.build())
String newLinesToCover, String newUncoveredLines, String newConditionsToCover, String newUncoveredConditions) {
treeRootHolder.setRoot(FILE_COMPONENT);
reportReader.putChangesets(Changesets.newBuilder()
- .setComponentRef(FILE_COMPONENT.getRef())
+ .setComponentRef(FILE_COMPONENT.getReportAttributes().getRef())
.addChangeset(Changesets.Changeset.newBuilder().build())
.addChangeset(Changesets.Changeset.newBuilder()
.setDate(parseDate("2007-01-15").getTime())
.addChangesetIndexByLine(1) // line 3
.addChangesetIndexByLine(2) // line 4
.build());
- measureRepository.addRawMeasure(FILE_COMPONENT.getRef(), coverageLineHitsData, newMeasureBuilder().create("2=0;3=2;4=3"));
+ measureRepository.addRawMeasure(FILE_COMPONENT.getReportAttributes().getRef(), coverageLineHitsData, newMeasureBuilder().create("2=0;3=2;4=3"));
underTest.execute();
- assertThat(toEntries(measureRepository.getAddedRawMeasures(FILE_COMPONENT.getRef()))).contains(
+ assertThat(toEntries(measureRepository.getAddedRawMeasures(FILE_COMPONENT.getReportAttributes().getRef()))).contains(
entryOf(newLinesToCover, createMeasure(2d, null)),
entryOf(newUncoveredLines, createMeasure(1d, null)),
entryOf(newConditionsToCover, createMeasure(0d, null)),
private void verify_computation_of_measures_for_new_conditions(MetricKeys metricKeys) {
treeRootHolder.setRoot(FILE_COMPONENT);
- defineChangeSetsAndMeasures(FILE_COMPONENT.getRef(), metricKeys, new MeasureValues(3, 4, 1), new MeasureValues(0, 3, 2));
+ defineChangeSetsAndMeasures(FILE_COMPONENT.getReportAttributes().getRef(), metricKeys, new MeasureValues(3, 4, 1), new MeasureValues(0, 3, 2));
underTest.execute();
- assertThat(toEntries(measureRepository.getAddedRawMeasures(FILE_COMPONENT.getRef()))).contains(
+ assertThat(toEntries(measureRepository.getAddedRawMeasures(FILE_COMPONENT.getReportAttributes().getRef()))).contains(
entryOf(metricKeys.newLinesToCover, createMeasure(5d, 3d)),
entryOf(metricKeys.newUncoveredLines, createMeasure(3d, 2d)),
entryOf(metricKeys.newConditionsToCover, createMeasure(7d, 3d)),