diff options
author | Duarte Meneses <duarte.meneses@sonarsource.com> | 2019-07-31 13:54:30 -0500 |
---|---|---|
committer | SonarTech <sonartech@sonarsource.com> | 2019-09-04 20:21:05 +0200 |
commit | 53293c67e569bb35667bc3c997e821f8fd6f70b2 (patch) | |
tree | 5bffdd92aaffbca67fa4df631ebec09d5cf72e11 /server | |
parent | a16d96bc3672ba63be6c88f40dbdf857b52a8c4e (diff) | |
download | sonarqube-53293c67e569bb35667bc3c997e821f8fd6f70b2.tar.gz sonarqube-53293c67e569bb35667bc3c997e821f8fd6f70b2.zip |
Simplify MeasureRepository interface
Diffstat (limited to 'server')
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) { |