if (indexedResource == null) {
return null;
}
- Iterable<Measure> unfiltered;
+ Collection<Measure> unfiltered = new ArrayList<>();
if (filter instanceof MeasuresFilters.MetricFilter) {
// optimization
- unfiltered = measureCache.byMetric(indexedResource, ((MeasuresFilters.MetricFilter<M>) filter).filterOnMetricKey());
+ Measure byMetric = measureCache.byMetric(indexedResource, ((MeasuresFilters.MetricFilter<M>) filter).filterOnMetricKey());
+ if (byMetric != null) {
+ unfiltered.add(byMetric);
+ }
} else {
- unfiltered = measureCache.byResource(indexedResource);
- }
- Collection<Measure> all = new ArrayList<>();
- if (unfiltered != null) {
- for (Measure measure : unfiltered) {
- all.add(measure);
+ for (Measure measure : measureCache.byResource(indexedResource)) {
+ unfiltered.add(measure);
}
}
- return filter.filter(all);
+ return filter.filter(unfiltered);
}
@Override
}
void applyLineMeasure(String inputFileKey, int lineCount, String metricKey, Map<Integer, Coverage.Builder> coveragePerLine, MeasureOperation op) {
- Iterable<Measure> measures = measureCache.byMetric(inputFileKey, metricKey);
- if (measures.iterator().hasNext()) {
- Measure measure = measures.iterator().next();
+ Measure measure = measureCache.byMetric(inputFileKey, metricKey);
+ if (measure != null) {
Map<Integer, String> lineMeasures = KeyValueFormat.parseIntString((String) measure.value());
for (Map.Entry<Integer, String> lineMeasure : lineMeasures.entrySet()) {
int lineIdx = lineMeasure.getKey();
package org.sonar.batch.scan.measure;
import com.google.common.base.Preconditions;
+import javax.annotation.CheckForNull;
import org.sonar.api.batch.BatchSide;
import org.sonar.api.batch.measure.MetricFinder;
import org.sonar.api.measures.Measure;
return cache.values(r.getEffectiveKey());
}
- public Iterable<Measure> byMetric(Resource r, String metricKey) {
+ @CheckForNull
+ public Measure byMetric(Resource r, String metricKey) {
return byMetric(r.getEffectiveKey(), metricKey);
}
- public Iterable<Measure> byMetric(String resourceKey, String metricKey) {
- return cache.values(resourceKey, metricKey);
+ @CheckForNull
+ public Measure byMetric(String resourceKey, String metricKey) {
+ return cache.get(resourceKey, metricKey);
}
public MeasureCache put(Resource resource, Measure measure) {
Preconditions.checkNotNull(resource.getEffectiveKey());
Preconditions.checkNotNull(measure.getMetricKey());
- cache.put(resource.getEffectiveKey(), measure.getMetricKey(), computeMeasureKey(measure), measure);
+ cache.put(resource.getEffectiveKey(), measure.getMetricKey(), measure);
return this;
}
public boolean contains(Resource resource, Measure measure) {
Preconditions.checkNotNull(resource.getEffectiveKey());
Preconditions.checkNotNull(measure.getMetricKey());
- return cache.containsKey(resource.getEffectiveKey(), measure.getMetricKey(), computeMeasureKey(measure));
- }
-
- private static String computeMeasureKey(Measure m) {
- StringBuilder sb = new StringBuilder();
- if (m.getMetricKey() != null) {
- sb.append(m.getMetricKey());
- }
- sb.append("|");
- Integer personId = m.getPersonId();
- if (personId != null) {
- sb.append(personId);
- }
- return sb.toString();
+ return cache.containsKey(resource.getEffectiveKey(), measure.getMetricKey());
}
}
package org.sonar.batch.report;
import java.io.File;
-import java.util.Arrays;
-import java.util.Collections;
import java.util.Date;
import org.junit.Before;
import org.junit.Rule;
resourceCache.add(p, null).setInputComponent(new DefaultInputModule("foo"));
resourceCache.add(sampleFile, null).setInputComponent(new DefaultInputFile("foo", "src/Foo.php").setLines(5));
measureCache = mock(MeasureCache.class);
- when(measureCache.byMetric(anyString(), anyString())).thenReturn(Collections.<Measure>emptyList());
+ when(measureCache.byMetric(anyString(), anyString())).thenReturn(null);
publisher = new CoveragePublisher(resourceCache, measureCache);
}
public void publishCoverage() throws Exception {
Measure utLineHits = new Measure<>(CoreMetrics.COVERAGE_LINE_HITS_DATA).setData("2=1;3=1;5=0;6=3");
- when(measureCache.byMetric("foo:src/Foo.php", CoreMetrics.COVERAGE_LINE_HITS_DATA_KEY)).thenReturn(Arrays.asList(utLineHits));
+ when(measureCache.byMetric("foo:src/Foo.php", CoreMetrics.COVERAGE_LINE_HITS_DATA_KEY)).thenReturn(utLineHits);
Measure conditionsByLine = new Measure<>(CoreMetrics.CONDITIONS_BY_LINE).setData("3=4");
- when(measureCache.byMetric("foo:src/Foo.php", CoreMetrics.CONDITIONS_BY_LINE_KEY)).thenReturn(Arrays.asList(conditionsByLine));
+ when(measureCache.byMetric("foo:src/Foo.php", CoreMetrics.CONDITIONS_BY_LINE_KEY)).thenReturn(conditionsByLine);
Measure coveredConditionsByUts = new Measure<>(CoreMetrics.COVERED_CONDITIONS_BY_LINE).setData("3=2");
- when(measureCache.byMetric("foo:src/Foo.php", CoreMetrics.COVERED_CONDITIONS_BY_LINE_KEY)).thenReturn(Arrays.asList(coveredConditionsByUts));
+ when(measureCache.byMetric("foo:src/Foo.php", CoreMetrics.COVERED_CONDITIONS_BY_LINE_KEY)).thenReturn(coveredConditionsByUts);
Measure itLineHits = new Measure<>(CoreMetrics.IT_COVERAGE_LINE_HITS_DATA).setData("2=0;3=0;5=1");
- when(measureCache.byMetric("foo:src/Foo.php", CoreMetrics.IT_COVERAGE_LINE_HITS_DATA_KEY)).thenReturn(Arrays.asList(itLineHits));
+ when(measureCache.byMetric("foo:src/Foo.php", CoreMetrics.IT_COVERAGE_LINE_HITS_DATA_KEY)).thenReturn(itLineHits);
Measure coveredConditionsByIts = new Measure<>(CoreMetrics.IT_COVERED_CONDITIONS_BY_LINE).setData("3=1");
- when(measureCache.byMetric("foo:src/Foo.php", CoreMetrics.IT_COVERED_CONDITIONS_BY_LINE_KEY)).thenReturn(Arrays.asList(coveredConditionsByIts));
+ when(measureCache.byMetric("foo:src/Foo.php", CoreMetrics.IT_COVERED_CONDITIONS_BY_LINE_KEY)).thenReturn(coveredConditionsByIts);
Measure overallCoveredConditions = new Measure<>(CoreMetrics.OVERALL_COVERED_CONDITIONS_BY_LINE).setData("3=2");
- when(measureCache.byMetric("foo:src/Foo.php", CoreMetrics.OVERALL_COVERED_CONDITIONS_BY_LINE_KEY)).thenReturn(Arrays.asList(overallCoveredConditions));
+ when(measureCache.byMetric("foo:src/Foo.php", CoreMetrics.OVERALL_COVERED_CONDITIONS_BY_LINE_KEY)).thenReturn(overallCoveredConditions);
File outputDir = temp.newFolder();
BatchReportWriter writer = new BatchReportWriter(outputDir);