aboutsummaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorDuarte Meneses <duarte.meneses@sonarsource.com>2019-07-31 13:54:30 -0500
committerSonarTech <sonartech@sonarsource.com>2019-09-04 20:21:05 +0200
commit53293c67e569bb35667bc3c997e821f8fd6f70b2 (patch)
tree5bffdd92aaffbca67fa4df631ebec09d5cf72e11 /server
parenta16d96bc3672ba63be6c88f40dbdf857b52a8c4e (diff)
downloadsonarqube-53293c67e569bb35667bc3c997e821f8fd6f70b2.tar.gz
sonarqube-53293c67e569bb35667bc3c997e821f8fd6f70b2.zip
Simplify MeasureRepository interface
Diffstat (limited to 'server')
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/duplication/Duplication.java10
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MapBasedRawMeasureRepository.java24
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/Measure.java9
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepository.java14
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepositoryImpl.java16
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistLiveMeasuresStep.java13
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistMeasuresStep.java24
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/duplication/DuplicationMeasuresTest.java12
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/duplication/ViewsDuplicationMeasuresTest.java10
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/IssueCounterTest.java20
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/MapBasedRawMeasureRepositoryTest.java16
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepositoryImplTest.java25
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitymodel/MaintainabilityMeasuresVisitorTest.java2
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitymodel/ReliabilityAndSecurityRatingMeasuresVisitorTest.java3
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/NewSizeMeasuresStepTest.java12
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ReportCommentMeasuresStepTest.java8
-rw-r--r--server/sonar-ce-task-projectanalysis/src/testFixtures/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepoEntry.java11
-rw-r--r--server/sonar-ce-task-projectanalysis/src/testFixtures/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepositoryRule.java37
18 files changed, 94 insertions, 172 deletions
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/duplication/Duplication.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/duplication/Duplication.java
index bcff1d73fc6..c3a1d37893e 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/duplication/Duplication.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/duplication/Duplication.java
@@ -19,11 +19,9 @@
*/
package org.sonar.ce.task.projectanalysis.duplication;
+import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
-import java.util.Objects;
-import java.util.SortedSet;
-import java.util.TreeSet;
import java.util.function.Function;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -92,19 +90,19 @@ public final class Duplication {
return false;
}
Duplication that = (Duplication) o;
- return original.equals(that.original) && duplicates.equals(that.duplicates);
+ return original.equals(that.original) && Arrays.equals(duplicates, that.duplicates);
}
@Override
public int hashCode() {
- return Objects.hash(original, duplicates);
+ return Arrays.deepHashCode(new Object[] {original, duplicates});
}
@Override
public String toString() {
return "Duplication{" +
"original=" + original +
- ", duplicates=" + duplicates +
+ ", duplicates=" + Arrays.toString(duplicates) +
'}';
}
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MapBasedRawMeasureRepository.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MapBasedRawMeasureRepository.java
index b86e55b5b68..817040abce7 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MapBasedRawMeasureRepository.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MapBasedRawMeasureRepository.java
@@ -19,13 +19,10 @@
*/
package org.sonar.ce.task.projectanalysis.measure;
-import com.google.common.collect.ImmutableSetMultimap;
-import com.google.common.collect.SetMultimap;
import gnu.trove.map.hash.THashMap;
import java.util.Collections;
import java.util.Map;
import java.util.Optional;
-import java.util.Set;
import java.util.function.Function;
import org.sonar.ce.task.projectanalysis.component.Component;
import org.sonar.ce.task.projectanalysis.metric.Metric;
@@ -103,26 +100,9 @@ public final class MapBasedRawMeasureRepository<T> implements MeasureRepository
}
@Override
- public Set<Measure> getRawMeasures(Component component, Metric metric) {
- requireNonNull(metric);
- requireNonNull(component);
- Optional<Measure> measure = find(component, metric);
- return measure.isPresent() ? Collections.singleton(measure.get()) : Collections.emptySet();
- }
-
- @Override
- public SetMultimap<String, Measure> getRawMeasures(Component component) {
+ public Map<String, Measure> getRawMeasures(Component component) {
T componentKey = componentToKey.apply(component);
- Map<String, Measure> rawMeasures = measures.get(componentKey);
- if (rawMeasures == null) {
- return ImmutableSetMultimap.of();
- }
-
- ImmutableSetMultimap.Builder<String, Measure> builder = ImmutableSetMultimap.builder();
- for (Map.Entry<String, Measure> entry : rawMeasures.entrySet()) {
- builder.put(entry.getKey(), entry.getValue());
- }
- return builder.build();
+ return measures.getOrDefault(componentKey, Collections.emptyMap());
}
private Optional<Measure> find(Component component, Metric metric) {
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/Measure.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/Measure.java
index 8d73b7e9669..1bcc58d7529 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/Measure.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/Measure.java
@@ -571,9 +571,12 @@ public interface Measure {
}
Level level = source.getValueType() == ValueType.LEVEL ? source.getLevelValue() : null;
QualityGateStatus status = source.hasQualityGateStatus() ? source.getQualityGateStatus() : qualityGateStatus;
- boolean hasVar = source.hasVariation();
-
- Double var = hasVar ? source.getVariation() : variation;
+ Double var;
+ if (source.hasVariation()) {
+ var = source.getVariation();
+ } else {
+ var = variation;
+ }
return new MeasureImpl(source.getValueType(), value, source.getData(), level, status, var);
}
}
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepository.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepository.java
index 57d3d529bf3..72db440481d 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepository.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepository.java
@@ -19,9 +19,8 @@
*/
package org.sonar.ce.task.projectanalysis.measure;
-import com.google.common.collect.SetMultimap;
+import java.util.Map;
import java.util.Optional;
-import java.util.Set;
import org.sonar.ce.task.projectanalysis.component.Component;
import org.sonar.ce.task.projectanalysis.metric.Metric;
import org.sonar.ce.task.projectanalysis.metric.MetricImpl;
@@ -46,20 +45,15 @@ public interface MeasureRepository {
Optional<Measure> getRawMeasure(Component component, Metric metric);
/**
- * Returns the {@link Measure}s for the specified {@link Component} and the specified {@link Metric}.
- */
- Set<Measure> getRawMeasures(Component component, Metric metric);
-
- /**
* Returns the {@link Measure}s for the specified {@link Component} mapped by their metric key.
*/
- SetMultimap<String, Measure> getRawMeasures(Component component);
+ Map<String, Measure> getRawMeasures(Component component);
/**
* Adds the specified measure for the specified Component and Metric. There can be no more than one measure for a
* specific combination of Component, Metric.
*
- * @throws NullPointerException if any of the arguments is null
+ * @throws NullPointerException if any of the arguments is null
* @throws UnsupportedOperationException when trying to add a measure when one already exists for the specified Component/Metric paar
*/
void add(Component component, Metric metric, Measure measure);
@@ -68,7 +62,7 @@ public interface MeasureRepository {
* Updates the specified measure for the specified Component and Metric. There can be no more than one measure for a
* specific combination of Component, Metric.
*
- * @throws NullPointerException if any of the arguments is null
+ * @throws NullPointerException if any of the arguments is null
* @throws UnsupportedOperationException when trying to update a non existing measure
*/
void update(Component component, Metric metric, Measure measure);
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepositoryImpl.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepositoryImpl.java
index 6fd9e0394ba..eec67d313f9 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepositoryImpl.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepositoryImpl.java
@@ -19,8 +19,8 @@
*/
package org.sonar.ce.task.projectanalysis.measure;
-import com.google.common.collect.SetMultimap;
import java.util.HashSet;
+import java.util.Map;
import java.util.Optional;
import java.util.Set;
import org.sonar.ce.task.projectanalysis.batch.BatchReportReader;
@@ -47,7 +47,7 @@ public class MeasureRepositoryImpl implements MeasureRepository {
private final ReportMetricValidator reportMetricValidator;
private MeasureDtoToMeasure measureTransformer = new MeasureDtoToMeasure();
- private final Set<String> loadedComponents = new HashSet<>();
+ private final Set<Integer> loadedComponents = new HashSet<>();
public MeasureRepositoryImpl(DbClient dbClient, BatchReportReader reportReader, MetricRepository metricRepository,
ReportMetricValidator reportMetricValidator) {
@@ -96,19 +96,14 @@ public class MeasureRepositoryImpl implements MeasureRepository {
}
@Override
- public Set<Measure> getRawMeasures(Component component, Metric metric) {
- loadBatchMeasuresForComponent(component);
- return delegate.getRawMeasures(component, metric);
- }
-
- @Override
- public SetMultimap<String, Measure> getRawMeasures(Component component) {
+ public Map<String, Measure> getRawMeasures(Component component) {
loadBatchMeasuresForComponent(component);
return delegate.getRawMeasures(component);
}
private void loadBatchMeasuresForComponent(Component component) {
- if (component.getReportAttributes().getRef() == null || loadedComponents.contains(component.getUuid())) {
+ Integer ref = component.getReportAttributes().getRef();
+ if (ref == null || !loadedComponents.add(ref)) {
return;
}
@@ -122,7 +117,6 @@ public class MeasureRepositoryImpl implements MeasureRepository {
}
}
}
- loadedComponents.add(component.getUuid());
}
}
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistLiveMeasuresStep.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistLiveMeasuresStep.java
index a20eaeba147..5e1951a5df3 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistLiveMeasuresStep.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistLiveMeasuresStep.java
@@ -19,14 +19,13 @@
*/
package org.sonar.ce.task.projectanalysis.step;
-import com.google.common.collect.Multimap;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Predicate;
+import java.util.stream.Stream;
import javax.annotation.Nonnull;
import org.sonar.ce.task.projectanalysis.component.Component;
import org.sonar.ce.task.projectanalysis.component.CrawlerDepthLimit;
@@ -42,7 +41,6 @@ import org.sonar.ce.task.projectanalysis.metric.MetricRepository;
import org.sonar.ce.task.step.ComputationStep;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
-import org.sonar.db.measure.LiveMeasureComparator;
import org.sonar.db.measure.LiveMeasureDto;
import static java.util.Arrays.asList;
@@ -107,21 +105,20 @@ public class PersistLiveMeasuresStep implements ComputationStep {
@Override
public void visitAny(Component component) {
List<Integer> metricIds = new ArrayList<>();
- Multimap<String, Measure> measures = measureRepository.getRawMeasures(component);
+ Map<String, Measure> measures = measureRepository.getRawMeasures(component);
List<LiveMeasureDto> dtos = new ArrayList<>();
- for (Map.Entry<String, Collection<Measure>> measuresByMetricKey : measures.asMap().entrySet()) {
+ for (Map.Entry<String, Measure> measuresByMetricKey : measures.entrySet()) {
String metricKey = measuresByMetricKey.getKey();
if (NOT_TO_PERSIST_ON_FILE_METRIC_KEYS.contains(metricKey) && component.getType() == Component.Type.FILE) {
continue;
}
Metric metric = metricRepository.getByKey(metricKey);
Predicate<Measure> notBestValueOptimized = BestValueOptimization.from(metric, component).negate();
- measuresByMetricKey.getValue().stream()
+ Measure m = measuresByMetricKey.getValue();
+ Stream.of(m)
.filter(NonEmptyMeasure.INSTANCE)
.filter(notBestValueOptimized)
.map(measure -> measureToMeasureDto.toLiveMeasureDto(measure, metric, component))
- // To prevent deadlock, live measures are ordered the same way as in LiveMeasureComputerImpl#refreshComponentsOnSameProject
- .sorted(LiveMeasureComparator.INSTANCE)
.forEach(lm -> {
dtos.add(lm);
metricIds.add(metric.getId());
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistMeasuresStep.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistMeasuresStep.java
index 1fd6f718120..28ed0071205 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistMeasuresStep.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistMeasuresStep.java
@@ -19,8 +19,6 @@
*/
package org.sonar.ce.task.projectanalysis.step;
-import com.google.common.collect.Multimap;
-import java.util.Collection;
import java.util.Map;
import java.util.function.Predicate;
import javax.annotation.Nonnull;
@@ -109,21 +107,25 @@ public class PersistMeasuresStep implements ComputationStep {
}
private void persistMeasures(Component component) {
- Multimap<String, Measure> measures = measureRepository.getRawMeasures(component);
- for (Map.Entry<String, Collection<Measure>> measuresByMetricKey : measures.asMap().entrySet()) {
- String metricKey = measuresByMetricKey.getKey();
+ Map<String, Measure> measures = measureRepository.getRawMeasures(component);
+ MeasureDao measureDao = dbClient.measureDao();
+
+ for (Map.Entry<String, Measure> e : measures.entrySet()) {
+ Measure measure = e.getValue();
+ if (!NonEmptyMeasure.INSTANCE.test(measure)) {
+ continue;
+ }
+ String metricKey = e.getKey();
Metric metric = metricRepository.getByKey(metricKey);
- MeasureDao measureDao = dbClient.measureDao();
- measuresByMetricKey.getValue().stream().filter(NonEmptyMeasure.INSTANCE).forEach(measure -> {
- MeasureDto measureDto = measureToMeasureDto.toMeasureDto(measure, metric, component);
- measureDao.insert(session, measureDto);
- inserts++;
- });
+ MeasureDto measureDto = measureToMeasureDto.toMeasureDto(measure, metric, component);
+ measureDao.insert(session, measureDto);
+ inserts++;
}
}
}
+
private enum NonEmptyMeasure implements Predicate<Measure> {
INSTANCE;
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/duplication/DuplicationMeasuresTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/duplication/DuplicationMeasuresTest.java
index 86c8fdfa239..6c11486f4e6 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/duplication/DuplicationMeasuresTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/duplication/DuplicationMeasuresTest.java
@@ -340,15 +340,11 @@ public class DuplicationMeasuresTest {
duplicationRepository.addDuplication(fileRef, original, duplicates);
}
- private void addRawMeasure(int componentRef, String metricKey, int value) {
- measureRepository.addRawMeasure(componentRef, metricKey, newMeasureBuilder().create(value));
- }
-
private void assertNoRawMeasures(String metricKey) {
- assertThat(measureRepository.getAddedRawMeasures(FILE_1_REF).get(metricKey)).isEmpty();
- assertThat(measureRepository.getAddedRawMeasures(FILE_2_REF).get(metricKey)).isEmpty();
- assertThat(measureRepository.getAddedRawMeasures(DIRECTORY_REF).get(metricKey)).isEmpty();
- assertThat(measureRepository.getAddedRawMeasures(ROOT_REF).get(metricKey)).isEmpty();
+ assertThat(measureRepository.getAddedRawMeasures(FILE_1_REF).get(metricKey)).isNull();
+ assertThat(measureRepository.getAddedRawMeasures(FILE_2_REF).get(metricKey)).isNull();
+ assertThat(measureRepository.getAddedRawMeasures(DIRECTORY_REF).get(metricKey)).isNull();
+ assertThat(measureRepository.getAddedRawMeasures(ROOT_REF).get(metricKey)).isNull();
}
private void assertNoRawMeasure(int componentRef, String metricKey) {
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/duplication/ViewsDuplicationMeasuresTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/duplication/ViewsDuplicationMeasuresTest.java
index 6420f9445b4..8ee2a332b23 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/duplication/ViewsDuplicationMeasuresTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/duplication/ViewsDuplicationMeasuresTest.java
@@ -292,11 +292,11 @@ public class ViewsDuplicationMeasuresTest {
}
private void assertNoRawMeasures(String metricKey) {
- assertThat(measureRepository.getAddedRawMeasures(PROJECT_VIEW_1_REF).get(metricKey)).isEmpty();
- assertThat(measureRepository.getAddedRawMeasures(PROJECT_VIEW_2_REF).get(metricKey)).isEmpty();
- assertThat(measureRepository.getAddedRawMeasures(SUB_SUBVIEW_REF).get(metricKey)).isEmpty();
- assertThat(measureRepository.getAddedRawMeasures(SUBVIEW_REF).get(metricKey)).isEmpty();
- assertThat(measureRepository.getAddedRawMeasures(ROOT_REF).get(metricKey)).isEmpty();
+ assertThat(measureRepository.getAddedRawMeasures(PROJECT_VIEW_1_REF).get(metricKey)).isNull();
+ assertThat(measureRepository.getAddedRawMeasures(PROJECT_VIEW_2_REF).get(metricKey)).isNull();
+ assertThat(measureRepository.getAddedRawMeasures(SUB_SUBVIEW_REF).get(metricKey)).isNull();
+ assertThat(measureRepository.getAddedRawMeasures(SUBVIEW_REF).get(metricKey)).isNull();
+ assertThat(measureRepository.getAddedRawMeasures(ROOT_REF).get(metricKey)).isNull();
}
private void assertNoNewRawMeasuresOnProjectViews() {
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/IssueCounterTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/IssueCounterTest.java
index 9debfdcb271..7a5477afc2d 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/IssueCounterTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/IssueCounterTest.java
@@ -21,7 +21,10 @@ package org.sonar.ce.task.projectanalysis.issue;
import java.util.Arrays;
import java.util.Date;
+import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import javax.annotation.Nullable;
import org.assertj.core.data.MapEntry;
import org.junit.Rule;
@@ -32,6 +35,8 @@ import org.sonar.ce.task.projectanalysis.analysis.Branch;
import org.sonar.ce.task.projectanalysis.batch.BatchReportReaderRule;
import org.sonar.ce.task.projectanalysis.component.Component;
import org.sonar.ce.task.projectanalysis.component.TreeRootHolderRule;
+import org.sonar.ce.task.projectanalysis.measure.Measure;
+import org.sonar.ce.task.projectanalysis.measure.MeasureRepoEntry;
import org.sonar.ce.task.projectanalysis.measure.MeasureRepositoryRule;
import org.sonar.ce.task.projectanalysis.metric.MetricRepositoryRule;
import org.sonar.ce.task.projectanalysis.period.Period;
@@ -103,8 +108,6 @@ import static org.sonar.api.rule.Severity.MAJOR;
import static org.sonar.ce.task.projectanalysis.component.ReportComponent.builder;
import static org.sonar.ce.task.projectanalysis.measure.Measure.newMeasureBuilder;
import static org.sonar.ce.task.projectanalysis.measure.MeasureRepoEntry.entryOf;
-import static org.sonar.ce.task.projectanalysis.measure.MeasureRepoEntry.toEntries;
-import static org.sonar.core.util.stream.MoreCollectors.toList;
public class IssueCounterTest {
@@ -395,18 +398,21 @@ public class IssueCounterTest {
@SafeVarargs
private final void assertVariations(Component componentRef, MapEntry<String, Integer>... entries) {
- assertThat(measureRepository.getRawMeasures(componentRef).entries()
+ assertThat(measureRepository.getRawMeasures(componentRef).entrySet()
.stream()
.filter(e -> e.getValue().hasVariation())
.map(e -> entry(e.getKey(), (int) e.getValue().getVariation())))
- .contains(entries);
+ .contains(entries);
}
@SafeVarargs
private final void assertMeasures(Component componentRef, Map.Entry<String, Integer>... entries) {
- assertThat(toEntries(measureRepository.getRawMeasures(componentRef)))
- .containsAll(stream(entries).map(e -> entryOf(e.getKey(), newMeasureBuilder().create(e.getValue())))
- .collect(toList()));
+ List<MeasureRepoEntry> expected = stream(entries)
+ .map(e -> entryOf(e.getKey(), newMeasureBuilder().create(e.getValue())))
+ .collect(Collectors.toList());
+
+ assertThat(measureRepository.getRawMeasures(componentRef).entrySet().stream().map(e -> entryOf(e.getKey(), e.getValue())))
+ .containsAll(expected);
}
private static DefaultIssue createIssue(@Nullable String resolution, String status, String severity) {
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/MapBasedRawMeasureRepositoryTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/MapBasedRawMeasureRepositoryTest.java
index 3a069e64823..9eb857a7deb 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/MapBasedRawMeasureRepositoryTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/MapBasedRawMeasureRepositoryTest.java
@@ -246,20 +246,4 @@ public class MapBasedRawMeasureRepositoryTest {
assertThat(underTest.getRawMeasure(OTHER_COMPONENT, metric1)).isNotPresent();
assertThat(underTest.getRawMeasure(FILE_COMPONENT, metric2)).isNotPresent();
}
-
- @Test(expected = NullPointerException.class)
- public void getRawMeasures_for_metric_throws_NPE_if_Component_arg_is_null() {
- underTest.getRawMeasures(null, metric1);
- }
-
- @Test(expected = NullPointerException.class)
- public void getRawMeasures_for_metric_throws_NPE_if_Metric_arg_is_null() {
- underTest.getRawMeasures(FILE_COMPONENT, null);
- }
-
- @Test
- public void getRawMeasures_for_metric_returns_empty_if_repository_is_empty() {
- assertThat(underTest.getRawMeasures(FILE_COMPONENT, metric1)).isEmpty();
- }
-
}
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepositoryImplTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepositoryImplTest.java
index 099ef41b6c3..68253569a7d 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepositoryImplTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepositoryImplTest.java
@@ -22,11 +22,11 @@ package org.sonar.ce.task.projectanalysis.measure;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
-import com.google.common.collect.SetMultimap;
import com.tngtech.java.junit.dataprovider.DataProvider;
import com.tngtech.java.junit.dataprovider.DataProviderRunner;
import com.tngtech.java.junit.dataprovider.UseDataProvider;
import java.util.List;
+import java.util.Map;
import java.util.Optional;
import javax.annotation.Nullable;
import org.junit.Before;
@@ -394,23 +394,6 @@ public class MeasureRepositoryImplTest {
}
@Test
- public void getRawMeasures_for_metric_throws_NPE_if_Component_arg_is_null() {
- expectedException.expect(NullPointerException.class);
- underTest.getRawMeasures(null, metric1);
- }
-
- @Test
- public void getRawMeasures_for_metric_throws_NPE_if_Metric_arg_is_null() {
- expectedException.expect(NullPointerException.class);
- underTest.getRawMeasures(FILE_COMPONENT, null);
- }
-
- @Test
- public void getRawMeasures_for_metric_returns_empty_if_repository_is_empty() {
- assertThat(underTest.getRawMeasures(FILE_COMPONENT, metric1)).isEmpty();
- }
-
- @Test
public void getRawMeasures_returns_added_measures_over_batch_measures() {
when(reportMetricValidator.validate(METRIC_KEY_1)).thenReturn(true);
when(reportMetricValidator.validate(METRIC_KEY_2)).thenReturn(true);
@@ -421,11 +404,11 @@ public class MeasureRepositoryImplTest {
Measure addedMeasure = SOME_MEASURE;
underTest.add(FILE_COMPONENT, metric1, addedMeasure);
- SetMultimap<String, Measure> rawMeasures = underTest.getRawMeasures(FILE_COMPONENT);
+ Map<String, Measure> rawMeasures = underTest.getRawMeasures(FILE_COMPONENT);
assertThat(rawMeasures.keySet()).hasSize(2);
- assertThat(rawMeasures.get(METRIC_KEY_1)).containsOnly(addedMeasure);
- assertThat(rawMeasures.get(METRIC_KEY_2)).extracting(Measure::getStringValue).containsOnly("some value");
+ assertThat(rawMeasures.get(METRIC_KEY_1)).isEqualTo(addedMeasure);
+ assertThat(rawMeasures.get(METRIC_KEY_2)).extracting(Measure::getStringValue).isEqualTo("some value");
}
private static MeasureDto createMeasureDto(int metricId, String componentUuid, String analysisUuid) {
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitymodel/MaintainabilityMeasuresVisitorTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitymodel/MaintainabilityMeasuresVisitorTest.java
index 6af0fe5cb74..2c8ade4ce3e 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitymodel/MaintainabilityMeasuresVisitorTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitymodel/MaintainabilityMeasuresVisitorTest.java
@@ -124,7 +124,7 @@ public class MaintainabilityMeasuresVisitorTest {
underTest.visit(root);
- assertThat(toEntries(measureRepository.getRawMeasures(root)))
+ assertThat(measureRepository.getRawMeasures(root).entrySet().stream().map(e -> entryOf(e.getKey(), e.getValue())))
.containsOnly(
entryOf(DEVELOPMENT_COST_KEY, newMeasureBuilder().create("0")),
entryOf(SQALE_DEBT_RATIO_KEY, newMeasureBuilder().create(0d, 1)),
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitymodel/ReliabilityAndSecurityRatingMeasuresVisitorTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitymodel/ReliabilityAndSecurityRatingMeasuresVisitorTest.java
index 5bace1873f6..55e3bcb8a94 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitymodel/ReliabilityAndSecurityRatingMeasuresVisitorTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitymodel/ReliabilityAndSecurityRatingMeasuresVisitorTest.java
@@ -111,7 +111,8 @@ public class ReliabilityAndSecurityRatingMeasuresVisitorTest {
underTest.visit(root);
- assertThat(toEntries(measureRepository.getRawMeasures(root)))
+ assertThat(measureRepository.getRawMeasures(root)
+ .entrySet().stream().map(e -> entryOf(e.getKey(), e.getValue())))
.containsOnly(
entryOf(RELIABILITY_RATING_KEY, createRatingMeasure(A)),
entryOf(SECURITY_RATING_KEY, createRatingMeasure(A)));
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/NewSizeMeasuresStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/NewSizeMeasuresStepTest.java
index ca324627a33..779eed755c0 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/NewSizeMeasuresStepTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/NewSizeMeasuresStepTest.java
@@ -381,11 +381,11 @@ public class NewSizeMeasuresStepTest {
}
private void assertNoRawMeasures(String metricKey) {
- assertThat(measureRepository.getAddedRawMeasures(FILE_1_REF).get(metricKey)).isEmpty();
- assertThat(measureRepository.getAddedRawMeasures(FILE_2_REF).get(metricKey)).isEmpty();
- assertThat(measureRepository.getAddedRawMeasures(FILE_3_REF).get(metricKey)).isEmpty();
- assertThat(measureRepository.getAddedRawMeasures(FILE_4_REF).get(metricKey)).isEmpty();
- assertThat(measureRepository.getAddedRawMeasures(DIRECTORY_REF).get(metricKey)).isEmpty();
- assertThat(measureRepository.getAddedRawMeasures(ROOT_REF).get(metricKey)).isEmpty();
+ assertThat(measureRepository.getAddedRawMeasures(FILE_1_REF).get(metricKey)).isNull();
+ assertThat(measureRepository.getAddedRawMeasures(FILE_2_REF).get(metricKey)).isNull();
+ assertThat(measureRepository.getAddedRawMeasures(FILE_3_REF).get(metricKey)).isNull();
+ assertThat(measureRepository.getAddedRawMeasures(FILE_4_REF).get(metricKey)).isNull();
+ assertThat(measureRepository.getAddedRawMeasures(DIRECTORY_REF).get(metricKey)).isNull();
+ assertThat(measureRepository.getAddedRawMeasures(ROOT_REF).get(metricKey)).isNull();
}
}
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ReportCommentMeasuresStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ReportCommentMeasuresStepTest.java
index 0c4d9a305c1..96097ed096e 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ReportCommentMeasuresStepTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ReportCommentMeasuresStepTest.java
@@ -274,9 +274,9 @@ public class ReportCommentMeasuresStepTest {
}
private void assertNoNewMeasures(String metric) {
- assertThat(measureRepository.getAddedRawMeasures(FILE_1_REF).get(metric)).isEmpty();
- assertThat(measureRepository.getAddedRawMeasures(FILE_2_REF).get(metric)).isEmpty();
- assertThat(measureRepository.getAddedRawMeasures(DIRECTORY_REF).get(metric)).isEmpty();
- assertThat(measureRepository.getAddedRawMeasures(ROOT_REF).get(metric)).isEmpty();
+ assertThat(measureRepository.getAddedRawMeasures(FILE_1_REF).get(metric)).isNull();
+ assertThat(measureRepository.getAddedRawMeasures(FILE_2_REF).get(metric)).isNull();
+ assertThat(measureRepository.getAddedRawMeasures(DIRECTORY_REF).get(metric)).isNull();
+ assertThat(measureRepository.getAddedRawMeasures(ROOT_REF).get(metric)).isNull();
}
}
diff --git a/server/sonar-ce-task-projectanalysis/src/testFixtures/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepoEntry.java b/server/sonar-ce-task-projectanalysis/src/testFixtures/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepoEntry.java
index 2cf7fc130c6..2ef63f3aa15 100644
--- a/server/sonar-ce-task-projectanalysis/src/testFixtures/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepoEntry.java
+++ b/server/sonar-ce-task-projectanalysis/src/testFixtures/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepoEntry.java
@@ -19,13 +19,12 @@
*/
package org.sonar.ce.task.projectanalysis.measure;
-import com.google.common.base.Function;
-import com.google.common.collect.FluentIterable;
-import com.google.common.collect.SetMultimap;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Map;
import java.util.Objects;
+import java.util.function.Function;
+import java.util.stream.Collectors;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.sonar.ce.task.projectanalysis.component.Component;
@@ -40,7 +39,7 @@ import org.sonar.ce.task.projectanalysis.component.Component;
* {@link Measure#equals(Object)} only care about the ruleId and characteristicId.
* </p>
* <p>
- * In order to explore the content of the SetMultimap, use {@link #toEntries(SetMultimap)} to convert it
+ * In order to explore the content of the Map, use {@link #toEntries(Map)} to convert it
* to an Iterable of {@link MeasureRepoEntry} and then take benefit of AssertJ API, eg.:
* <pre>
* assertThat(MeasureRepoEntry.toEntries(measureRepository.getAddedRawMeasures(componentRef))).containsOnly(
@@ -63,8 +62,8 @@ public final class MeasureRepoEntry {
return EntryToMeasureRepoEntry.INSTANCE;
}
- public static Iterable<MeasureRepoEntry> toEntries(SetMultimap<String, Measure> data) {
- return FluentIterable.from(data.entries()).transform(toMeasureRepoEntry()).toList();
+ public static Iterable<MeasureRepoEntry> toEntries(Map<String, Measure> data) {
+ return data.entrySet().stream().map(toMeasureRepoEntry()).collect(Collectors.toList());
}
public static MeasureRepoEntry entryOf(String metricKey, Measure measure) {
diff --git a/server/sonar-ce-task-projectanalysis/src/testFixtures/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepositoryRule.java b/server/sonar-ce-task-projectanalysis/src/testFixtures/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepositoryRule.java
index 2c579151024..ba766121376 100644
--- a/server/sonar-ce-task-projectanalysis/src/testFixtures/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepositoryRule.java
+++ b/server/sonar-ce-task-projectanalysis/src/testFixtures/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepositoryRule.java
@@ -21,13 +21,11 @@ package org.sonar.ce.task.projectanalysis.measure;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
-import com.google.common.collect.ImmutableSetMultimap;
-import com.google.common.collect.SetMultimap;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
-import java.util.Set;
+import java.util.stream.Collectors;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -41,7 +39,6 @@ import org.sonar.ce.task.projectanalysis.component.TreeRootHolderComponentProvid
import org.sonar.ce.task.projectanalysis.metric.Metric;
import org.sonar.ce.task.projectanalysis.metric.MetricRepositoryRule;
-import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkState;
import static com.google.common.collect.FluentIterable.from;
import static com.google.common.collect.Maps.filterKeys;
@@ -98,7 +95,7 @@ public class MeasureRepositoryRule extends ExternalResource implements MeasureRe
return this;
}
- public SetMultimap<String, Measure> getRawMeasures(int componentRef) {
+ public Map<String, Measure> getRawMeasures(int componentRef) {
return getRawMeasures(componentProvider.getByRef(componentRef));
}
@@ -106,7 +103,7 @@ public class MeasureRepositoryRule extends ExternalResource implements MeasureRe
* Return measures that were added by the step (using {@link #add(Component, Metric, Measure)}).
* It does not contain the one added in the test by {@link #addRawMeasure(int, String, Measure)}
*/
- public SetMultimap<String, Measure> getAddedRawMeasures(int componentRef) {
+ public Map<String, Measure> getAddedRawMeasures(int componentRef) {
checkAndInitProvidersState();
return getAddedRawMeasures(componentProvider.getByRef(componentRef));
@@ -127,26 +124,22 @@ public class MeasureRepositoryRule extends ExternalResource implements MeasureRe
public Optional<Measure> getAddedRawMeasure(int componentRef, String metricKey) {
checkAndInitProvidersState();
- Set<Measure> measures = getAddedRawMeasures(componentProvider.getByRef(componentRef)).get(metricKey);
- if (measures.isEmpty()) {
- return Optional.empty();
- }
- checkArgument(measures.size() == 1, String.format("There is more than one measure on metric '%s' for component '%s'", metricKey, componentRef));
- return Optional.of(measures.iterator().next());
+ Measure measure = getAddedRawMeasures(componentProvider.getByRef(componentRef)).get(metricKey);
+ return Optional.ofNullable(measure);
}
/**
* Return measures that were added by the step (using {@link #add(Component, Metric, Measure)}).
* It does not contain the one added in the test by {@link #addRawMeasure(int, String, Measure)}
*/
- public SetMultimap<String, Measure> getAddedRawMeasures(Component component) {
+ public Map<String, Measure> getAddedRawMeasures(Component component) {
checkAndInitProvidersState();
- ImmutableSetMultimap.Builder<String, Measure> builder = ImmutableSetMultimap.builder();
+ Map<String, Measure> builder = new HashMap<>();
for (Map.Entry<InternalKey, Measure> entry : from(filterKeys(rawMeasures, hasComponentRef(component)).entrySet()).filter(isAddedMeasure)) {
builder.put(entry.getKey().getMetricKey(), entry.getValue());
}
- return builder.build();
+ return builder;
}
public MeasureRepositoryRule addRawMeasure(int componentRef, String metricKey, Measure measure) {
@@ -174,17 +167,9 @@ public class MeasureRepositoryRule extends ExternalResource implements MeasureRe
}
@Override
- public Set<Measure> getRawMeasures(Component component, Metric metric) {
- return from(filterKeys(rawMeasures, hasComponentRef(component)).entrySet()).filter(new MatchMetric(metric)).transform(ToMeasure.INSTANCE).toSet();
- }
-
- @Override
- public SetMultimap<String, Measure> getRawMeasures(Component component) {
- ImmutableSetMultimap.Builder<String, Measure> builder = ImmutableSetMultimap.builder();
- for (Map.Entry<InternalKey, Measure> entry : filterKeys(rawMeasures, hasComponentRef(component)).entrySet()) {
- builder.put(entry.getKey().getMetricKey(), entry.getValue());
- }
- return builder.build();
+ public Map<String, Measure> getRawMeasures(Component component) {
+ return filterKeys(rawMeasures, hasComponentRef(component)).entrySet().stream()
+ .collect(Collectors.toMap(k -> k.getKey().getMetricKey(), e -> e.getValue()));
}
private HasComponentRefPredicate hasComponentRef(Component component) {