diff options
author | Duarte Meneses <duarte.meneses@sonarsource.com> | 2022-10-31 14:40:32 -0500 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2022-11-05 20:03:18 +0000 |
commit | 9b62ebf3361b96a2d693660236f1bce89d71edfa (patch) | |
tree | 8837dc35b5e6dfafa7df62f62bf2c1e55688d87a /server/sonar-ce-task-projectanalysis | |
parent | 717613ac072b0cb9b49fff79354b99f26060be72 (diff) | |
download | sonarqube-9b62ebf3361b96a2d693660236f1bce89d71edfa.tar.gz sonarqube-9b62ebf3361b96a2d693660236f1bce89d71edfa.zip |
SONAR-16455 Merge measure's 'variation' and 'value'
Diffstat (limited to 'server/sonar-ce-task-projectanalysis')
52 files changed, 372 insertions, 1167 deletions
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/FileStatusesImpl.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/FileStatusesImpl.java index 045b7ffa14e..21471cbf0d1 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/FileStatusesImpl.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/FileStatusesImpl.java @@ -22,6 +22,8 @@ package org.sonar.ce.task.projectanalysis.component; import java.util.HashSet; import java.util.Optional; import java.util.Set; +import org.sonar.api.utils.log.Logger; +import org.sonar.api.utils.log.Loggers; import org.sonar.ce.task.projectanalysis.analysis.AnalysisMetadataHolder; import org.sonar.ce.task.projectanalysis.source.SourceHashRepository; import org.sonar.db.source.FileHashesDto; @@ -30,11 +32,14 @@ import static com.google.common.base.Preconditions.checkState; import static org.sonar.ce.task.projectanalysis.component.ComponentVisitor.Order.PRE_ORDER; public class FileStatusesImpl implements FileStatuses { + private static final Logger LOG = Loggers.get(FileStatusesImpl.class); + private final PreviousSourceHashRepository previousSourceHashRepository; private final SourceHashRepository sourceHashRepository; private final AnalysisMetadataHolder analysisMetadataHolder; private final TreeRootHolder treeRootHolder; private Set<String> fileUuidsMarkedAsUnchanged; + private int notMarkedAsUnchanged = 0; public FileStatusesImpl(AnalysisMetadataHolder analysisMetadataHolder, TreeRootHolder treeRootHolder, PreviousSourceHashRepository previousSourceHashRepository, SourceHashRepository sourceHashRepository) { @@ -49,6 +54,8 @@ public class FileStatusesImpl implements FileStatuses { if (!analysisMetadataHolder.isPullRequest() && !analysisMetadataHolder.isFirstAnalysis()) { new DepthTraversalTypeAwareCrawler(new Visitor()).visit(treeRootHolder.getRoot()); } + LOG.warn("FILES MARKED AS UNCHANGED: " + fileUuidsMarkedAsUnchanged.size()); + LOG.warn("FILES NOT MARKED AS UNCHANGED: " + notMarkedAsUnchanged); } private class Visitor extends TypeAwareVisitorAdapter { @@ -68,8 +75,11 @@ public class FileStatusesImpl implements FileStatuses { if (canTrustUnchangedFlags) { if (file.getFileAttributes().isMarkedAsUnchanged()) { fileUuidsMarkedAsUnchanged.add(file.getUuid()); + } else { + notMarkedAsUnchanged++; } } else { + LOG.error("FILE HAS DIFFERENT HASH: " + file.getName()); fileUuidsMarkedAsUnchanged.clear(); } } diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/formula/VariationSumFormula.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/formula/VariationSumFormula.java deleted file mode 100644 index 9543fa60be4..00000000000 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/formula/VariationSumFormula.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2022 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program 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. - * - * This program 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.ce.task.projectanalysis.formula; - -import java.util.Optional; -import org.sonar.ce.task.projectanalysis.component.CrawlerDepthLimit; -import org.sonar.ce.task.projectanalysis.formula.counter.DoubleValue; -import org.sonar.ce.task.projectanalysis.measure.Measure; - -import static java.util.Objects.requireNonNull; -import static org.sonar.ce.task.projectanalysis.measure.Measure.newMeasureBuilder; - -/** - * A Formula which aggregates variations of a specific metric by simply making the sums of its variations. It supports - * make the sum of only specific periods. - */ -public class VariationSumFormula implements Formula<VariationSumFormula.VariationSumCounter> { - private final String metricKey; - - public VariationSumFormula(String metricKey) { - this.metricKey = requireNonNull(metricKey, "Metric key cannot be null"); - } - - @Override - public VariationSumCounter createNewCounter() { - return new VariationSumCounter(metricKey); - } - - @Override - public Optional<Measure> createMeasure(VariationSumCounter counter, CreateMeasureContext context) { - if (!CrawlerDepthLimit.LEAVES.isDeeperThan(context.getComponent().getType()) || !counter.doubleValue.isSet()) { - return Optional.empty(); - } - return Optional.of(newMeasureBuilder().setVariation(counter.doubleValue.getValue()).createNoValue()); - } - - @Override - public String[] getOutputMetricKeys() { - return new String[] {metricKey}; - } - - public static final class VariationSumCounter implements Counter<VariationSumCounter> { - private final DoubleValue doubleValue = new DoubleValue(); - private final String metricKey; - - private VariationSumCounter(String metricKey) { - this.metricKey = metricKey; - } - - @Override - public void aggregate(VariationSumCounter counter) { - doubleValue.increment(counter.doubleValue); - } - - @Override - public void initialize(CounterInitializationContext context) { - Optional<Measure> measure = context.getMeasure(metricKey); - if (!measure.isPresent() || !measure.get().hasVariation()) { - return; - } - double variation = measure.get().getVariation(); - doubleValue.increment(variation); - } - - } -} diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/formula/coverage/CoverageUtils.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/formula/coverage/CoverageUtils.java index ea7f8d51b58..876ce18cc4c 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/formula/coverage/CoverageUtils.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/formula/coverage/CoverageUtils.java @@ -26,7 +26,8 @@ import org.sonar.ce.task.projectanalysis.measure.Measure; import static org.sonar.ce.task.projectanalysis.measure.Measure.newMeasureBuilder; public final class CoverageUtils { - private static final Measure DEFAULT_MEASURE = newMeasureBuilder().create(0L); + private static final Measure DEFAULT_MEASURE_LONG = newMeasureBuilder().create(0L); + private static final Measure DEFAULT_MEASURE_INT = newMeasureBuilder().create(0); private CoverageUtils() { // prevents instantiation @@ -37,7 +38,7 @@ public final class CoverageUtils { } static long getLongMeasureValue(CounterInitializationContext counterContext, String metricKey) { - Measure measure = counterContext.getMeasure(metricKey).orElse(DEFAULT_MEASURE); + Measure measure = counterContext.getMeasure(metricKey).orElse(DEFAULT_MEASURE_LONG); if (measure.getValueType() == Measure.ValueType.NO_VALUE) { return 0L; } @@ -47,12 +48,11 @@ public final class CoverageUtils { return measure.getLongValue(); } - static double getMeasureVariations(CounterInitializationContext counterContext, String metricKey) { - Optional<Measure> measure = counterContext.getMeasure(metricKey); - if (!measure.isPresent() || !measure.get().hasVariation()) { - return 0D; + static int getIntMeasureValue(CounterInitializationContext counterContext, String metricKey) { + Measure measure = counterContext.getMeasure(metricKey).orElse(DEFAULT_MEASURE_INT); + if (measure.getValueType() == Measure.ValueType.NO_VALUE) { + return 0; } - return measure.get().getVariation(); + return measure.getIntValue(); } - } diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/formula/coverage/CoverageVariationFormula.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/formula/coverage/CoverageVariationFormula.java deleted file mode 100644 index f9e47497627..00000000000 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/formula/coverage/CoverageVariationFormula.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2022 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program 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. - * - * This program 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.ce.task.projectanalysis.formula.coverage; - -import java.util.Optional; -import org.sonar.ce.task.projectanalysis.formula.CreateMeasureContext; -import org.sonar.ce.task.projectanalysis.formula.Formula; -import org.sonar.ce.task.projectanalysis.formula.counter.LongValue; -import org.sonar.ce.task.projectanalysis.measure.Measure; - -import static org.sonar.ce.task.projectanalysis.formula.coverage.CoverageUtils.calculateCoverage; -import static org.sonar.ce.task.projectanalysis.measure.Measure.newMeasureBuilder; - -/** - * An abstract Formula which implements the aggregation of a Counter of type ElementsAndCoveredElementsVariationCounter - * with another counter. - */ -public abstract class CoverageVariationFormula<T extends ElementsAndCoveredElementsVariationCounter> implements Formula<T> { - - @Override - public Optional<Measure> createMeasure(T counter, CreateMeasureContext context) { - LongValue elements = counter.elements; - if (elements.isSet() && elements.getValue() > 0D) { - LongValue coveredElements = counter.coveredElements; - double variation = calculateCoverage(coveredElements.getValue(), elements.getValue()); - return Optional.of(newMeasureBuilder().setVariation(variation).createNoValue()); - } - return Optional.empty(); - } - -} diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/formula/coverage/ElementsAndCoveredElementsVariationCounter.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/formula/coverage/ElementsAndCoveredElementsVariationCounter.java deleted file mode 100644 index 411d9e260b8..00000000000 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/formula/coverage/ElementsAndCoveredElementsVariationCounter.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2022 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program 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. - * - * This program 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.ce.task.projectanalysis.formula.coverage; - -import org.sonar.ce.task.projectanalysis.component.Component; -import org.sonar.ce.task.projectanalysis.formula.Counter; -import org.sonar.ce.task.projectanalysis.formula.CounterInitializationContext; -import org.sonar.ce.task.projectanalysis.formula.counter.LongValue; - -/** - * A counter used to create measure variations which are based on a count of elements and coveredElements. - */ -public abstract class ElementsAndCoveredElementsVariationCounter implements Counter<ElementsAndCoveredElementsVariationCounter> { - protected final LongValue elements = new LongValue(); - protected final LongValue coveredElements = new LongValue(); - - @Override - public void aggregate(ElementsAndCoveredElementsVariationCounter counter) { - elements.increment(counter.elements); - coveredElements.increment(counter.coveredElements); - } - - @Override - public void initialize(CounterInitializationContext context) { - if (context.getLeaf().getType() == Component.Type.FILE && context.getLeaf().getFileAttributes().isUnitTest()) { - return; - } - initializeForSupportedLeaf(context); - } - - protected abstract void initializeForSupportedLeaf(CounterInitializationContext counterContext); -} diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/formula/coverage/LinesAndConditionsWithUncoveredVariationCounter.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/formula/coverage/LinesAndConditionsWithUncoveredVariationCounter.java deleted file mode 100644 index 28cf0d1c905..00000000000 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/formula/coverage/LinesAndConditionsWithUncoveredVariationCounter.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2022 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program 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. - * - * This program 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.ce.task.projectanalysis.formula.coverage; - -import java.util.Optional; -import org.sonar.ce.task.projectanalysis.formula.CounterInitializationContext; -import org.sonar.ce.task.projectanalysis.measure.Measure; - -public final class LinesAndConditionsWithUncoveredVariationCounter extends ElementsAndCoveredElementsVariationCounter { - private final LinesAndConditionsWithUncoveredMetricKeys metricKeys; - - public LinesAndConditionsWithUncoveredVariationCounter(LinesAndConditionsWithUncoveredMetricKeys metricKeys) { - this.metricKeys = metricKeys; - } - - @Override - public void initializeForSupportedLeaf(CounterInitializationContext counterContext) { - Optional<Measure> newLinesMeasure = counterContext.getMeasure(metricKeys.getLines()); - if (!newLinesMeasure.isPresent() || !newLinesMeasure.get().hasVariation()) { - return; - } - double newLines = newLinesMeasure.get().getVariation(); - long newConditions = (long) CoverageUtils.getMeasureVariations(counterContext, metricKeys.getConditions()); - long uncoveredLines = (long) CoverageUtils.getMeasureVariations(counterContext, metricKeys.getUncoveredLines()); - long uncoveredConditions = (long) CoverageUtils.getMeasureVariations(counterContext, metricKeys.getUncoveredConditions()); - - long elements = (long) newLines + newConditions; - this.elements.increment(elements); - coveredElements.increment(elements - uncoveredConditions - uncoveredLines); - } -} diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/formula/coverage/LinesAndConditionsWithUncoveredVariationFormula.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/formula/coverage/LinesAndConditionsWithUncoveredVariationFormula.java deleted file mode 100644 index c7312c92de5..00000000000 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/formula/coverage/LinesAndConditionsWithUncoveredVariationFormula.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2022 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program 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. - * - * This program 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.ce.task.projectanalysis.formula.coverage; - -import static java.util.Objects.requireNonNull; - -/** - * A Formula which implements the aggregation the variations of lines and conditions measures (and their associated "uncovered" measures) - * into the variations of a fifth measure. - */ -public class LinesAndConditionsWithUncoveredVariationFormula extends CoverageVariationFormula<LinesAndConditionsWithUncoveredVariationCounter> { - private final LinesAndConditionsWithUncoveredMetricKeys inputKeys; - private final String outputKey; - - public LinesAndConditionsWithUncoveredVariationFormula(LinesAndConditionsWithUncoveredMetricKeys inputKeys, String outputKey) { - this.inputKeys = requireNonNull(inputKeys); - this.outputKey = requireNonNull(outputKey); - } - - @Override - public LinesAndConditionsWithUncoveredVariationCounter createNewCounter() { - return new LinesAndConditionsWithUncoveredVariationCounter(inputKeys); - } - - @Override - public String[] getOutputMetricKeys() { - return new String[] {outputKey}; - } -} diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/formula/coverage/SingleWithUncoveredVariationCounter.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/formula/coverage/SingleWithUncoveredVariationCounter.java deleted file mode 100644 index b2615e7ab2c..00000000000 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/formula/coverage/SingleWithUncoveredVariationCounter.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2022 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program 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. - * - * This program 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.ce.task.projectanalysis.formula.coverage; - -import org.sonar.ce.task.projectanalysis.formula.CounterInitializationContext; - -import static java.util.Objects.requireNonNull; -import static org.sonar.ce.task.projectanalysis.formula.coverage.CoverageUtils.getMeasureVariations; - -public final class SingleWithUncoveredVariationCounter extends ElementsAndCoveredElementsVariationCounter { - private final SingleWithUncoveredMetricKeys metricKeys; - - public SingleWithUncoveredVariationCounter(SingleWithUncoveredMetricKeys metricKeys) { - this.metricKeys = requireNonNull(metricKeys); - } - - @Override - protected void initializeForSupportedLeaf(CounterInitializationContext counterContext) { - long newConditions = (long) getMeasureVariations(counterContext, metricKeys.getCovered()); - long uncoveredConditions = (long) getMeasureVariations(counterContext, metricKeys.getUncovered()); - this.elements.increment(newConditions); - coveredElements.increment(newConditions - uncoveredConditions); - } -} diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/formula/coverage/SingleWithUncoveredVariationFormula.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/formula/coverage/SingleWithUncoveredVariationFormula.java deleted file mode 100644 index 57f3d736496..00000000000 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/formula/coverage/SingleWithUncoveredVariationFormula.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2022 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program 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. - * - * This program 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.ce.task.projectanalysis.formula.coverage; - -import static java.util.Objects.requireNonNull; - -/** - * A Formula which implements the aggregation of the variations of a measure and its associated "uncovered" measure - * into the variations of a third measure. - */ -public class SingleWithUncoveredVariationFormula extends CoverageVariationFormula<SingleWithUncoveredVariationCounter> { - private final SingleWithUncoveredMetricKeys inputKeys; - private final String outputKey; - - protected SingleWithUncoveredVariationFormula(SingleWithUncoveredMetricKeys inputKeys, String outputKey) { - this.inputKeys = requireNonNull(inputKeys); - this.outputKey = requireNonNull(outputKey); - } - - @Override - public SingleWithUncoveredVariationCounter createNewCounter() { - return new SingleWithUncoveredVariationCounter(inputKeys); - } - - @Override - public String[] getOutputMetricKeys() { - return new String[] {outputKey}; - } -} diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/IssueCounter.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/IssueCounter.java index 77590b96107..8d44422f572 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/IssueCounter.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/IssueCounter.java @@ -187,10 +187,9 @@ public class IssueCounter extends IssueVisitor { if (!newIssueClassifier.isEnabled()) { return; } - double unresolvedVariations = currentCounters.counterForPeriod().unresolved; + int unresolved = currentCounters.counterForPeriod().unresolved; measureRepository.add(component, metricRepository.getByKey(NEW_VIOLATIONS_KEY), Measure.newMeasureBuilder() - .setVariation(unresolvedVariations) - .createNoValue()); + .create(unresolved)); for (Map.Entry<String, String> entry : SEVERITY_TO_NEW_METRIC_KEY.entrySet()) { String severity = entry.getKey(); @@ -198,8 +197,7 @@ public class IssueCounter extends IssueVisitor { Multiset<String> bag = currentCounters.counterForPeriod().severityBag; Metric metric = metricRepository.getByKey(metricKey); measureRepository.add(component, metric, Measure.newMeasureBuilder() - .setVariation(bag.count(severity)) - .createNoValue()); + .create(bag.count(severity))); } // waiting for Java 8 lambda in order to factor this loop with the previous one @@ -210,8 +208,7 @@ public class IssueCounter extends IssueVisitor { Multiset<RuleType> bag = currentCounters.counterForPeriod().typeBag; Metric metric = metricRepository.getByKey(metricKey); measureRepository.add(component, metric, Measure.newMeasureBuilder() - .setVariation(bag.count(type)) - .createNoValue()); + .create(bag.count(type))); } } diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/NewEffortAggregator.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/NewEffortAggregator.java index 1578d3716b4..9b2444cd85c 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/NewEffortAggregator.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/NewEffortAggregator.java @@ -90,8 +90,8 @@ public class NewEffortAggregator extends IssueVisitor { } private void computeMeasure(Component component, Metric metric, EffortSum effortSum) { - double variation = effortSum.isEmpty ? 0.0 : effortSum.newEffort; - measureRepository.add(component, metric, Measure.newMeasureBuilder().setVariation(variation).createNoValue()); + long value = effortSum.isEmpty ? 0 : effortSum.newEffort; + measureRepository.add(component, metric, Measure.newMeasureBuilder().create(value)); } private class NewEffortCounter { @@ -135,19 +135,19 @@ public class NewEffortAggregator extends IssueVisitor { } private static class EffortSum { - private Double newEffort; + private Long newEffort; private boolean isEmpty = true; void add(long newEffort) { - double previous = MoreObjects.firstNonNull(this.newEffort, 0D); + long previous = MoreObjects.firstNonNull(this.newEffort, 0L); this.newEffort = previous + newEffort; isEmpty = false; } void add(EffortSum other) { - Double otherValue = other.newEffort; + Long otherValue = other.newEffort; if (otherValue != null) { - add(otherValue.longValue()); + add(otherValue); } } } diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/BestValueOptimization.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/BestValueOptimization.java index 7ad8866bfbf..e30cf81f572 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/BestValueOptimization.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/BestValueOptimization.java @@ -58,18 +58,9 @@ public class BestValueOptimization implements Predicate<Measure> { private boolean isBestValueOptimized(Measure measure) { return measure.getData() == null && !measure.hasQualityGateStatus() - && hasNoVariation(measure, metric.getBestValue()) && (measure.getValueType() == NO_VALUE || isBestValue(measure, metric.getBestValue())); } - private static boolean hasNoVariation(Measure measure, Double bestValue) { - return !measure.hasVariation() || isVariationEmptyOrBestValue(measure.getVariation(), bestValue); - } - - private static boolean isVariationEmptyOrBestValue(double variation, Double bestValue) { - return compare(variation, 0D) == 0 || compare(variation, bestValue) == 0; - } - private static boolean isBestValue(Measure measure, Double bestValue) { switch (measure.getValueType()) { case BOOLEAN: diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/LiveMeasureDtoToMeasure.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/LiveMeasureDtoToMeasure.java index 7007ca7a3d8..e197ec8e041 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/LiveMeasureDtoToMeasure.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/LiveMeasureDtoToMeasure.java @@ -39,82 +39,72 @@ public class LiveMeasureDtoToMeasure { String data = measureDto.getDataAsString(); switch (metric.getType().getValueType()) { case INT: - return toIntegerMeasure(measureDto, value, data); + return toIntegerMeasure(value, data); case LONG: - return toLongMeasure(measureDto, value, data); + return toLongMeasure(value, data); case DOUBLE: - return toDoubleMeasure(measureDto, value, data); + return toDoubleMeasure(value, data); case BOOLEAN: - return toBooleanMeasure(measureDto, value, data); + return toBooleanMeasure(value, data); case STRING: - return toStringMeasure(measureDto, data); + return toStringMeasure(data); case LEVEL: - return toLevelMeasure(measureDto, data); + return toLevelMeasure(data); case NO_VALUE: - return toNoValueMeasure(measureDto); + return toNoValueMeasure(); default: throw new IllegalArgumentException("Unsupported Measure.ValueType " + metric.getType().getValueType()); } } - private static Optional<Measure> toIntegerMeasure(LiveMeasureDto measureDto, @Nullable Double value, @Nullable String data) { + private static Optional<Measure> toIntegerMeasure(@Nullable Double value, @Nullable String data) { if (value == null) { - return toNoValueMeasure(measureDto); + return toNoValueMeasure(); } - return of(setCommonProperties(Measure.newMeasureBuilder(), measureDto).create(value.intValue(), data)); + return of(Measure.newMeasureBuilder().create(value.intValue(), data)); } - private static Optional<Measure> toLongMeasure(LiveMeasureDto measureDto, @Nullable Double value, @Nullable String data) { + private static Optional<Measure> toLongMeasure(@Nullable Double value, @Nullable String data) { if (value == null) { - return toNoValueMeasure(measureDto); + return toNoValueMeasure(); } - return of(setCommonProperties(Measure.newMeasureBuilder(), measureDto).create(value.longValue(), data)); + return of(Measure.newMeasureBuilder().create(value.longValue(), data)); } - private static Optional<Measure> toDoubleMeasure(LiveMeasureDto measureDto, @Nullable Double value, @Nullable String data) { + private static Optional<Measure> toDoubleMeasure(@Nullable Double value, @Nullable String data) { if (value == null) { - return toNoValueMeasure(measureDto); + return toNoValueMeasure(); } - return of(setCommonProperties(Measure.newMeasureBuilder(), measureDto) - .create(value, org.sonar.api.measures.Metric.MAX_DECIMAL_SCALE, data)); + return of(Measure.newMeasureBuilder().create(value, org.sonar.api.measures.Metric.MAX_DECIMAL_SCALE, data)); } - private static Optional<Measure> toBooleanMeasure(LiveMeasureDto measureDto, @Nullable Double value, @Nullable String data) { + private static Optional<Measure> toBooleanMeasure(@Nullable Double value, @Nullable String data) { if (value == null) { - return toNoValueMeasure(measureDto); + return toNoValueMeasure(); } - return of(setCommonProperties(Measure.newMeasureBuilder(), measureDto).create(Double.compare(value, 1.0D) == 0, data)); + return of(Measure.newMeasureBuilder().create(Double.compare(value, 1.0D) == 0, data)); } - private static Optional<Measure> toStringMeasure(LiveMeasureDto measureDto, @Nullable String data) { + private static Optional<Measure> toStringMeasure(@Nullable String data) { if (data == null) { - return toNoValueMeasure(measureDto); + return toNoValueMeasure(); } - return of(setCommonProperties(Measure.newMeasureBuilder(), measureDto).create(data)); + return of(Measure.newMeasureBuilder().create(data)); } - private static Optional<Measure> toLevelMeasure(LiveMeasureDto measureDto, @Nullable String data) { + private static Optional<Measure> toLevelMeasure(@Nullable String data) { if (data == null) { - return toNoValueMeasure(measureDto); + return toNoValueMeasure(); } Optional<Measure.Level> level = toLevel(data); if (!level.isPresent()) { - return toNoValueMeasure(measureDto); + return toNoValueMeasure(); } - return of(setCommonProperties(Measure.newMeasureBuilder(), measureDto).create(level.get())); + return of(Measure.newMeasureBuilder().create(level.get())); } - private static Optional<Measure> toNoValueMeasure(LiveMeasureDto measureDto) { - return of(setCommonProperties(Measure.newMeasureBuilder(), measureDto).createNoValue()); + private static Optional<Measure> toNoValueMeasure() { + return of(Measure.newMeasureBuilder().createNoValue()); } - - private static Measure.NewMeasureBuilder setCommonProperties(Measure.NewMeasureBuilder builder, LiveMeasureDto measureDto) { - Double variation = measureDto.getVariation(); - if (variation != null) { - builder.setVariation(variation); - } - return builder; - } - } 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 1be2e0f1e50..bedb74a3fbd 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 @@ -28,6 +28,7 @@ import javax.annotation.CheckForNull; import javax.annotation.Nullable; import org.sonar.ce.task.projectanalysis.util.cache.DoubleCache; +import static com.google.common.base.MoreObjects.toStringHelper; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkState; import static java.util.Objects.requireNonNull; @@ -139,20 +140,8 @@ public interface Measure { */ QualityGateStatus getQualityGateStatus(); - /** - * Any Measure, which ever is its value type, can have a variation. - */ - boolean hasVariation(); - - /** - * The variation of this measure. - * - * @throws IllegalStateException if the measure has no variation - */ - double getVariation(); - default boolean isEmpty() { - return getValueType() == ValueType.NO_VALUE && !hasVariation() && getData() == null; + return getValueType() == ValueType.NO_VALUE && getData() == null; } static NewMeasureBuilder newMeasureBuilder() { @@ -173,17 +162,13 @@ public interface Measure { private final Level dataLevel; @CheckForNull private final QualityGateStatus qualityGateStatus; - @CheckForNull - private final Double variation; - private MeasureImpl(ValueType valueType, @Nullable Double value, @Nullable String data, @Nullable Level dataLevel, - @Nullable QualityGateStatus qualityGateStatus, @Nullable Double variation) { + private MeasureImpl(ValueType valueType, @Nullable Double value, @Nullable String data, @Nullable Level dataLevel, @Nullable QualityGateStatus qualityGateStatus) { this.valueType = valueType; this.value = DoubleCache.intern(value); this.data = data; this.dataLevel = dataLevel; this.qualityGateStatus = qualityGateStatus; - this.variation = variation; } @Override @@ -243,17 +228,6 @@ public interface Measure { return this.qualityGateStatus; } - @Override - public boolean hasVariation() { - return variation != null; - } - - @Override - public double getVariation() { - checkState(variation != null, "Measure does not have variation"); - return variation; - } - private static void checkValueType(ValueType expected, ValueType valueType) { if (valueType != expected) { throw new IllegalStateException( @@ -266,13 +240,12 @@ public interface Measure { @Override public String toString() { - return com.google.common.base.MoreObjects.toStringHelper(this) + return toStringHelper(this) .add("valueType", valueType) .add("value", value) .add("data", data) .add("dataLevel", dataLevel) .add("qualityGateStatus", qualityGateStatus) - .add("variations", variation) .toString(); } } @@ -342,16 +315,6 @@ public interface Measure { } @Override - public boolean hasVariation() { - return false; - } - - @Override - public double getVariation() { - throw new IllegalStateException("Measure does not have variation"); - } - - @Override public boolean equals(Object o) { if (this == o) return true; @@ -368,21 +331,14 @@ public interface Measure { @Override public String toString() { - return com.google.common.base.MoreObjects.toStringHelper(this) + return toStringHelper(this) .add("valueType", valueType) .add("value", value) .toString(); } } - class NoValueVariationMeasureImpl implements Measure { - @Nullable - private Double variation; - - private NoValueVariationMeasureImpl(@Nullable Double variation) { - this.variation = variation; - } - + class NoValueMeasureImpl implements Measure { @Override public ValueType getValueType() { return ValueType.NO_VALUE; @@ -416,7 +372,6 @@ public interface Measure { @Override public Level getLevelValue() { throw new IllegalStateException(); - } @Override @@ -435,39 +390,21 @@ public interface Measure { } @Override - public boolean hasVariation() { - return variation != null; - } - - @Override - public double getVariation() { - checkState(variation != null, "Measure does not have variation"); - return variation; - } - - @Override public String toString() { - return com.google.common.base.MoreObjects.toStringHelper(this) + return toStringHelper(this) .add("valueType", ValueType.NO_VALUE) - .add("variations", variation) .toString(); } } class NewMeasureBuilder { private QualityGateStatus qualityGateStatus; - private Double variation; public NewMeasureBuilder setQualityGateStatus(QualityGateStatus qualityGateStatus) { this.qualityGateStatus = requireNonNull(qualityGateStatus, "QualityGateStatus can not be set to null"); return this; } - public NewMeasureBuilder setVariation(double variation) { - this.variation = variation; - return this; - } - public Measure create(boolean value, @Nullable String data) { return createInternal(ValueType.BOOLEAN, value ? 1.0D : 0.0D, data); } @@ -499,30 +436,34 @@ public interface Measure { } private Measure createInternal(ValueType type, double value, @Nullable String data) { - if (data == null && qualityGateStatus == null && variation == null) { + if (data == null && qualityGateStatus == null) { return new ValueMeasureImpl(type, value); } - return new MeasureImpl(type, value, data, null, qualityGateStatus, variation); + return new MeasureImpl(type, value, data, null, qualityGateStatus); } public Measure create(double value, int decimalScale) { return create(value, decimalScale, null); } + public Measure create(double value) { + return create(value, org.sonar.api.measures.Metric.MAX_DECIMAL_SCALE); + } + public Measure create(String value) { - return new MeasureImpl(ValueType.STRING, null, requireNonNull(value), null, qualityGateStatus, variation); + return new MeasureImpl(ValueType.STRING, null, requireNonNull(value), null, qualityGateStatus); } public Measure create(Level level) { - return new MeasureImpl(ValueType.LEVEL, null, null, requireNonNull(level), qualityGateStatus, variation); + return new MeasureImpl(ValueType.LEVEL, null, null, requireNonNull(level), qualityGateStatus); } public Measure createNoValue() { if (qualityGateStatus == null) { - return new NoValueVariationMeasureImpl(variation); + return new NoValueMeasureImpl(); } - return new MeasureImpl(ValueType.NO_VALUE, null, null, null, qualityGateStatus, variation); + return new MeasureImpl(ValueType.NO_VALUE, null, null, null, qualityGateStatus); } private static double scale(double value, int decimalScale) { @@ -534,7 +475,6 @@ public interface Measure { final class UpdateMeasureBuilder { private final Measure source; private QualityGateStatus qualityGateStatus; - private Double variation; public UpdateMeasureBuilder(Measure source) { this.source = requireNonNull(source, "Can not create a measure from null"); @@ -554,19 +494,6 @@ public interface Measure { return this; } - /** - * Sets the variation of the updated Measure to create. - * - * @throws UnsupportedOperationException if the source measure already has a variation - */ - public UpdateMeasureBuilder setVariation(double variation) { - if (source.hasVariation()) { - throw new UnsupportedOperationException("Variation can not be changed if already set on source Measure"); - } - this.variation = variation; - return this; - } - public Measure create() { Double value; switch (source.getValueType()) { @@ -589,13 +516,7 @@ public interface Measure { } Level level = source.getValueType() == ValueType.LEVEL ? source.getLevelValue() : null; QualityGateStatus status = source.hasQualityGateStatus() ? source.getQualityGateStatus() : qualityGateStatus; - Double var; - if (source.hasVariation()) { - var = source.getVariation(); - } else { - var = variation; - } - return new MeasureImpl(source.getValueType(), value, source.getData(), level, status, var); + return new MeasureImpl(source.getValueType(), value, source.getData(), level, status); } } } diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MeasureDtoToMeasure.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MeasureDtoToMeasure.java index 0ed0ec491ce..2494c1a3eca 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MeasureDtoToMeasure.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MeasureDtoToMeasure.java @@ -116,14 +116,6 @@ public class MeasureDtoToMeasure { builder.setQualityGateStatus(new QualityGateStatus(qualityGateStatus.get(), measureDto.getAlertText())); } } - if (hasAnyVariation(measureDto)) { - builder.setVariation(measureDto.getVariation()); - } return builder; } - - private static boolean hasAnyVariation(MeasureDto measureDto) { - return measureDto.getVariation() != null; - } - } diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MeasureToMeasureDto.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MeasureToMeasureDto.java index e456a66c0f8..edb91a9fb8b 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MeasureToMeasureDto.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MeasureToMeasureDto.java @@ -42,9 +42,6 @@ public class MeasureToMeasureDto { out.setMetricUuid(metric.getUuid()); out.setComponentUuid(component.getUuid()); out.setAnalysisUuid(analysisMetadataHolder.getUuid()); - if (measure.hasVariation()) { - out.setVariation(measure.getVariation()); - } if (measure.hasQualityGateStatus()) { setAlert(out, measure.getQualityGateStatus()); } @@ -58,9 +55,6 @@ public class MeasureToMeasureDto { out.setMetricUuid(metric.getUuid()); out.setComponentUuid(component.getUuid()); out.setProjectUuid(treeRootHolder.getRoot().getUuid()); - if (measure.hasVariation()) { - out.setVariation(measure.getVariation()); - } out.setValue(valueAsDouble(measure)); out.setData(data(measure)); return out; diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/qualitygate/ConditionEvaluator.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/qualitygate/ConditionEvaluator.java index 83d9731bdd5..db8e1556cdf 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/qualitygate/ConditionEvaluator.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/qualitygate/ConditionEvaluator.java @@ -45,7 +45,7 @@ public final class ConditionEvaluator { public EvaluationResult evaluate(Condition condition, Measure measure) { checkArgument(SUPPORTED_METRIC_TYPE.contains(condition.getMetric().getType()), "Conditions on MetricType %s are not supported", condition.getMetric().getType()); - Comparable measureComparable = parseMeasure(condition, measure); + Comparable measureComparable = parseMeasure(measure); if (measureComparable == null) { return new EvaluationResult(Measure.Level.OK, null); } @@ -100,10 +100,7 @@ public final class ConditionEvaluator { } @CheckForNull - private static Comparable parseMeasure(Condition condition, Measure measure) { - if (condition.useVariation()) { - return parseMeasureFromVariation(condition, measure); - } + private static Comparable parseMeasure(Measure measure) { switch (measure.getValueType()) { case INT: return measure.getIntValue(); @@ -120,26 +117,4 @@ public final class ConditionEvaluator { String.format("Unsupported measure ValueType %s. Can not parse measure to a Comparable", measure.getValueType())); } } - - @CheckForNull - private static Comparable parseMeasureFromVariation(Condition condition, Measure measure) { - if (!measure.hasVariation()) { - return null; - } - - Double variation = measure.getVariation(); - Metric.MetricType metricType = condition.getMetric().getType(); - switch (metricType.getValueType()) { - case INT: - return variation.intValue(); - case LONG: - return variation.longValue(); - case DOUBLE: - return variation; - case NO_VALUE: - case LEVEL: - default: - throw new IllegalArgumentException("Unsupported metric type " + metricType); - } - } } diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/qualitymodel/NewMaintainabilityMeasuresVisitor.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/qualitymodel/NewMaintainabilityMeasuresVisitor.java index 421bd2b789d..007c8bc9b71 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/qualitymodel/NewMaintainabilityMeasuresVisitor.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/qualitymodel/NewMaintainabilityMeasuresVisitor.java @@ -110,11 +110,11 @@ public class NewMaintainabilityMeasuresVisitor extends PathAwareVisitorAdapter<N } double density = computeDensity(path.current()); double newDebtRatio = 100.0 * density; - double newMaintainability = ratingSettings.getDebtRatingGrid().getRatingForDensity(density).getIndex(); - long newDevelopmentCost = path.current().getDevCost().getValue(); - measureRepository.add(component, this.newDevelopmentCostMetric, newMeasureBuilder().setVariation(newDevelopmentCost).createNoValue()); - measureRepository.add(component, this.newDebtRatioMetric, newMeasureBuilder().setVariation(newDebtRatio).createNoValue()); - measureRepository.add(component, this.newMaintainabilityRatingMetric, newMeasureBuilder().setVariation(newMaintainability).createNoValue()); + int newMaintainability = ratingSettings.getDebtRatingGrid().getRatingForDensity(density).getIndex(); + float newDevelopmentCost = path.current().getDevCost().getValue(); + measureRepository.add(component, this.newDevelopmentCostMetric, newMeasureBuilder().create(newDevelopmentCost)); + measureRepository.add(component, this.newDebtRatioMetric, newMeasureBuilder().create(newDebtRatio)); + measureRepository.add(component, this.newMaintainabilityRatingMetric, newMeasureBuilder().create(newMaintainability)); } private static double computeDensity(Counter counter) { @@ -133,10 +133,7 @@ public class NewMaintainabilityMeasuresVisitor extends PathAwareVisitorAdapter<N } private static long getLongValue(Measure measure) { - if (measure.hasVariation()) { - return (long) measure.getVariation(); - } - return 0L; + return measure.getLongValue(); } private void initNewDebtRatioCounter(Component file, Path<Counter> path) { diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/qualitymodel/NewReliabilityAndSecurityRatingMeasuresVisitor.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/qualitymodel/NewReliabilityAndSecurityRatingMeasuresVisitor.java index d29faba43f5..7880c70c866 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/qualitymodel/NewReliabilityAndSecurityRatingMeasuresVisitor.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/qualitymodel/NewReliabilityAndSecurityRatingMeasuresVisitor.java @@ -112,7 +112,7 @@ public class NewReliabilityAndSecurityRatingMeasuresVisitor extends PathAwareVis entry -> measureRepository.add( component, metricsByKey.get(entry.getKey()), - newMeasureBuilder().setVariation(entry.getValue().getValue().getIndex()).createNoValue())); + newMeasureBuilder().create(entry.getValue().getValue().getIndex()))); addToParent(path); } diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/qualitymodel/NewSecurityReviewMeasuresVisitor.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/qualitymodel/NewSecurityReviewMeasuresVisitor.java index da25f1f0a3d..6eb0638a54b 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/qualitymodel/NewSecurityReviewMeasuresVisitor.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/qualitymodel/NewSecurityReviewMeasuresVisitor.java @@ -69,8 +69,8 @@ public class NewSecurityReviewMeasuresVisitor extends PathAwareVisitorAdapter<Se computeMeasure(project, path); // The following measures are only computed on projects level as they are required to compute the others measures on applications - measureRepository.add(project, newSecurityHotspotsReviewedStatusMetric, Measure.newMeasureBuilder().setVariation(path.current().getHotspotsReviewed()).createNoValue()); - measureRepository.add(project, newSecurityHotspotsToReviewStatusMetric, Measure.newMeasureBuilder().setVariation(path.current().getHotspotsToReview()).createNoValue()); + measureRepository.add(project, newSecurityHotspotsReviewedStatusMetric, Measure.newMeasureBuilder().create(path.current().getHotspotsReviewed())); + measureRepository.add(project, newSecurityHotspotsToReviewStatusMetric, Measure.newMeasureBuilder().create(path.current().getHotspotsToReview())); } @Override @@ -91,8 +91,8 @@ public class NewSecurityReviewMeasuresVisitor extends PathAwareVisitorAdapter<Se .forEach(issue -> path.current().processHotspot(issue)); Optional<Double> percent = computePercent(path.current().getHotspotsToReview(), path.current().getHotspotsReviewed()); - measureRepository.add(component, newSecurityReviewRatingMetric, Measure.newMeasureBuilder().setVariation(computeRating(percent.orElse(null)).getIndex()).createNoValue()); - percent.ifPresent(p -> measureRepository.add(component, newSecurityHotspotsReviewedMetric, Measure.newMeasureBuilder().setVariation(p).createNoValue())); + measureRepository.add(component, newSecurityReviewRatingMetric, Measure.newMeasureBuilder().create(computeRating(percent.orElse(null)).getIndex())); + percent.ifPresent(p -> measureRepository.add(component, newSecurityHotspotsReviewedMetric, Measure.newMeasureBuilder().create(p))); if (!path.isRoot()) { path.parent().add(path.current()); diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/NewCoverageMeasuresStep.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/NewCoverageMeasuresStep.java index ae5eb75170c..54d006056a9 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/NewCoverageMeasuresStep.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/NewCoverageMeasuresStep.java @@ -35,10 +35,10 @@ import org.sonar.ce.task.projectanalysis.formula.CreateMeasureContext; import org.sonar.ce.task.projectanalysis.formula.Formula; import org.sonar.ce.task.projectanalysis.formula.FormulaExecutorComponentVisitor; import org.sonar.ce.task.projectanalysis.formula.counter.IntValue; +import org.sonar.ce.task.projectanalysis.formula.coverage.LinesAndConditionsWithUncoveredFormula; import org.sonar.ce.task.projectanalysis.formula.coverage.LinesAndConditionsWithUncoveredMetricKeys; -import org.sonar.ce.task.projectanalysis.formula.coverage.LinesAndConditionsWithUncoveredVariationFormula; +import org.sonar.ce.task.projectanalysis.formula.coverage.SingleWithUncoveredFormula; import org.sonar.ce.task.projectanalysis.formula.coverage.SingleWithUncoveredMetricKeys; -import org.sonar.ce.task.projectanalysis.formula.coverage.SingleWithUncoveredVariationFormula; import org.sonar.ce.task.projectanalysis.measure.Measure; import org.sonar.ce.task.projectanalysis.measure.MeasureRepository; import org.sonar.ce.task.projectanalysis.metric.Metric; @@ -56,7 +56,7 @@ import static org.sonar.api.measures.CoreMetrics.NEW_UNCOVERED_LINES_KEY; import static org.sonar.ce.task.projectanalysis.measure.Measure.newMeasureBuilder; /** - * Computes measures related to the New Coverage. These measures do not have values, only variations. + * Computes measures related to the New Coverage. */ public class NewCoverageMeasuresStep implements ComputationStep { private static final List<Formula<?>> FORMULAS = List.of( @@ -95,7 +95,7 @@ public class NewCoverageMeasuresStep implements ComputationStep { return "Compute new coverage"; } - private static class NewCoverageFormula extends LinesAndConditionsWithUncoveredVariationFormula { + private static class NewCoverageFormula extends LinesAndConditionsWithUncoveredFormula { NewCoverageFormula() { super( new LinesAndConditionsWithUncoveredMetricKeys( @@ -105,7 +105,7 @@ public class NewCoverageMeasuresStep implements ComputationStep { } } - private static class NewBranchCoverageFormula extends SingleWithUncoveredVariationFormula { + private static class NewBranchCoverageFormula extends SingleWithUncoveredFormula { NewBranchCoverageFormula() { super( new SingleWithUncoveredMetricKeys(NEW_CONDITIONS_TO_COVER_KEY, NEW_UNCOVERED_CONDITIONS_KEY), @@ -113,7 +113,7 @@ public class NewCoverageMeasuresStep implements ComputationStep { } } - private static class NewLineCoverageFormula extends SingleWithUncoveredVariationFormula { + private static class NewLineCoverageFormula extends SingleWithUncoveredFormula { NewLineCoverageFormula() { super( new SingleWithUncoveredMetricKeys(NEW_LINES_TO_COVER_KEY, NEW_UNCOVERED_LINES_KEY), @@ -143,7 +143,7 @@ public class NewCoverageMeasuresStep implements ComputationStep { public Optional<Measure> createMeasure(NewCoverageCounter counter, CreateMeasureContext context) { if (counter.hasNewCode()) { int value = computeValueForMetric(counter, context.getMetric()); - return Optional.of(newMeasureBuilder().setVariation(value).createNoValue()); + return Optional.of(newMeasureBuilder().create(value)); } return Optional.empty(); } diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/NewSizeMeasuresStep.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/NewSizeMeasuresStep.java index 395bcf96e3a..87dde1e356d 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/NewSizeMeasuresStep.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/NewSizeMeasuresStep.java @@ -205,7 +205,7 @@ public class NewSizeMeasuresStep implements ComputationStep { private static Optional<Measure> createMeasure(IntValue intValue) { return intValue.isSet() - ? Optional.of(Measure.newMeasureBuilder().setVariation(intValue.getValue()).createNoValue()) + ? Optional.of(Measure.newMeasureBuilder().create(intValue.getValue())) : Optional.empty(); } @@ -213,11 +213,11 @@ public class NewSizeMeasuresStep implements ComputationStep { IntValue newLines = counter.newLines; IntValue newDuplicatedLines = counter.newDuplicatedLines; if (newLines.isSet() && newDuplicatedLines.isSet()) { - int newLinesVariations = newLines.getValue(); - int newDuplicatedLinesVariations = newDuplicatedLines.getValue(); - if (newLinesVariations > 0D) { - double density = Math.min(100D, 100D * newDuplicatedLinesVariations / newLinesVariations); - return Optional.of(Measure.newMeasureBuilder().setVariation(density).createNoValue()); + int newLinesValue = newLines.getValue(); + int newDuplicatedLinesValue = newDuplicatedLines.getValue(); + if (newLinesValue > 0D) { + double density = Math.min(100D, 100D * newDuplicatedLinesValue / newLinesValue); + return Optional.of(Measure.newMeasureBuilder().create(density)); } } return Optional.empty(); 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 e9dd25a1df1..69d44182495 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 @@ -217,7 +217,7 @@ public class PersistLiveMeasuresStep implements ComputationStep { @Override public boolean test(@Nonnull Measure input) { - return input.getValueType() != Measure.ValueType.NO_VALUE || input.hasVariation() || input.getData() != null; + return input.getValueType() != Measure.ValueType.NO_VALUE || input.getData() != null; } } } diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/SmallChangesetQualityGateSpecialCase.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/SmallChangesetQualityGateSpecialCase.java index 027b0b42bab..f69f7f7f039 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/SmallChangesetQualityGateSpecialCase.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/SmallChangesetQualityGateSpecialCase.java @@ -59,7 +59,7 @@ public class SmallChangesetQualityGateSpecialCase { private boolean isSmallChangeset(Component project) { return measureRepository.getRawMeasure(project, metricRepository.getByKey(CoreMetrics.NEW_LINES_KEY)) - .map(newLines -> newLines.hasVariation() && newLines.getVariation() < MAXIMUM_NEW_LINES_FOR_SMALL_CHANGESETS) + .map(newLines -> newLines.getIntValue() < MAXIMUM_NEW_LINES_FOR_SMALL_CHANGESETS) .orElse(false); } } diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/steps/ExportLiveMeasuresStep.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/steps/ExportLiveMeasuresStep.java index 84f0013a619..f47661d59ab 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/steps/ExportLiveMeasuresStep.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/steps/ExportLiveMeasuresStep.java @@ -36,7 +36,7 @@ import static org.sonar.db.DatabaseUtils.getString; public class ExportLiveMeasuresStep implements ComputationStep { - private static final String QUERY = "select pm.metric_uuid, pm.component_uuid, pm.text_value, pm.value, pm.variation" + + private static final String QUERY = "select pm.metric_uuid, pm.component_uuid, pm.text_value, pm.value, m.name" + " from live_measures pm" + " join metrics m on m.uuid=pm.metric_uuid" + " join components p on p.uuid = pm.component_uuid" + @@ -95,12 +95,13 @@ public class ExportLiveMeasuresStep implements ComputationStep { .setComponentRef(componentRef) .setTextValue(defaultString(getString(rs, 3))); Double value = getDouble(rs, 4); - if (value != null) { - builder.setDoubleValue(doubleBuilder.setValue(value).build()); - } - Double variation = getDouble(rs, 5); - if (variation != null) { - builder.setVariation(doubleBuilder.setValue(variation).build()); + String metricKey = getString(rs, 5); + if (value != null && metricKey != null) { + if (metricKey.startsWith("new_")) { + builder.setVariation(doubleBuilder.setValue(value).build()); + } else { + builder.setDoubleValue(doubleBuilder.setValue(value).build()); + } } return builder.build(); } diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/steps/ExportMeasuresStep.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/steps/ExportMeasuresStep.java index ac5969d5d55..a0bbfc71061 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/steps/ExportMeasuresStep.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/steps/ExportMeasuresStep.java @@ -39,7 +39,7 @@ import static org.sonar.db.DatabaseUtils.getString; public class ExportMeasuresStep implements ComputationStep { private static final String QUERY = "select pm.metric_uuid, pm.analysis_uuid, pm.component_uuid, pm.text_value, pm.value," + - " pm.alert_status, pm.alert_text, pm.variation_value_1" + + " pm.alert_status, pm.alert_text, m.name" + " from project_measures pm" + " join metrics m on m.uuid=pm.metric_uuid" + " join snapshots s on s.uuid=pm.analysis_uuid" + @@ -104,6 +104,7 @@ public class ExportMeasuresStep implements ComputationStep { ProjectDump.DoubleValue.Builder doubleBuilder) throws SQLException { long componentRef = componentRepository.getRef(rs.getString(3)); int metricRef = metricHolder.add(rs.getString(1)); + String metricKey = rs.getString(8); builder .clear() @@ -112,15 +113,16 @@ public class ExportMeasuresStep implements ComputationStep { .setComponentRef(componentRef) .setTextValue(defaultString(getString(rs, 4))); Double value = getDouble(rs, 5); + if (value != null) { - builder.setDoubleValue(doubleBuilder.setValue(value).build()); + if (metricKey.startsWith("new_")) { + builder.setVariation1(doubleBuilder.setValue(value).build()); + } else { + builder.setDoubleValue(doubleBuilder.setValue(value).build()); + } } builder.setAlertStatus(defaultString(getString(rs, 6))); builder.setAlertText(defaultString(getString(rs, 7))); - Double var1 = getDouble(rs, 8); - if (var1 != null) { - builder.setVariation1(doubleBuilder.setValue(var1).build()); - } return builder.build(); } diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/formula/ReportFormulaExecutorComponentVisitorTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/formula/ReportFormulaExecutorComponentVisitorTest.java index 17a5aa9b85a..486f73af574 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/formula/ReportFormulaExecutorComponentVisitorTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/formula/ReportFormulaExecutorComponentVisitorTest.java @@ -28,7 +28,6 @@ import org.sonar.ce.task.projectanalysis.component.Component; import org.sonar.ce.task.projectanalysis.component.PathAwareCrawler; import org.sonar.ce.task.projectanalysis.component.ReportComponent; import org.sonar.ce.task.projectanalysis.component.TreeRootHolderRule; -import org.sonar.ce.task.projectanalysis.formula.counter.IntValue; import org.sonar.ce.task.projectanalysis.measure.Measure; import org.sonar.ce.task.projectanalysis.measure.MeasureRepositoryRule; import org.sonar.ce.task.projectanalysis.metric.Metric; @@ -130,25 +129,6 @@ public class ReportFormulaExecutorComponentVisitorTest { } @Test - public void verify_aggregation_on_variation() { - treeRootHolder.setRoot(BALANCED_COMPONENT_TREE); - - measureRepository.addRawMeasure(FILE_1_REF, NEW_LINES_TO_COVER_KEY, createMeasureWithVariation(10)); - measureRepository.addRawMeasure(FILE_2_REF, NEW_LINES_TO_COVER_KEY, createMeasureWithVariation(8)); - measureRepository.addRawMeasure(FILE_3_REF, NEW_LINES_TO_COVER_KEY, createMeasureWithVariation(2)); - - new PathAwareCrawler<>(formulaExecutorComponentVisitor(new FakeVariationFormula())) - .visit(BALANCED_COMPONENT_TREE); - - assertAddedRawMeasureVariation(ROOT_REF, 20); - assertAddedRawMeasureVariation(DIRECTORY_1_REF, 18); - assertAddedRawMeasureVariation(FILE_1_REF, 10); - assertAddedRawMeasureVariation(FILE_2_REF, 8); - assertAddedRawMeasureVariation(DIRECTORY_2_REF, 2); - assertAddedRawMeasureVariation(FILE_3_REF, 2); - } - - @Test public void measures_are_0_when_there_is_no_input_measure() { ReportComponent project = ReportComponent.builder(PROJECT, ROOT_REF) .addChildren( @@ -219,13 +199,13 @@ public class ReportFormulaExecutorComponentVisitorTest { treeRootHolder.setRoot(root); measureRepository.addRawMeasure(FILE_1_REF, NCLOC_KEY, newMeasureBuilder().create(2)); -// expectedException.expectCause( -// hasType(UnsupportedOperationException.class) -// .andMessage(String.format("A measure can only be set once for Component (ref=%s), Metric (key=%s)", FILE_1_REF, NCLOC_KEY)) -// ); + // expectedException.expectCause( + // hasType(UnsupportedOperationException.class) + // .andMessage(String.format("A measure can only be set once for Component (ref=%s), Metric (key=%s)", FILE_1_REF, NCLOC_KEY)) + // ); assertThatThrownBy(() -> new PathAwareCrawler<>(formulaExecutorComponentVisitor(new FakeFormula())).visit(root)) - .hasCause( new UnsupportedOperationException(String.format("A measure can only be set once for Component (ref=%s), Metric (key=%s)", FILE_1_REF, NCLOC_KEY))); + .hasCause(new UnsupportedOperationException(String.format("A measure can only be set once for Component (ref=%s), Metric (key=%s)", FILE_1_REF, NCLOC_KEY))); } @Test @@ -234,8 +214,8 @@ public class ReportFormulaExecutorComponentVisitorTest { treeRootHolder.setRoot(root); measureRepository.addRawMeasure(ROOT_REF, NCLOC_KEY, newMeasureBuilder().create(10)); -// expectedException.expectCause(hasType(UnsupportedOperationException.class) -// .andMessage(String.format("A measure can only be set once for Component (ref=%s), Metric (key=%s)", ROOT_REF, NCLOC_KEY))); + // expectedException.expectCause(hasType(UnsupportedOperationException.class) + // .andMessage(String.format("A measure can only be set once for Component (ref=%s), Metric (key=%s)", ROOT_REF, NCLOC_KEY))); assertThatThrownBy(() -> { new PathAwareCrawler<>(formulaExecutorComponentVisitor(new FakeFormula())) @@ -249,19 +229,10 @@ public class ReportFormulaExecutorComponentVisitorTest { .buildFor(ImmutableList.of(formula)); } - private static Measure createMeasureWithVariation(double variation) { - return newMeasureBuilder().setVariation(variation).createNoValue(); - } - private void assertAddedRawMeasure(int componentRef, int expectedValue) { assertThat(toEntries(measureRepository.getAddedRawMeasures(componentRef))).containsOnly(entryOf(NCLOC_KEY, newMeasureBuilder().create(expectedValue))); } - private void assertAddedRawMeasureVariation(int componentRef, int variation) { - assertThat(toEntries(measureRepository.getAddedRawMeasures(componentRef))) - .containsOnly(entryOf(NEW_COVERAGE_KEY, createMeasureWithVariation(variation))); - } - private class FakeFormula implements Formula<FakeCounter> { @Override @@ -336,55 +307,4 @@ public class ReportFormulaExecutorComponentVisitorTest { } } } - - private class FakeVariationFormula implements Formula<FakeVariationCounter> { - - @Override - public FakeVariationCounter createNewCounter() { - return new FakeVariationCounter(); - } - - @Override - public Optional<Measure> createMeasure(FakeVariationCounter counter, CreateMeasureContext context) { - // verify the context which is passed to the method - assertThat(context.getComponent()).isNotNull(); - assertThat(context.getMetric()).isSameAs(metricRepository.getByKey(NEW_COVERAGE_KEY)); - - IntValue measureVariations = counter.values; - if (measureVariations.isSet()) { - return Optional.of( - newMeasureBuilder() - .setVariation(measureVariations.getValue()) - .createNoValue()); - } - return Optional.empty(); - } - - @Override - public String[] getOutputMetricKeys() { - return new String[] {NEW_COVERAGE_KEY}; - } - } - - private static class FakeVariationCounter implements Counter<FakeVariationCounter> { - private final IntValue values = new IntValue(); - - @Override - public void aggregate(FakeVariationCounter counter) { - values.increment(counter.values); - } - - @Override - public void initialize(CounterInitializationContext context) { - // verify the context which is passed to the method - assertThat(context.getLeaf().getChildren()).isEmpty(); - - Optional<Measure> measureOptional = context.getMeasure(NEW_LINES_TO_COVER_KEY); - if (!measureOptional.isPresent()) { - return; - } - this.values.increment((int) measureOptional.get().getVariation()); - } - } - } diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/formula/ViewsFormulaExecutorComponentVisitorTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/formula/ViewsFormulaExecutorComponentVisitorTest.java index 2ff98d57503..328b3d9dc31 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/formula/ViewsFormulaExecutorComponentVisitorTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/formula/ViewsFormulaExecutorComponentVisitorTest.java @@ -125,38 +125,6 @@ public class ViewsFormulaExecutorComponentVisitorTest { } @Test - public void verify_aggregation_on_variations() { - treeRootHolder.setRoot(BALANCED_COMPONENT_TREE); - - addRawMeasureWithVariation(PROJECT_VIEW_1_REF, NEW_LINES_TO_COVER_KEY, 10); - addRawMeasureWithVariation(PROJECT_VIEW_2_REF, NEW_LINES_TO_COVER_KEY, 8); - addRawMeasureWithVariation(PROJECT_VIEW_3_REF, NEW_LINES_TO_COVER_KEY, 2); - addRawMeasureWithVariation(PROJECT_VIEW_4_REF, NEW_LINES_TO_COVER_KEY, 3); - - new PathAwareCrawler<>(formulaExecutorComponentVisitor(new FakeVariationFormula())) - .visit(BALANCED_COMPONENT_TREE); - - verifyProjectViewsHasNoAddedRawMeasures(); - verifySingleMetricWithVariation(SUB_SUBVIEW_REF, 18); - verifySingleMetricWithVariation(SUBVIEW_1_REF, 18); - verifySingleMetricWithVariation(SUBVIEW_2_REF, 2); - verifySingleMetricWithVariation(ROOT_REF, 23); - } - - private void verifySingleMetricWithVariation(int componentRef, int variation) { - assertThat(toEntries(measureRepository.getAddedRawMeasures(componentRef))) - .containsOnly(entryOf(NEW_COVERAGE_KEY, createMeasureWithVariation(variation))); - } - - private MeasureRepositoryRule addRawMeasureWithVariation(int componentRef, String metricKey, int variation) { - return measureRepository.addRawMeasure(componentRef, metricKey, createMeasureWithVariation(variation)); - } - - private static Measure createMeasureWithVariation(double variation) { - return newMeasureBuilder().setVariation(variation).createNoValue(); - } - - @Test public void verify_no_measure_added_on_projectView() { ViewsComponent project = ViewsComponent.builder(VIEW, ROOT_REF) .addChildren( @@ -287,10 +255,7 @@ public class ViewsFormulaExecutorComponentVisitorTest { IntValue measureVariations = counter.values; if (measureVariations.isSet()) { - return Optional.of( - newMeasureBuilder() - .setVariation(measureVariations.getValue()) - .createNoValue()); + return Optional.of(newMeasureBuilder().create(measureVariations.getValue())); } return Optional.empty(); } @@ -317,7 +282,7 @@ public class ViewsFormulaExecutorComponentVisitorTest { if (!measureOptional.isPresent()) { return; } - this.values.increment((int) measureOptional.get().getVariation()); + this.values.increment(measureOptional.get().getIntValue()); } } diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/formula/counter/IntValueTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/formula/counter/IntValueTest.java index ed0d0d28c42..1d398d6a316 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/formula/counter/IntValueTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/formula/counter/IntValueTest.java @@ -25,58 +25,58 @@ import static org.assertj.core.api.Assertions.assertThat; public class IntValueTest { @Test - public void newly_created_IntVariationValue_is_unset_and_has_value_0() { - verifyUnsetVariationValue(new IntValue()); + public void newly_created_IntValue_is_unset_and_has_value_0() { + verifyUnsetValue(new IntValue()); } @Test - public void increment_int_sets_IntVariationValue_and_increments_value() { - verifySetVariationValue(new IntValue().increment(10), 10); + public void increment_int_sets_IntValue_and_increments_value() { + verifySetValue(new IntValue().increment(10), 10); } @Test - public void increment_IntVariationValue_has_no_effect_if_arg_is_null() { - verifyUnsetVariationValue(new IntValue().increment(null)); + public void increment_IntValue_has_no_effect_if_arg_is_null() { + verifyUnsetValue(new IntValue().increment(null)); } @Test - public void increment_IntVariationValue_has_no_effect_if_arg_is_unset() { - verifyUnsetVariationValue(new IntValue().increment(new IntValue())); + public void increment_IntValue_has_no_effect_if_arg_is_unset() { + verifyUnsetValue(new IntValue().increment(new IntValue())); } @Test - public void increment_IntVariationValue_increments_by_the_value_of_the_arg() { + public void increment_IntValue_increments_by_the_value_of_the_arg() { IntValue source = new IntValue().increment(10); IntValue target = new IntValue().increment(source); - verifySetVariationValue(target, 10); + verifySetValue(target, 10); } @Test - public void multiple_calls_to_increment_IntVariationValue_increments_by_the_value_of_the_arg() { + public void multiple_calls_to_increment_IntValue_increments_by_the_value_of_the_arg() { IntValue target = new IntValue() .increment(new IntValue().increment(35)) .increment(new IntValue().increment(10)); - verifySetVariationValue(target, 45); + verifySetValue(target, 45); } @Test public void multiples_calls_to_increment_int_increment_the_value() { - IntValue variationValue = new IntValue() + IntValue value = new IntValue() .increment(10) .increment(95); - verifySetVariationValue(variationValue, 105); + verifySetValue(value, 105); } - private static void verifyUnsetVariationValue(IntValue variationValue) { - assertThat(variationValue.isSet()).isFalse(); - assertThat(variationValue.getValue()).isZero(); + private static void verifyUnsetValue(IntValue value) { + assertThat(value.isSet()).isFalse(); + assertThat(value.getValue()).isZero(); } - private static void verifySetVariationValue(IntValue variationValue, int expected) { - assertThat(variationValue.isSet()).isTrue(); - assertThat(variationValue.getValue()).isEqualTo(expected); + private static void verifySetValue(IntValue value, int expected) { + assertThat(value.isSet()).isTrue(); + assertThat(value.getValue()).isEqualTo(expected); } } diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/formula/counter/RatingValueTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/formula/counter/RatingValueTest.java index b57c3e2bfe6..d9d6a929dcf 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/formula/counter/RatingValueTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/formula/counter/RatingValueTest.java @@ -32,22 +32,22 @@ public class RatingValueTest { @Test public void newly_created_value_is_unset_and_has_value_0() { - verifyUnsetVariationValue(new RatingValue()); + verifyUnsetValue(new RatingValue()); } @Test public void increment_sets_value_and_increments_value() { - verifySetVariationValue(new RatingValue().increment(B), B); + verifySetValue(new RatingValue().increment(B), B); } @Test public void increment_has_no_effect_if_arg_is_null() { - verifyUnsetVariationValue(new RatingValue().increment((RatingValue) null)); + verifyUnsetValue(new RatingValue().increment((RatingValue) null)); } @Test public void increment_has_no_effect_if_arg_is_unset() { - verifyUnsetVariationValue(new RatingValue().increment(new RatingValue())); + verifyUnsetValue(new RatingValue().increment(new RatingValue())); } @Test @@ -55,7 +55,7 @@ public class RatingValueTest { RatingValue source = new RatingValue().increment(B); RatingValue target = new RatingValue().increment(source); - verifySetVariationValue(target, B); + verifySetValue(target, B); } @Test @@ -64,7 +64,7 @@ public class RatingValueTest { .increment(new RatingValue().increment(B)) .increment(new RatingValue().increment(D)); - verifySetVariationValue(target, D); + verifySetValue(target, D); } @Test @@ -73,17 +73,17 @@ public class RatingValueTest { .increment(B) .increment(C); - verifySetVariationValue(variationValue, C); + verifySetValue(variationValue, C); } - private static void verifyUnsetVariationValue(RatingValue variationValue) { - assertThat(variationValue.isSet()).isFalse(); - assertThat(variationValue.getValue()).isEqualTo(A); + private static void verifyUnsetValue(RatingValue ratingValue) { + assertThat(ratingValue.isSet()).isFalse(); + assertThat(ratingValue.getValue()).isEqualTo(A); } - private static void verifySetVariationValue(RatingValue variationValue, Rating expected) { - assertThat(variationValue.isSet()).isTrue(); - assertThat(variationValue.getValue()).isEqualTo(expected); + private static void verifySetValue(RatingValue ratingValue, Rating expected) { + assertThat(ratingValue.isSet()).isTrue(); + assertThat(ratingValue.getValue()).isEqualTo(expected); } } diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/formula/coverage/CoverageUtilsTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/formula/coverage/CoverageUtilsTest.java index 15631b50117..9af01ffcb7b 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/formula/coverage/CoverageUtilsTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/formula/coverage/CoverageUtilsTest.java @@ -34,7 +34,6 @@ import static com.google.common.base.Preconditions.checkState; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.sonar.ce.task.projectanalysis.formula.coverage.CoverageUtils.getLongMeasureValue; -import static org.sonar.ce.task.projectanalysis.formula.coverage.CoverageUtils.getMeasureVariations; import static org.sonar.ce.task.projectanalysis.measure.Measure.newMeasureBuilder; public class CoverageUtilsTest { @@ -86,25 +85,6 @@ public class CoverageUtilsTest { .hasMessage("value can not be converted to long because current value type is a DOUBLE"); } - @Test - public void getMeasureVariations_returns_0_in_all_MeasureVariations_if_there_is_no_measure() { - assertThat(getMeasureVariations(fileAggregateContext, SOME_METRIC_KEY)).isEqualTo(DEFAULT_VARIATION); - } - - @Test - public void getMeasureVariations_returns_0_in_all_MeasureVariations_if_there_is_measure_has_no_variations() { - fileAggregateContext.put(SOME_METRIC_KEY, newMeasureBuilder().createNoValue()); - - assertThat(getMeasureVariations(fileAggregateContext, SOME_METRIC_KEY)).isEqualTo(DEFAULT_VARIATION); - } - - @Test - public void getMeasureVariations_returns_MeasureVariations_of_measure_when_it_has_one() { - fileAggregateContext.put(SOME_METRIC_KEY, newMeasureBuilder().setVariation(5d).createNoValue()); - - assertThat(getMeasureVariations(fileAggregateContext, SOME_METRIC_KEY)).isEqualTo(5d); - } - private static class CounterInitializationContextRule extends ExternalResource implements CounterInitializationContext { private final Map<String, Measure> measures = new HashMap<>(); 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 77ccd9f620a..2646cfd3157 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 @@ -34,7 +34,6 @@ import org.sonar.ce.task.projectanalysis.component.TreeRootHolderRule; 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; import org.sonar.core.issue.DefaultIssue; import org.sonar.db.rule.RuleTesting; @@ -284,9 +283,9 @@ public class IssueCounterTest { underTest.beforeComponent(PROJECT); underTest.afterComponent(PROJECT); - assertVariations(FILE1, entry(NEW_VIOLATIONS_KEY, 2), entry(NEW_CRITICAL_VIOLATIONS_KEY, 2), entry(NEW_BLOCKER_VIOLATIONS_KEY, 0), entry(NEW_MAJOR_VIOLATIONS_KEY, 0), + assertValues(FILE1, entry(NEW_VIOLATIONS_KEY, 2), entry(NEW_CRITICAL_VIOLATIONS_KEY, 2), entry(NEW_BLOCKER_VIOLATIONS_KEY, 0), entry(NEW_MAJOR_VIOLATIONS_KEY, 0), entry(NEW_CODE_SMELLS_KEY, 1), entry(NEW_BUGS_KEY, 1), entry(NEW_VULNERABILITIES_KEY, 0), entry(NEW_SECURITY_HOTSPOTS_KEY, 1)); - assertVariations(PROJECT, entry(NEW_VIOLATIONS_KEY, 2), entry(NEW_CRITICAL_VIOLATIONS_KEY, 2), entry(NEW_BLOCKER_VIOLATIONS_KEY, 0), entry(NEW_MAJOR_VIOLATIONS_KEY, 0), + assertValues(PROJECT, entry(NEW_VIOLATIONS_KEY, 2), entry(NEW_CRITICAL_VIOLATIONS_KEY, 2), entry(NEW_BLOCKER_VIOLATIONS_KEY, 0), entry(NEW_MAJOR_VIOLATIONS_KEY, 0), entry(NEW_CODE_SMELLS_KEY, 1), entry(NEW_BUGS_KEY, 1), entry(NEW_VULNERABILITIES_KEY, 0), entry(NEW_SECURITY_HOTSPOTS_KEY, 1)); } @@ -339,18 +338,17 @@ public class IssueCounterTest { underTest.beforeComponent(PROJECT); underTest.afterComponent(PROJECT); - assertVariations(FILE1, entry(NEW_VIOLATIONS_KEY, 0), entry(NEW_CRITICAL_VIOLATIONS_KEY, 0), entry(NEW_BLOCKER_VIOLATIONS_KEY, 0), entry(NEW_MAJOR_VIOLATIONS_KEY, 0), + assertValues(FILE1, entry(NEW_VIOLATIONS_KEY, 0), entry(NEW_CRITICAL_VIOLATIONS_KEY, 0), entry(NEW_BLOCKER_VIOLATIONS_KEY, 0), entry(NEW_MAJOR_VIOLATIONS_KEY, 0), entry(NEW_VULNERABILITIES_KEY, 0)); - assertVariations(PROJECT, entry(NEW_VIOLATIONS_KEY, 0), entry(NEW_CRITICAL_VIOLATIONS_KEY, 0), entry(NEW_BLOCKER_VIOLATIONS_KEY, 0), entry(NEW_MAJOR_VIOLATIONS_KEY, 0), + assertValues(PROJECT, entry(NEW_VIOLATIONS_KEY, 0), entry(NEW_CRITICAL_VIOLATIONS_KEY, 0), entry(NEW_BLOCKER_VIOLATIONS_KEY, 0), entry(NEW_MAJOR_VIOLATIONS_KEY, 0), entry(NEW_VULNERABILITIES_KEY, 0)); } @SafeVarargs - private final void assertVariations(Component componentRef, MapEntry<String, Integer>... entries) { + private final void assertValues(Component componentRef, MapEntry<String, Integer>... entries) { assertThat(measureRepository.getRawMeasures(componentRef).entrySet() .stream() - .filter(e -> e.getValue().hasVariation()) - .map(e -> entry(e.getKey(), (int) e.getValue().getVariation()))) + .map(e -> entry(e.getKey(), e.getValue().getIntValue()))) .contains(entries); } @@ -392,9 +390,4 @@ public class IssueCounterTest { private DefaultIssue createNewSecurityHotspot() { return createNewIssue(null, STATUS_OPEN, "MAJOR", RuleType.SECURITY_HOTSPOT); } - - private static Period newPeriod(long date) { - return new Period("mode", null, date); - } - } diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/NewEffortAggregatorTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/NewEffortAggregatorTest.java index 9e94cf41e28..3aeb72fda96 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/NewEffortAggregatorTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/NewEffortAggregatorTest.java @@ -85,7 +85,7 @@ public class NewEffortAggregatorTest { underTest.onIssue(FILE, resolved); underTest.afterComponent(FILE); - assertVariation(FILE, NEW_TECHNICAL_DEBT_KEY, 10 + 30); + assertValue(FILE, NEW_TECHNICAL_DEBT_KEY, 10 + 30); } @Test @@ -110,7 +110,7 @@ public class NewEffortAggregatorTest { underTest.afterComponent(FILE); // Only effort of CODE SMELL issue is used - assertVariation(FILE, NEW_TECHNICAL_DEBT_KEY, 10); + assertValue(FILE, NEW_TECHNICAL_DEBT_KEY, 10); } @Test @@ -134,7 +134,7 @@ public class NewEffortAggregatorTest { underTest.onIssue(FILE, resolved); underTest.afterComponent(FILE); - assertVariation(FILE, NEW_RELIABILITY_REMEDIATION_EFFORT_KEY, 10 + 30); + assertValue(FILE, NEW_RELIABILITY_REMEDIATION_EFFORT_KEY, 10 + 30); } @Test @@ -159,7 +159,7 @@ public class NewEffortAggregatorTest { underTest.afterComponent(FILE); // Only effort of BUG issue is used - assertVariation(FILE, NEW_RELIABILITY_REMEDIATION_EFFORT_KEY, 15); + assertValue(FILE, NEW_RELIABILITY_REMEDIATION_EFFORT_KEY, 15); } @Test @@ -183,7 +183,7 @@ public class NewEffortAggregatorTest { underTest.onIssue(FILE, oldResolved); underTest.afterComponent(FILE); - assertVariation(FILE, NEW_SECURITY_REMEDIATION_EFFORT_KEY, 10 + 30); + assertValue(FILE, NEW_SECURITY_REMEDIATION_EFFORT_KEY, 10 + 30); } @Test @@ -208,7 +208,7 @@ public class NewEffortAggregatorTest { underTest.afterComponent(FILE); // Only effort of VULNERABILITY issue is used - assertVariation(FILE, NEW_SECURITY_REMEDIATION_EFFORT_KEY, 12); + assertValue(FILE, NEW_SECURITY_REMEDIATION_EFFORT_KEY, 12); } @Test @@ -247,9 +247,9 @@ public class NewEffortAggregatorTest { underTest.onIssue(PROJECT, oldVulnerabilityProjectIssue); underTest.afterComponent(PROJECT); - assertVariation(PROJECT, NEW_TECHNICAL_DEBT_KEY, 10 + 30); - assertVariation(PROJECT, NEW_RELIABILITY_REMEDIATION_EFFORT_KEY, 8 + 28); - assertVariation(PROJECT, NEW_SECURITY_REMEDIATION_EFFORT_KEY, 12 + 32); + assertValue(PROJECT, NEW_TECHNICAL_DEBT_KEY, 10 + 30); + assertValue(PROJECT, NEW_RELIABILITY_REMEDIATION_EFFORT_KEY, 8 + 28); + assertValue(PROJECT, NEW_SECURITY_REMEDIATION_EFFORT_KEY, 12 + 32); } @Test @@ -275,15 +275,14 @@ public class NewEffortAggregatorTest { underTest.beforeComponent(FILE); underTest.afterComponent(FILE); - assertVariation(FILE, NEW_TECHNICAL_DEBT_KEY, 0); - assertVariation(FILE, NEW_RELIABILITY_REMEDIATION_EFFORT_KEY, 0); - assertVariation(FILE, NEW_SECURITY_REMEDIATION_EFFORT_KEY, 0); + assertValue(FILE, NEW_TECHNICAL_DEBT_KEY, 0); + assertValue(FILE, NEW_RELIABILITY_REMEDIATION_EFFORT_KEY, 0); + assertValue(FILE, NEW_SECURITY_REMEDIATION_EFFORT_KEY, 0); } - private void assertVariation(Component component, String metricKey, int variation) { + private void assertValue(Component component, String metricKey, int value) { Measure newMeasure = measureRepository.getRawMeasure(component, metricRepository.getByKey(metricKey)).get(); - assertThat(newMeasure.getVariation()).isEqualTo(variation); - assertThat(newMeasure.getValueType()).isEqualTo(Measure.ValueType.NO_VALUE); + assertThat(newMeasure.getLongValue()).isEqualTo(value); } private DefaultIssue newCodeSmellIssue(long effort) { diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/BestValueOptimizationTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/BestValueOptimizationTest.java index affc1e194d3..f0b8d25cbd8 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/BestValueOptimizationTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/BestValueOptimizationTest.java @@ -38,28 +38,13 @@ public class BestValueOptimizationTest { private static final String SOME_DATA = "some_data"; private static final MetricImpl METRIC_BOOLEAN_FALSE = createMetric(Metric.MetricType.BOOL, 6d); private static final MetricImpl METRIC_BOOLEAN_TRUE = createMetric(Metric.MetricType.BOOL, 1d); - private static final double SOME_EMPTY_VARIATIONS = 0d; - - private static Measure.NewMeasureBuilder[] builders_of_non_bestValueOptimized_measures() { - QualityGateStatus someQualityGateStatus = new QualityGateStatus(Measure.Level.ERROR, null); - double someVariations = 2d; - return new Measure.NewMeasureBuilder[] { - newMeasureBuilder().setQualityGateStatus(someQualityGateStatus), - newMeasureBuilder().setQualityGateStatus(someQualityGateStatus).setVariation(someVariations), - newMeasureBuilder().setVariation(someVariations), - newMeasureBuilder().setQualityGateStatus(someQualityGateStatus), - newMeasureBuilder().setQualityGateStatus(someQualityGateStatus).setVariation(someVariations), - }; - } @Test public void apply_returns_true_for_value_true_for_Boolean_Metric_and_best_value_1() { Predicate<Measure> underTest = BestValueOptimization.from(METRIC_BOOLEAN_TRUE, FILE_COMPONENT); assertThat(underTest.test(newMeasureBuilder().create(true))).isTrue(); - assertThat(underTest.test(newMeasureBuilder().setVariation(SOME_EMPTY_VARIATIONS).create(true))).isTrue(); assertThat(underTest.test(newMeasureBuilder().create(false))).isFalse(); - assertThat(underTest.test(newMeasureBuilder().setVariation(SOME_EMPTY_VARIATIONS).create(false))).isFalse(); } @Test @@ -74,10 +59,9 @@ public class BestValueOptimizationTest { public void apply_returns_false_if_measure_has_anything_else_than_value_for_Boolean_Metric_and_best_value_1() { Predicate<Measure> underTest = BestValueOptimization.from(METRIC_BOOLEAN_TRUE, FILE_COMPONENT); - for (Measure.NewMeasureBuilder builder : builders_of_non_bestValueOptimized_measures()) { - assertThat(underTest.test(builder.create(true))).isFalse(); - assertThat(underTest.test(builder.create(false))).isFalse(); - } + Measure.NewMeasureBuilder builder = newMeasureBuilder().setQualityGateStatus(new QualityGateStatus(Measure.Level.ERROR, null)); + assertThat(underTest.test(builder.create(true))).isFalse(); + assertThat(underTest.test(builder.create(false))).isFalse(); } @Test @@ -94,7 +78,6 @@ public class BestValueOptimizationTest { assertThat(underTest.test(newMeasureBuilder().create(true))).isFalse(); assertThat(underTest.test(newMeasureBuilder().create(false))).isTrue(); - assertThat(underTest.test(newMeasureBuilder().setVariation(SOME_EMPTY_VARIATIONS).create(false))).isTrue(); } @Test @@ -109,10 +92,9 @@ public class BestValueOptimizationTest { public void apply_returns_false_if_measure_has_anything_else_than_value_for_Boolean_Metric_and_best_value_not_1() { Predicate<Measure> underTest = BestValueOptimization.from(METRIC_BOOLEAN_FALSE, FILE_COMPONENT); - for (Measure.NewMeasureBuilder builder : builders_of_non_bestValueOptimized_measures()) { - assertThat(underTest.test(builder.create(true))).isFalse(); - assertThat(underTest.test(builder.create(false))).isFalse(); - } + Measure.NewMeasureBuilder builder = newMeasureBuilder().setQualityGateStatus(new QualityGateStatus(Measure.Level.ERROR, null)); + assertThat(underTest.test(builder.create(true))).isFalse(); + assertThat(underTest.test(builder.create(false))).isFalse(); } @Test @@ -128,7 +110,6 @@ public class BestValueOptimizationTest { Predicate<Measure> underTest = BestValueOptimization.from(createMetric(Metric.MetricType.INT, 10), FILE_COMPONENT); assertThat(underTest.test(newMeasureBuilder().create(10))).isTrue(); - assertThat(underTest.test(newMeasureBuilder().setVariation(SOME_EMPTY_VARIATIONS).create(10))).isTrue(); assertThat(underTest.test(newMeasureBuilder().create(11))).isFalse(); } @@ -137,7 +118,6 @@ public class BestValueOptimizationTest { Predicate<Measure> underTest = BestValueOptimization.from(createMetric(Metric.MetricType.WORK_DUR, 9511L), FILE_COMPONENT); assertThat(underTest.test(newMeasureBuilder().create(9511L))).isTrue(); - assertThat(underTest.test(newMeasureBuilder().setVariation(SOME_EMPTY_VARIATIONS).create(9511L))).isTrue(); assertThat(underTest.test(newMeasureBuilder().create(963L))).isFalse(); } @@ -146,9 +126,7 @@ public class BestValueOptimizationTest { Predicate<Measure> underTest = BestValueOptimization.from(createMetric(Metric.MetricType.RATING, A.getIndex()), FILE_COMPONENT); assertThat(underTest.test(newMeasureBuilder().create(A.getIndex()))).isTrue(); - assertThat(underTest.test(newMeasureBuilder().setVariation(A.getIndex()).createNoValue())).isTrue(); assertThat(underTest.test(newMeasureBuilder().create(B.getIndex()))).isFalse(); - assertThat(underTest.test(newMeasureBuilder().setVariation(B.getIndex()).createNoValue())).isFalse(); } @Test @@ -156,7 +134,6 @@ public class BestValueOptimizationTest { Predicate<Measure> underTest = BestValueOptimization.from(createMetric(Metric.MetricType.FLOAT, 36.5d), FILE_COMPONENT); assertThat(underTest.test(newMeasureBuilder().create(36.5d, 1))).isTrue(); - assertThat(underTest.test(newMeasureBuilder().setVariation(SOME_EMPTY_VARIATIONS).create(36.5d, 1))).isTrue(); assertThat(underTest.test(newMeasureBuilder().create(36.6d, 1))).isFalse(); } diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/LiveMeasureDtoToMeasureTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/LiveMeasureDtoToMeasureTest.java index 1026bb9a684..9786ed4fc3c 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/LiveMeasureDtoToMeasureTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/LiveMeasureDtoToMeasureTest.java @@ -19,9 +19,7 @@ */ package org.sonar.ce.task.projectanalysis.measure; -import com.tngtech.java.junit.dataprovider.DataProvider; import com.tngtech.java.junit.dataprovider.DataProviderRunner; -import com.tngtech.java.junit.dataprovider.UseDataProvider; import java.util.Optional; import org.assertj.core.data.Offset; import org.junit.Test; @@ -42,12 +40,8 @@ public class LiveMeasureDtoToMeasureTest { private static final Metric SOME_STRING_METRIC = new MetricImpl("42", "string", "name", Metric.MetricType.STRING); private static final Metric SOME_BOOLEAN_METRIC = new MetricImpl("42", "boolean", "name", Metric.MetricType.BOOL); private static final Metric SOME_LEVEL_METRIC = new MetricImpl("42", "level", "name", Metric.MetricType.LEVEL); - - private static final String SOME_DATA = "some_data man!"; - private static final String SOME_ALERT_TEXT = "some alert text_be_careFul!"; private static final LiveMeasureDto EMPTY_MEASURE_DTO = new LiveMeasureDto(); - private LiveMeasureDtoToMeasure underTest = new LiveMeasureDtoToMeasure(); @Test @@ -190,41 +184,6 @@ public class LiveMeasureDtoToMeasureTest { assertThat(measure.get().getValueType()).isEqualTo(Measure.ValueType.NO_VALUE); } - @DataProvider - public static Object[][] all_types_LiveMeasureDtos() { - return new Object[][] { - {new LiveMeasureDto().setValue(1d), SOME_BOOLEAN_METRIC}, - {new LiveMeasureDto().setValue(1d), SOME_INT_METRIC}, - {new LiveMeasureDto().setValue(1d), SOME_LONG_METRIC}, - {new LiveMeasureDto().setValue(1d), SOME_DOUBLE_METRIC}, - {new LiveMeasureDto().setData("1"), SOME_STRING_METRIC}, - {new LiveMeasureDto().setData(Level.OK.name()), SOME_LEVEL_METRIC} - }; - } - - @Test - @UseDataProvider("all_types_LiveMeasureDtos") - public void toMeasure_creates_no_MeasureVariation_if_dto_has_none_whichever_the_ValueType(LiveMeasureDto LiveMeasureDto, Metric metric) { - assertThat(underTest.toMeasure(LiveMeasureDto, metric).get().hasVariation()).isFalse(); - } - - @Test - @UseDataProvider("all_types_LiveMeasureDtos") - public void toMeasure_creates_MeasureVariation_and_maps_the_right_one(LiveMeasureDto builder, Metric metric) { - assertThat(underTest.toMeasure(builder.setVariation(1d), metric).get().getVariation()).isOne(); - } - - @Test - public void toMeasure_creates_MeasureVariation_and_maps_the_right_one() { - LiveMeasureDto LiveMeasureDto = new LiveMeasureDto() - .setData("1") - .setVariation(2d); - - Optional<Measure> measure = underTest.toMeasure(LiveMeasureDto, SOME_STRING_METRIC); - - assertThat(measure.get().getVariation()).isEqualTo(2); - } - @Test public void toMeasure_should_not_loose_decimals_of_float_values() { MetricImpl metric = new MetricImpl("42", "double", "name", Metric.MetricType.FLOAT, 5, null, false, false); diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/MeasureDtoToMeasureTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/MeasureDtoToMeasureTest.java index 29156db000c..810eecc2312 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/MeasureDtoToMeasureTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/MeasureDtoToMeasureTest.java @@ -298,29 +298,6 @@ public class MeasureDtoToMeasureTest { } @Test - @UseDataProvider("all_types_MeasureDtos") - public void toMeasure_creates_no_MeasureVariation_if_dto_has_none_whichever_the_ValueType(MeasureDto measureDto, Metric metric) { - assertThat(underTest.toMeasure(measureDto, metric).get().hasVariation()).isFalse(); - } - - @Test - @UseDataProvider("all_types_MeasureDtos") - public void toMeasure_creates_MeasureVariation_and_maps_the_right_one(MeasureDto builder, Metric metric) { - assertThat(underTest.toMeasure(builder.setVariation(1d), metric).get().getVariation()).isOne(); - } - - @Test - public void toMeasure_creates_MeasureVariation_and_maps_the_right_one() { - MeasureDto measureDto = new MeasureDto() - .setData("1") - .setVariation(2d); - - Optional<Measure> measure = underTest.toMeasure(measureDto, SOME_STRING_METRIC); - - assertThat(measure.get().getVariation()).isEqualTo(2); - } - - @Test public void toMeasure_should_not_loose_decimals_of_float_values() { MetricImpl metric = new MetricImpl("42", "double", "name", Metric.MetricType.FLOAT, 5, null, false, false); MeasureDto measureDto = new MeasureDto() diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/MeasureTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/MeasureTest.java index cfb2b5f308e..9131d5122cd 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/MeasureTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/MeasureTest.java @@ -252,19 +252,12 @@ public class MeasureTest { } @Test - public void updateMeasureBuilder_setVariations_throws_USO_if_measure_already_has_Variations() { - assertThatThrownBy(() -> Measure.updatedMeasureBuilder(newMeasureBuilder().setVariation(1d).createNoValue()).setVariation(2d)) - .isInstanceOf(UnsupportedOperationException.class); - } - - @Test @UseDataProvider("all") public void updateMeasureBuilder_creates_Measure_with_same_immutable_properties(Measure measure) { Measure newMeasure = Measure.updatedMeasureBuilder(measure).create(); assertThat(newMeasure.getValueType()).isEqualTo(measure.getValueType()); assertThat(newMeasure.hasQualityGateStatus()).isEqualTo(measure.hasQualityGateStatus()); - assertThat(newMeasure.hasVariation()).isEqualTo(measure.hasVariation()); } @Test diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/MeasureToMeasureDtoTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/MeasureToMeasureDtoTest.java index 0a9158cb922..ca73796327a 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/MeasureToMeasureDtoTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/MeasureToMeasureDtoTest.java @@ -43,7 +43,6 @@ public class MeasureToMeasureDtoTest { private static final MetricImpl SOME_METRIC = new MetricImpl("42", "metric_key", "metric_name", Metric.MetricType.STRING); private static final String SOME_DATA = "some_data"; private static final String SOME_STRING = "some_string"; - private static final double SOME_VARIATIONS = 1d; private static final MetricImpl SOME_BOOLEAN_METRIC = new MetricImpl("1", "1", "1", Metric.MetricType.BOOL); private static final MetricImpl SOME_INT_METRIC = new MetricImpl("2", "2", "2", Metric.MetricType.INT); private static final MetricImpl SOME_LONG_METRIC = new MetricImpl("3", "3", "3", Metric.MetricType.DISTRIB); @@ -92,21 +91,6 @@ public class MeasureToMeasureDtoTest { @Test @UseDataProvider("all_types_Measures") - public void toMeasureDto_returns_Dto_without_any_variation_if_Measure_has_no_MeasureVariations(Measure measure, Metric metric) { - MeasureDto measureDto = underTest.toMeasureDto(measure, metric, SOME_COMPONENT); - - assertThat(measureDto.getVariation()).isNull(); - } - - @Test - public void toMeasureDto_returns_Dto_with_variation_if_Measure_has_MeasureVariations() { - MeasureDto measureDto = underTest.toMeasureDto(Measure.newMeasureBuilder().setVariation(SOME_VARIATIONS).create(SOME_STRING), SOME_STRING_METRIC, SOME_COMPONENT); - - assertThat(measureDto.getVariation()).isEqualTo(1d); - } - - @Test - @UseDataProvider("all_types_Measures") public void toMeasureDto_returns_Dto_without_alertStatus_nor_alertText_if_Measure_has_no_QualityGateStatus(Measure measure, Metric metric) { MeasureDto measureDto = underTest.toMeasureDto(measure, metric, SOME_COMPONENT); diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitygate/ConditionEvaluatorTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitygate/ConditionEvaluatorTest.java index 1438d697713..853a5c3d5b6 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitygate/ConditionEvaluatorTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitygate/ConditionEvaluatorTest.java @@ -35,16 +35,15 @@ import static com.google.common.collect.FluentIterable.from; import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.Assert.fail; -import static org.sonar.ce.task.projectanalysis.measure.Measure.newMeasureBuilder; import static org.sonar.ce.task.projectanalysis.measure.Measure.Level.ERROR; import static org.sonar.ce.task.projectanalysis.measure.Measure.Level.OK; +import static org.sonar.ce.task.projectanalysis.measure.Measure.newMeasureBuilder; import static org.sonar.ce.task.projectanalysis.metric.Metric.MetricType; import static org.sonar.ce.task.projectanalysis.metric.Metric.MetricType.BOOL; import static org.sonar.ce.task.projectanalysis.metric.Metric.MetricType.DATA; import static org.sonar.ce.task.projectanalysis.metric.Metric.MetricType.DISTRIB; import static org.sonar.ce.task.projectanalysis.metric.Metric.MetricType.FLOAT; import static org.sonar.ce.task.projectanalysis.metric.Metric.MetricType.INT; -import static org.sonar.ce.task.projectanalysis.metric.Metric.MetricType.LEVEL; import static org.sonar.ce.task.projectanalysis.metric.Metric.MetricType.PERCENT; import static org.sonar.ce.task.projectanalysis.metric.Metric.MetricType.RATING; import static org.sonar.ce.task.projectanalysis.metric.Metric.MetricType.STRING; @@ -159,44 +158,6 @@ public class ConditionEvaluatorTest { } @Test - @UseDataProvider("numericNewMetricTypes") - public void test_condition_on_numeric_new_metric(MetricType metricType) { - Metric metric = createNewMetric(metricType); - Measure measure = newMeasureBuilder().setVariation(3d).createNoValue(); - - assertThat(underTest.evaluate(new Condition(metric, GREATER_THAN.getDbValue(), "3"), measure)).hasLevel(OK); - assertThat(underTest.evaluate(new Condition(metric, GREATER_THAN.getDbValue(), "2"), measure)).hasLevel(ERROR); - } - - @Test - @UseDataProvider("numericNewMetricTypes") - public void condition_on_new_metric_without_value_is_OK(MetricType metricType) { - Metric metric = createNewMetric(metricType); - Measure measure = newMeasureBuilder().createNoValue(); - - assertThat(underTest.evaluate(new Condition(metric, GREATER_THAN.getDbValue(), "3"), measure)).hasLevel(OK).hasValue(null); - } - - @DataProvider - public static Object[][] numericNewMetricTypes() { - return new Object[][] { - {FLOAT}, - {INT}, - {WORK_DUR}, - }; - } - - @Test - public void fail_when_condition_on_leak_period_is_using_unsupported_metric() { - Metric metric = createNewMetric(LEVEL); - Measure measure = newMeasureBuilder().setVariation(0d).createNoValue(); - - assertThatThrownBy(() -> underTest.evaluate(new Condition(metric, LESS_THAN.getDbValue(), "3"), measure)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("Unsupported metric type LEVEL"); - } - - @Test public void test_condition_on_rating() { Metric metric = createMetric(RATING); Measure measure = newMeasureBuilder().create(4, "D"); @@ -212,8 +173,4 @@ public class ConditionEvaluatorTest { private static MetricImpl createMetric(MetricType metricType) { return new MetricImpl("1", "key", "name", metricType); } - - private static MetricImpl createNewMetric(MetricType metricType) { - return new MetricImpl("1", "new_key", "name", metricType); - } } diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitymodel/NewMaintainabilityMeasuresVisitorTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitymodel/NewMaintainabilityMeasuresVisitorTest.java index bd54b6c5353..75a5d5f26b7 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitymodel/NewMaintainabilityMeasuresVisitorTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitymodel/NewMaintainabilityMeasuresVisitorTest.java @@ -64,7 +64,7 @@ import static org.sonar.ce.task.projectanalysis.measure.MeasureAssert.assertThat import static org.sonar.server.measure.Rating.A; import static org.sonar.server.measure.Rating.D; -public class NewMaintainabilityMeasuresVisitorTest { +public class NewMaintainabilityMeasuresVisitorTest { private static final double[] RATING_GRID = new double[] {0.1, 0.2, 0.5, 1}; @@ -72,7 +72,7 @@ public class NewMaintainabilityMeasuresVisitorTest { private static final long LANGUAGE_1_DEV_COST = 30L; private static final int ROOT_REF = 1; private static final int LANGUAGE_1_FILE_REF = 11111; - private static final Offset<Double> VARIATION_COMPARISON_OFFSET = Offset.offset(0.01); + private static final Offset<Double> VALUE_COMPARISON_OFFSET = Offset.offset(0.01); @Rule public TreeRootHolderRule treeRootHolder = new TreeRootHolderRule(); @@ -422,8 +422,8 @@ public class NewMaintainabilityMeasuresVisitorTest { return ReportComponent.builder(type, ref).setKey(String.valueOf(ref)); } - private Measure createNewDebtMeasure(double variation) { - return newMeasureBuilder().setVariation(variation).createNoValue(); + private Measure createNewDebtMeasure(long value) { + return newMeasureBuilder().create(value); } private static Measure createNclocDataMeasure(Integer... nclocLines) { @@ -449,16 +449,16 @@ public class NewMaintainabilityMeasuresVisitorTest { .isAbsent(); } - private void assertNewDebtRatioValues(int componentRef, double expectedVariation) { - assertThat(measureRepository.getAddedRawMeasure(componentRef, NEW_SQALE_DEBT_RATIO_KEY)).hasVariation(expectedVariation, VARIATION_COMPARISON_OFFSET); + private void assertNewDebtRatioValues(int componentRef, double expectedValue) { + assertThat(measureRepository.getAddedRawMeasure(componentRef, NEW_SQALE_DEBT_RATIO_KEY)).hasValue(expectedValue, VALUE_COMPARISON_OFFSET); } - private void assertNewDevelopmentCostValues(int componentRef, long expectedVariation) { - assertThat(measureRepository.getAddedRawMeasure(componentRef, NEW_DEVELOPMENT_COST_KEY)).hasVariation(expectedVariation, VARIATION_COMPARISON_OFFSET); + private void assertNewDevelopmentCostValues(int componentRef, float expectedValue) { + assertThat(measureRepository.getAddedRawMeasure(componentRef, NEW_DEVELOPMENT_COST_KEY)).hasValue(expectedValue, VALUE_COMPARISON_OFFSET); } - private void assertNewMaintainability(int componentRef, Rating expectedVariation) { - assertThat(measureRepository.getAddedRawMeasure(componentRef, NEW_MAINTAINABILITY_RATING_KEY)).hasVariation(expectedVariation.getIndex()); + private void assertNewMaintainability(int componentRef, Rating expectedValue) { + assertThat(measureRepository.getAddedRawMeasure(componentRef, NEW_MAINTAINABILITY_RATING_KEY)).hasValue(expectedValue.getIndex()); } private void assertNoNewMaintainability(int componentRef) { diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitymodel/NewReliabilityAndSecurityRatingMeasuresVisitorTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitymodel/NewReliabilityAndSecurityRatingMeasuresVisitorTest.java index ced065021fc..259d5377aed 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitymodel/NewReliabilityAndSecurityRatingMeasuresVisitorTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitymodel/NewReliabilityAndSecurityRatingMeasuresVisitorTest.java @@ -322,8 +322,7 @@ public class NewReliabilityAndSecurityRatingMeasuresVisitorTest { } private void verifyAddedRawMeasureOnLeakPeriod(int componentRef, String metricKey, Rating rating) { - MeasureAssert.assertThat(measureRepository.getAddedRawMeasure(componentRef, metricKey)) - .hasVariation(rating.getIndex()); + MeasureAssert.assertThat(measureRepository.getAddedRawMeasure(componentRef, metricKey)).hasValue(rating.getIndex()); } private DefaultIssue newBugIssue(long effort, String severity) { diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitymodel/NewSecurityReviewMeasuresVisitorTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitymodel/NewSecurityReviewMeasuresVisitorTest.java index 292e73edd61..174e056486a 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitymodel/NewSecurityReviewMeasuresVisitorTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualitymodel/NewSecurityReviewMeasuresVisitorTest.java @@ -70,7 +70,7 @@ import static org.sonar.server.measure.Rating.D; import static org.sonar.server.measure.Rating.E; public class NewSecurityReviewMeasuresVisitorTest { - private static final Offset<Double> VARIATION_COMPARISON_OFFSET = Offset.offset(0.01); + private static final Offset<Double> VALUE_COMPARISON_OFFSET = Offset.offset(0.01); private static final String LANGUAGE_KEY_1 = "lKey1"; private static final int PROJECT_REF = 1; @@ -341,10 +341,10 @@ public class NewSecurityReviewMeasuresVisitorTest { } private void verifyRatingAndReviewedMeasures(int componentRef, Rating expectedReviewRating, @Nullable Double expectedHotspotsReviewed) { - assertThat(measureRepository.getAddedRawMeasure(componentRef, NEW_SECURITY_REVIEW_RATING_KEY)).hasVariation(expectedReviewRating.getIndex()); + assertThat(measureRepository.getAddedRawMeasure(componentRef, NEW_SECURITY_REVIEW_RATING_KEY)).hasValue(expectedReviewRating.getIndex()); if (expectedHotspotsReviewed != null) { - assertThat(measureRepository.getAddedRawMeasure(componentRef, NEW_SECURITY_HOTSPOTS_REVIEWED_KEY)).hasVariation(expectedHotspotsReviewed, - VARIATION_COMPARISON_OFFSET); + assertThat(measureRepository.getAddedRawMeasure(componentRef, NEW_SECURITY_HOTSPOTS_REVIEWED_KEY)).hasValue(expectedHotspotsReviewed, + VALUE_COMPARISON_OFFSET); } else { assertThat(measureRepository.getAddedRawMeasure(componentRef, NEW_SECURITY_HOTSPOTS_REVIEWED_KEY)).isAbsent(); } @@ -354,12 +354,12 @@ public class NewSecurityReviewMeasuresVisitorTest { if (hotspotsReviewed == null) { Assertions.assertThat(measureRepository.getAddedRawMeasure(componentRef, NEW_SECURITY_HOTSPOTS_REVIEWED_STATUS_KEY)).isEmpty(); } else { - assertThat(measureRepository.getAddedRawMeasure(componentRef, NEW_SECURITY_HOTSPOTS_REVIEWED_STATUS_KEY)).hasVariation(hotspotsReviewed); + assertThat(measureRepository.getAddedRawMeasure(componentRef, NEW_SECURITY_HOTSPOTS_REVIEWED_STATUS_KEY)).hasValue(hotspotsReviewed); } if (hotspotsReviewed == null) { Assertions.assertThat(measureRepository.getAddedRawMeasure(componentRef, NEW_SECURITY_HOTSPOTS_TO_REVIEW_STATUS_KEY)).isEmpty(); } else { - assertThat(measureRepository.getAddedRawMeasure(componentRef, NEW_SECURITY_HOTSPOTS_TO_REVIEW_STATUS_KEY)).hasVariation(hotspotsToReview); + assertThat(measureRepository.getAddedRawMeasure(componentRef, NEW_SECURITY_HOTSPOTS_TO_REVIEW_STATUS_KEY)).hasValue(hotspotsToReview); } } diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/NewCoverageMeasuresStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/NewCoverageMeasuresStepTest.java index e2f16909b0c..f0599de2bfa 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/NewCoverageMeasuresStepTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/NewCoverageMeasuresStepTest.java @@ -179,10 +179,10 @@ public class NewCoverageMeasuresStepTest { underTest.execute(new TestComputationStepContext()); assertThat(toEntries(measureRepository.getAddedRawMeasures(FILE_COMPONENT.getReportAttributes().getRef()))).contains( - entryOf(NEW_LINES_TO_COVER_KEY, createMeasure(2d)), - entryOf(NEW_UNCOVERED_LINES_KEY, createMeasure(1d)), - entryOf(NEW_CONDITIONS_TO_COVER_KEY, createMeasure(0d)), - entryOf(NEW_UNCOVERED_CONDITIONS_KEY, createMeasure(0d))); + entryOf(NEW_LINES_TO_COVER_KEY, createMeasure(2)), + entryOf(NEW_UNCOVERED_LINES_KEY, createMeasure(1)), + entryOf(NEW_CONDITIONS_TO_COVER_KEY, createMeasure(0)), + entryOf(NEW_UNCOVERED_CONDITIONS_KEY, createMeasure(0))); } @Test @@ -204,36 +204,36 @@ public class NewCoverageMeasuresStepTest { // files assertThat(toEntries(measureRepository.getAddedRawMeasures(FILE_1_REF))).contains( - entryOf(NEW_LINES_TO_COVER_KEY, createMeasure(5d)), - entryOf(NEW_UNCOVERED_LINES_KEY, createMeasure(3d)), - entryOf(NEW_CONDITIONS_TO_COVER_KEY, createMeasure(7d)), - entryOf(NEW_UNCOVERED_CONDITIONS_KEY, createMeasure(4d))); + entryOf(NEW_LINES_TO_COVER_KEY, createMeasure(5)), + entryOf(NEW_UNCOVERED_LINES_KEY, createMeasure(3)), + entryOf(NEW_CONDITIONS_TO_COVER_KEY, createMeasure(7)), + entryOf(NEW_UNCOVERED_CONDITIONS_KEY, createMeasure(4))); assertThat(toEntries(measureRepository.getAddedRawMeasures(FILE_2_REF))).contains( - entryOf(NEW_LINES_TO_COVER_KEY, createMeasure(5d)), - entryOf(NEW_UNCOVERED_LINES_KEY, createMeasure(4d)), - entryOf(NEW_CONDITIONS_TO_COVER_KEY, createMeasure(27d)), - entryOf(NEW_UNCOVERED_CONDITIONS_KEY, createMeasure(14d))); + entryOf(NEW_LINES_TO_COVER_KEY, createMeasure(5)), + entryOf(NEW_UNCOVERED_LINES_KEY, createMeasure(4)), + entryOf(NEW_CONDITIONS_TO_COVER_KEY, createMeasure(27)), + entryOf(NEW_UNCOVERED_CONDITIONS_KEY, createMeasure(14))); assertThat(toEntries(measureRepository.getAddedRawMeasures(FILE_3_REF))).contains( - entryOf(NEW_LINES_TO_COVER_KEY, createMeasure(5d)), - entryOf(NEW_UNCOVERED_LINES_KEY, createMeasure(2d)), - entryOf(NEW_CONDITIONS_TO_COVER_KEY, createMeasure(17d)), - entryOf(NEW_UNCOVERED_CONDITIONS_KEY, createMeasure(9d))); + entryOf(NEW_LINES_TO_COVER_KEY, createMeasure(5)), + entryOf(NEW_UNCOVERED_LINES_KEY, createMeasure(2)), + entryOf(NEW_CONDITIONS_TO_COVER_KEY, createMeasure(17)), + entryOf(NEW_UNCOVERED_CONDITIONS_KEY, createMeasure(9))); // directories assertThat(toEntries(measureRepository.getAddedRawMeasures(DIRECTORY_1_REF))).contains( - entryOf(NEW_LINES_TO_COVER_KEY, createMeasure(5d)), - entryOf(NEW_UNCOVERED_LINES_KEY, createMeasure(3d)), - entryOf(NEW_CONDITIONS_TO_COVER_KEY, createMeasure(7d)), - entryOf(NEW_UNCOVERED_CONDITIONS_KEY, createMeasure(4d))); + entryOf(NEW_LINES_TO_COVER_KEY, createMeasure(5)), + entryOf(NEW_UNCOVERED_LINES_KEY, createMeasure(3)), + entryOf(NEW_CONDITIONS_TO_COVER_KEY, createMeasure(7)), + entryOf(NEW_UNCOVERED_CONDITIONS_KEY, createMeasure(4))); assertThat(toEntries(measureRepository.getAddedRawMeasures(DIRECTORY_2_REF))).contains( - entryOf(NEW_LINES_TO_COVER_KEY, createMeasure(10d)), - entryOf(NEW_UNCOVERED_LINES_KEY, createMeasure(6d)), - entryOf(NEW_CONDITIONS_TO_COVER_KEY, createMeasure(44d)), - entryOf(NEW_UNCOVERED_CONDITIONS_KEY, createMeasure(23d))); + entryOf(NEW_LINES_TO_COVER_KEY, createMeasure(10)), + entryOf(NEW_UNCOVERED_LINES_KEY, createMeasure(6)), + entryOf(NEW_CONDITIONS_TO_COVER_KEY, createMeasure(44)), + entryOf(NEW_UNCOVERED_CONDITIONS_KEY, createMeasure(23))); // submodule - MeasureRepoEntry[] repoEntriesFromProject = {entryOf(NEW_LINES_TO_COVER_KEY, createMeasure(15d)), - entryOf(NEW_UNCOVERED_LINES_KEY, createMeasure(9d)), - entryOf(NEW_CONDITIONS_TO_COVER_KEY, createMeasure(51d)), - entryOf(NEW_UNCOVERED_CONDITIONS_KEY, createMeasure(27d))}; + MeasureRepoEntry[] repoEntriesFromProject = {entryOf(NEW_LINES_TO_COVER_KEY, createMeasure(15)), + entryOf(NEW_UNCOVERED_LINES_KEY, createMeasure(9)), + entryOf(NEW_CONDITIONS_TO_COVER_KEY, createMeasure(51)), + entryOf(NEW_UNCOVERED_CONDITIONS_KEY, createMeasure(27))}; // project assertThat(toEntries(measureRepository.getAddedRawMeasures(ROOT_REF))).contains(repoEntriesFromProject); } @@ -266,15 +266,15 @@ public class NewCoverageMeasuresStepTest { private void verify_aggregates_variations(LinesAndConditionsWithUncoveredMetricKeys metricKeys, String codeCoverageKey, String lineCoverageKey, String branchCoverageKey) { treeRootHolder.setRoot(MULTIPLE_FILES_TREE); measureRepository - .addRawMeasure(FILE_1_REF, metricKeys.getLines(), createMeasure(3000d)) - .addRawMeasure(FILE_1_REF, metricKeys.getConditions(), createMeasure(300d)) - .addRawMeasure(FILE_1_REF, metricKeys.getUncoveredLines(), createMeasure(30d)) - .addRawMeasure(FILE_1_REF, metricKeys.getUncoveredConditions(), createMeasure(9d)) + .addRawMeasure(FILE_1_REF, metricKeys.getLines(), createMeasure(3000)) + .addRawMeasure(FILE_1_REF, metricKeys.getConditions(), createMeasure(300)) + .addRawMeasure(FILE_1_REF, metricKeys.getUncoveredLines(), createMeasure(30)) + .addRawMeasure(FILE_1_REF, metricKeys.getUncoveredConditions(), createMeasure(9)) - .addRawMeasure(FILE_2_REF, metricKeys.getLines(), createMeasure(2000d)) - .addRawMeasure(FILE_2_REF, metricKeys.getConditions(), createMeasure(400d)) - .addRawMeasure(FILE_2_REF, metricKeys.getUncoveredLines(), createMeasure(200d)) - .addRawMeasure(FILE_2_REF, metricKeys.getUncoveredConditions(), createMeasure(16d)); + .addRawMeasure(FILE_2_REF, metricKeys.getLines(), createMeasure(2000)) + .addRawMeasure(FILE_2_REF, metricKeys.getConditions(), createMeasure(400)) + .addRawMeasure(FILE_2_REF, metricKeys.getUncoveredLines(), createMeasure(200)) + .addRawMeasure(FILE_2_REF, metricKeys.getUncoveredConditions(), createMeasure(16)); underTest.execute(new TestComputationStepContext()); @@ -309,10 +309,10 @@ public class NewCoverageMeasuresStepTest { private void verify_only_zero_measures_on_new_lines_and_conditions_measures(Component component) { assertThat(toEntries(measureRepository.getAddedRawMeasures(component.getReportAttributes().getRef()))).containsOnly( - entryOf(NEW_LINES_TO_COVER_KEY, createMeasure(0d)), - entryOf(NEW_UNCOVERED_LINES_KEY, createMeasure(0d)), - entryOf(NEW_CONDITIONS_TO_COVER_KEY, createMeasure(0d)), - entryOf(NEW_UNCOVERED_CONDITIONS_KEY, createMeasure(0d))); + entryOf(NEW_LINES_TO_COVER_KEY, createMeasure(0)), + entryOf(NEW_UNCOVERED_LINES_KEY, createMeasure(0)), + entryOf(NEW_CONDITIONS_TO_COVER_KEY, createMeasure(0)), + entryOf(NEW_UNCOVERED_CONDITIONS_KEY, createMeasure(0))); } private static final class LineCoverageValues { @@ -334,16 +334,18 @@ public class NewCoverageMeasuresStepTest { underTest.execute(new TestComputationStepContext()); assertThat(toEntries(measureRepository.getAddedRawMeasures(FILE_COMPONENT.getReportAttributes().getRef()))).contains( - entryOf(NEW_LINES_TO_COVER_KEY, createMeasure(5d)), - entryOf(NEW_UNCOVERED_LINES_KEY, createMeasure(3d)), - entryOf(NEW_CONDITIONS_TO_COVER_KEY, createMeasure(7d)), - entryOf(NEW_UNCOVERED_CONDITIONS_KEY, createMeasure(4d))); + entryOf(NEW_LINES_TO_COVER_KEY, createMeasure(5)), + entryOf(NEW_UNCOVERED_LINES_KEY, createMeasure(3)), + entryOf(NEW_CONDITIONS_TO_COVER_KEY, createMeasure(7)), + entryOf(NEW_UNCOVERED_CONDITIONS_KEY, createMeasure(4))); } - private static Measure createMeasure(Double expectedVariation) { - return newMeasureBuilder() - .setVariation(expectedVariation) - .createNoValue(); + private static Measure createMeasure(int expectedValue) { + return newMeasureBuilder().create(expectedValue); + } + + private static Measure createMeasure(double expectedValue) { + return newMeasureBuilder().create(expectedValue); } private void setNewLines(Component c, Integer... lines) { 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 48ec1d6df0b..62d518e53b2 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 @@ -103,13 +103,13 @@ public class NewSizeMeasuresStepTest { setNewLines(FILE_1, FILE_2, FILE_4); underTest.execute(new TestComputationStepContext()); - assertRawMeasureValueOnPeriod(FILE_1_REF, NEW_LINES_KEY, 11); - assertRawMeasureValueOnPeriod(FILE_2_REF, NEW_LINES_KEY, 11); + assertRawMeasureValue(FILE_1_REF, NEW_LINES_KEY, 11); + assertRawMeasureValue(FILE_2_REF, NEW_LINES_KEY, 11); assertNoRawMeasure(FILE_3_REF, NEW_LINES_KEY); - assertRawMeasureValueOnPeriod(FILE_4_REF, NEW_LINES_KEY, 11); - assertRawMeasureValueOnPeriod(DIRECTORY_REF, NEW_LINES_KEY, 22); + assertRawMeasureValue(FILE_4_REF, NEW_LINES_KEY, 11); + assertRawMeasureValue(DIRECTORY_REF, NEW_LINES_KEY, 22); assertNoRawMeasure(DIRECTORY_2_REF, NEW_LINES_KEY); - assertRawMeasureValueOnPeriod(ROOT_REF, NEW_LINES_KEY, 33); + assertRawMeasureValue(ROOT_REF, NEW_LINES_KEY, 33); } @Test @@ -118,13 +118,13 @@ public class NewSizeMeasuresStepTest { underTest.execute(new TestComputationStepContext()); - assertRawMeasureValueOnPeriod(FILE_1_REF, NEW_LINES_KEY, 2); - assertRawMeasureValueOnPeriod(FILE_2_REF, NEW_LINES_KEY, 2); + assertRawMeasureValue(FILE_1_REF, NEW_LINES_KEY, 2); + assertRawMeasureValue(FILE_2_REF, NEW_LINES_KEY, 2); assertNoRawMeasure(FILE_3_REF, NEW_LINES_KEY); - assertRawMeasureValueOnPeriod(FILE_4_REF, NEW_LINES_KEY, 2); - assertRawMeasureValueOnPeriod(DIRECTORY_REF, NEW_LINES_KEY, 4); + assertRawMeasureValue(FILE_4_REF, NEW_LINES_KEY, 2); + assertRawMeasureValue(DIRECTORY_REF, NEW_LINES_KEY, 4); assertNoRawMeasure(DIRECTORY_2_REF, NEW_LINES_KEY); - assertRawMeasureValueOnPeriod(ROOT_REF, NEW_LINES_KEY, 6); + assertRawMeasureValue(ROOT_REF, NEW_LINES_KEY, 6); } @Test @@ -141,7 +141,7 @@ public class NewSizeMeasuresStepTest { underTest.execute(new TestComputationStepContext()); - assertRawMeasureValueOnPeriod(FILE_1_REF, NEW_DUPLICATED_LINES_KEY, 2d); + assertRawMeasureValue(FILE_1_REF, NEW_DUPLICATED_LINES_KEY, 2); } @Test @@ -152,7 +152,7 @@ public class NewSizeMeasuresStepTest { underTest.execute(new TestComputationStepContext()); - assertRawMeasureValueOnPeriod(FILE_1_REF, NEW_DUPLICATED_LINES_KEY, 1d); + assertRawMeasureValue(FILE_1_REF, NEW_DUPLICATED_LINES_KEY, 1); } @Test @@ -163,7 +163,7 @@ public class NewSizeMeasuresStepTest { underTest.execute(new TestComputationStepContext()); - assertRawMeasureValueOnPeriod(FILE_1_REF, NEW_DUPLICATED_LINES_KEY, 1d); + assertRawMeasureValue(FILE_1_REF, NEW_DUPLICATED_LINES_KEY, 1); } @Test @@ -174,7 +174,7 @@ public class NewSizeMeasuresStepTest { underTest.execute(new TestComputationStepContext()); - assertRawMeasureValueOnPeriod(FILE_1_REF, NEW_DUPLICATED_LINES_KEY, 6d); + assertRawMeasureValue(FILE_1_REF, NEW_DUPLICATED_LINES_KEY, 6); } @Test @@ -186,7 +186,7 @@ public class NewSizeMeasuresStepTest { underTest.execute(new TestComputationStepContext()); - assertRawMeasureValueOnPeriod(FILE_1_REF, NEW_DUPLICATED_LINES_KEY, 11d); + assertRawMeasureValue(FILE_1_REF, NEW_DUPLICATED_LINES_KEY, 11); } @Test @@ -198,13 +198,13 @@ public class NewSizeMeasuresStepTest { underTest.execute(new TestComputationStepContext()); - assertRawMeasureValueOnPeriod(FILE_1_REF, NEW_DUPLICATED_LINES_KEY, 2d); - assertRawMeasureValueOnPeriod(FILE_2_REF, NEW_DUPLICATED_LINES_KEY, 0d); - assertRawMeasureValueOnPeriod(FILE_3_REF, NEW_DUPLICATED_LINES_KEY, 9d); - assertRawMeasureValueOnPeriod(FILE_4_REF, NEW_DUPLICATED_LINES_KEY, 11d); - assertRawMeasureValueOnPeriod(DIRECTORY_REF, NEW_DUPLICATED_LINES_KEY, 2d); + assertRawMeasureValue(FILE_1_REF, NEW_DUPLICATED_LINES_KEY, 2); + assertRawMeasureValue(FILE_2_REF, NEW_DUPLICATED_LINES_KEY, 0); + assertRawMeasureValue(FILE_3_REF, NEW_DUPLICATED_LINES_KEY, 9); + assertRawMeasureValue(FILE_4_REF, NEW_DUPLICATED_LINES_KEY, 11); + assertRawMeasureValue(DIRECTORY_REF, NEW_DUPLICATED_LINES_KEY, 2); assertNoRawMeasure(DIRECTORY_2_REF, NEW_DUPLICATED_LINES_KEY); - assertRawMeasureValueOnPeriod(ROOT_REF, NEW_DUPLICATED_LINES_KEY, 22d); + assertRawMeasureValue(ROOT_REF, NEW_DUPLICATED_LINES_KEY, 22); } @Test @@ -217,13 +217,13 @@ public class NewSizeMeasuresStepTest { underTest.execute(new TestComputationStepContext()); - assertRawMeasureValueOnPeriod(FILE_1_REF, NEW_DUPLICATED_LINES_KEY, 2d); - assertRawMeasureValueOnPeriod(FILE_2_REF, NEW_DUPLICATED_LINES_KEY, 0d); - assertRawMeasureValueOnPeriod(FILE_3_REF, NEW_DUPLICATED_LINES_KEY, 2d); - assertRawMeasureValueOnPeriod(FILE_4_REF, NEW_DUPLICATED_LINES_KEY, 2d); - assertRawMeasureValueOnPeriod(DIRECTORY_REF, NEW_DUPLICATED_LINES_KEY, 2d); + assertRawMeasureValue(FILE_1_REF, NEW_DUPLICATED_LINES_KEY, 2); + assertRawMeasureValue(FILE_2_REF, NEW_DUPLICATED_LINES_KEY, 0); + assertRawMeasureValue(FILE_3_REF, NEW_DUPLICATED_LINES_KEY, 2); + assertRawMeasureValue(FILE_4_REF, NEW_DUPLICATED_LINES_KEY, 2); + assertRawMeasureValue(DIRECTORY_REF, NEW_DUPLICATED_LINES_KEY, 2); assertNoRawMeasure(DIRECTORY_2_REF, NEW_DUPLICATED_LINES_KEY); - assertRawMeasureValueOnPeriod(ROOT_REF, NEW_DUPLICATED_LINES_KEY, 6d); + assertRawMeasureValue(ROOT_REF, NEW_DUPLICATED_LINES_KEY, 6); } @Test @@ -243,7 +243,7 @@ public class NewSizeMeasuresStepTest { underTest.execute(new TestComputationStepContext()); - assertRawMeasureValueOnPeriod(FILE_1_REF, NEW_BLOCKS_DUPLICATED_KEY, 4); + assertRawMeasureValue(FILE_1_REF, NEW_BLOCKS_DUPLICATED_KEY, 4); } @Test @@ -254,7 +254,7 @@ public class NewSizeMeasuresStepTest { underTest.execute(new TestComputationStepContext()); - assertRawMeasureValueOnPeriod(FILE_1_REF, NEW_BLOCKS_DUPLICATED_KEY, 4); + assertRawMeasureValue(FILE_1_REF, NEW_BLOCKS_DUPLICATED_KEY, 4); } @Test @@ -264,7 +264,7 @@ public class NewSizeMeasuresStepTest { underTest.execute(new TestComputationStepContext()); - assertRawMeasureValueOnPeriod(FILE_1_REF, NEW_BLOCKS_DUPLICATED_KEY, 1); + assertRawMeasureValue(FILE_1_REF, NEW_BLOCKS_DUPLICATED_KEY, 1); } @Test @@ -274,7 +274,7 @@ public class NewSizeMeasuresStepTest { underTest.execute(new TestComputationStepContext()); - assertRawMeasureValueOnPeriod(FILE_1_REF, NEW_BLOCKS_DUPLICATED_KEY, 1); + assertRawMeasureValue(FILE_1_REF, NEW_BLOCKS_DUPLICATED_KEY, 1); } @Test @@ -286,12 +286,12 @@ public class NewSizeMeasuresStepTest { underTest.execute(new TestComputationStepContext()); - assertRawMeasureValueOnPeriod(FILE_1_REF, NEW_BLOCKS_DUPLICATED_KEY, 10); - assertRawMeasureValueOnPeriod(FILE_2_REF, NEW_BLOCKS_DUPLICATED_KEY, 2); - assertRawMeasureValueOnPeriod(FILE_3_REF, NEW_BLOCKS_DUPLICATED_KEY, 0); - assertRawMeasureValueOnPeriod(FILE_4_REF, NEW_BLOCKS_DUPLICATED_KEY, 6); - assertRawMeasureValueOnPeriod(DIRECTORY_REF, NEW_BLOCKS_DUPLICATED_KEY, 12); - assertRawMeasureValueOnPeriod(ROOT_REF, NEW_BLOCKS_DUPLICATED_KEY, 18); + assertRawMeasureValue(FILE_1_REF, NEW_BLOCKS_DUPLICATED_KEY, 10); + assertRawMeasureValue(FILE_2_REF, NEW_BLOCKS_DUPLICATED_KEY, 2); + assertRawMeasureValue(FILE_3_REF, NEW_BLOCKS_DUPLICATED_KEY, 0); + assertRawMeasureValue(FILE_4_REF, NEW_BLOCKS_DUPLICATED_KEY, 6); + assertRawMeasureValue(DIRECTORY_REF, NEW_BLOCKS_DUPLICATED_KEY, 12); + assertRawMeasureValue(ROOT_REF, NEW_BLOCKS_DUPLICATED_KEY, 18); } @Test @@ -358,22 +358,23 @@ public class NewSizeMeasuresStepTest { } } - private void assertRawMeasureValueOnPeriod(int componentRef, String metricKey, double expectedVariation) { - assertRawMeasureValue(componentRef, metricKey, expectedVariation); + private void assertRawMeasureValue(int componentRef, String metricKey, int expectedValue) { + int value = measureRepository.getAddedRawMeasure(componentRef, metricKey).get().getIntValue(); + assertThat(value).isEqualTo(expectedValue); } - private void assertRawMeasureValue(int componentRef, String metricKey, double expectedVariation) { - double variation = measureRepository.getAddedRawMeasure(componentRef, metricKey).get().getVariation(); - assertThat(variation).isEqualTo(expectedVariation, DEFAULT_OFFSET); + private void assertRawMeasureValue(int componentRef, String metricKey, double expectedValue) { + double value = measureRepository.getAddedRawMeasure(componentRef, metricKey).get().getDoubleValue(); + assertThat(value).isEqualTo(expectedValue, DEFAULT_OFFSET); } private void assertComputedAndAggregatedToZeroInt(String metricKey) { - assertRawMeasureValueOnPeriod(FILE_1_REF, metricKey, 0); - assertRawMeasureValueOnPeriod(FILE_2_REF, metricKey, 0); - assertRawMeasureValueOnPeriod(FILE_3_REF, metricKey, 0); - assertRawMeasureValueOnPeriod(FILE_4_REF, metricKey, 0); - assertRawMeasureValueOnPeriod(DIRECTORY_REF, metricKey, 0); - assertRawMeasureValueOnPeriod(ROOT_REF, metricKey, 0); + assertRawMeasureValue(FILE_1_REF, metricKey, 0); + assertRawMeasureValue(FILE_2_REF, metricKey, 0); + assertRawMeasureValue(FILE_3_REF, metricKey, 0); + assertRawMeasureValue(FILE_4_REF, metricKey, 0); + assertRawMeasureValue(DIRECTORY_REF, metricKey, 0); + assertRawMeasureValue(ROOT_REF, metricKey, 0); } private void assertNoRawMeasure(int componentRef, String metricKey) { diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistLiveMeasuresStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistLiveMeasuresStepTest.java index a4a2a343b2b..47938c2cbd4 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistLiveMeasuresStepTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistLiveMeasuresStepTest.java @@ -135,13 +135,12 @@ public class PersistLiveMeasuresStepTest extends BaseStepTest { @Test public void measures_on_new_code_period_are_persisted() { prepareProject(); - measureRepository.addRawMeasure(REF_1, INT_METRIC.getKey(), newMeasureBuilder().setVariation(42.0).createNoValue()); + measureRepository.addRawMeasure(REF_1, INT_METRIC.getKey(), newMeasureBuilder().create(42.0)); step().execute(context); LiveMeasureDto persistedMeasure = selectMeasure("project-uuid", INT_METRIC).get(); - assertThat(persistedMeasure.getValue()).isNull(); - assertThat(persistedMeasure.getVariation()).isEqualTo(42.0); + assertThat(persistedMeasure.getValue()).isEqualTo(42.0); verifyStatistics(context, 1); } diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistMeasuresStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistMeasuresStepTest.java index c293d0a4538..d34e61d7f0c 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistMeasuresStepTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistMeasuresStepTest.java @@ -136,13 +136,12 @@ public class PersistMeasuresStepTest extends BaseStepTest { @Test public void measures_on_new_code_period_are_persisted() { prepareProject(); - measureRepository.addRawMeasure(REF_1, INT_METRIC.getKey(), newMeasureBuilder().setVariation(42.0).createNoValue()); + measureRepository.addRawMeasure(REF_1, INT_METRIC.getKey(), newMeasureBuilder().create(42.0)); TestComputationStepContext context = execute(); MeasureDto persistedMeasure = selectMeasure("project-uuid", INT_METRIC).get(); - assertThat(persistedMeasure.getValue()).isNull(); - assertThat(persistedMeasure.getVariation()).isEqualTo(42.0); + assertThat(persistedMeasure.getValue()).isEqualTo(42.0); assertNbOfInserts(context, 1); } diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/QualityGateMeasuresStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/QualityGateMeasuresStepTest.java index 01b5000b00d..88557dd807b 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/QualityGateMeasuresStepTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/QualityGateMeasuresStepTest.java @@ -261,9 +261,7 @@ public class QualityGateMeasuresStepTest { Condition periodCondition = createLessThanCondition(INT_METRIC_1, "1"); qualityGateHolder.setQualityGate(new QualityGate(SOME_QG_UUID, SOME_QG_NAME, of(fixedCondition, periodCondition))); - Measure measure = newMeasureBuilder() - .setVariation(rawValue) - .create(rawValue, null); + Measure measure = newMeasureBuilder().create(rawValue); measureRepository.addRawMeasure(PROJECT_REF, INT_METRIC_1_KEY, measure); underTest.execute(new TestComputationStepContext()); diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/SmallChangesetQualityGateSpecialCaseTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/SmallChangesetQualityGateSpecialCaseTest.java index 2a57b37d21a..2ca91cf3219 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/SmallChangesetQualityGateSpecialCaseTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/SmallChangesetQualityGateSpecialCaseTest.java @@ -66,7 +66,7 @@ public class SmallChangesetQualityGateSpecialCaseTest { mapSettings.setProperty(CoreProperties.QUALITY_GATE_IGNORE_SMALL_CHANGES, true); QualityGateMeasuresStep.MetricEvaluationResult metricEvaluationResult = generateEvaluationResult(NEW_COVERAGE_KEY, ERROR); Component project = generateNewRootProject(); - measureRepository.addRawMeasure(PROJECT_REF, CoreMetrics.NEW_LINES_KEY, newMeasureBuilder().setVariation(19).create(1000)); + measureRepository.addRawMeasure(PROJECT_REF, CoreMetrics.NEW_LINES_KEY, newMeasureBuilder().create(19)); boolean result = underTest.appliesTo(project, metricEvaluationResult); @@ -78,7 +78,7 @@ public class SmallChangesetQualityGateSpecialCaseTest { mapSettings.setProperty(CoreProperties.QUALITY_GATE_IGNORE_SMALL_CHANGES, false); QualityGateMeasuresStep.MetricEvaluationResult metricEvaluationResult = generateEvaluationResult(NEW_COVERAGE_KEY, ERROR); Component project = generateNewRootProject(); - measureRepository.addRawMeasure(PROJECT_REF, CoreMetrics.NEW_LINES_KEY, newMeasureBuilder().setVariation(19).create(1000)); + measureRepository.addRawMeasure(PROJECT_REF, CoreMetrics.NEW_LINES_KEY, newMeasureBuilder().create(19)); boolean result = underTest.appliesTo(project, metricEvaluationResult); @@ -89,7 +89,7 @@ public class SmallChangesetQualityGateSpecialCaseTest { public void should_not_change_for_bigger_changesets() { QualityGateMeasuresStep.MetricEvaluationResult metricEvaluationResult = generateEvaluationResult(NEW_COVERAGE_KEY, ERROR); Component project = generateNewRootProject(); - measureRepository.addRawMeasure(PROJECT_REF, CoreMetrics.NEW_LINES_KEY, newMeasureBuilder().setVariation(20).create(1000)); + measureRepository.addRawMeasure(PROJECT_REF, CoreMetrics.NEW_LINES_KEY, newMeasureBuilder().create(20)); boolean result = underTest.appliesTo(project, metricEvaluationResult); @@ -100,7 +100,7 @@ public class SmallChangesetQualityGateSpecialCaseTest { public void should_not_change_issue_related_metrics() { QualityGateMeasuresStep.MetricEvaluationResult metricEvaluationResult = generateEvaluationResult(NEW_BUGS_KEY, ERROR); Component project = generateNewRootProject(); - measureRepository.addRawMeasure(PROJECT_REF, CoreMetrics.NEW_LINES_KEY, newMeasureBuilder().setVariation(19).create(1000)); + measureRepository.addRawMeasure(PROJECT_REF, CoreMetrics.NEW_LINES_KEY, newMeasureBuilder().create(19)); boolean result = underTest.appliesTo(project, metricEvaluationResult); @@ -111,7 +111,7 @@ public class SmallChangesetQualityGateSpecialCaseTest { public void should_not_change_green_conditions() { QualityGateMeasuresStep.MetricEvaluationResult metricEvaluationResult = generateEvaluationResult(NEW_BUGS_KEY, OK); Component project = generateNewRootProject(); - measureRepository.addRawMeasure(PROJECT_REF, CoreMetrics.NEW_LINES_KEY, newMeasureBuilder().setVariation(19).create(1000)); + measureRepository.addRawMeasure(PROJECT_REF, CoreMetrics.NEW_LINES_KEY, newMeasureBuilder().create(19)); boolean result = underTest.appliesTo(project, metricEvaluationResult); diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectexport/steps/ExportLiveMeasuresStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectexport/steps/ExportLiveMeasuresStepTest.java index acaaafa00dd..05800d8cf9c 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectexport/steps/ExportLiveMeasuresStepTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectexport/steps/ExportLiveMeasuresStepTest.java @@ -70,8 +70,8 @@ public class ExportLiveMeasuresStepTest { public void export_measures() { ComponentDto project = createProject(true); componentRepository.register(1, project.uuid(), false); - MetricDto metric = dbTester.measures().insertMetric(m -> m.setValueType(INT.name())); - dbTester.measures().insertLiveMeasure(project, metric, m -> m.setValue(4711.0d).setVariation(null)); + MetricDto metric = dbTester.measures().insertMetric(m -> m.setKey("metric1").setValueType(INT.name())); + dbTester.measures().insertLiveMeasure(project, metric, m -> m.setValue(4711.0d)); when(projectHolder.projectDto()).thenReturn(dbTester.components().getProjectDto(project)); when(projectHolder.branches()).thenReturn(newArrayList(new BranchDto() .setProjectUuid(project.uuid()) @@ -131,8 +131,8 @@ public class ExportLiveMeasuresStepTest { public void test_exported_fields() { ComponentDto project = createProject(true); componentRepository.register(1, project.uuid(), false); - MetricDto metric = dbTester.measures().insertMetric(m -> m.setValueType(INT.name())); - dbTester.measures().insertLiveMeasure(project, metric, m -> m.setProjectUuid(project.uuid()).setValue(4711.0d).setData("test").setVariation(7.0d)); + MetricDto metric = dbTester.measures().insertMetric(m -> m.setKey("new_metric").setValueType(INT.name())); + dbTester.measures().insertLiveMeasure(project, metric, m -> m.setProjectUuid(project.uuid()).setValue(7.0d).setData("test")); when(projectHolder.projectDto()).thenReturn(dbTester.components().getProjectDto(project)); when(projectHolder.branches()).thenReturn(newArrayList(new BranchDto() .setProjectUuid(project.uuid()) @@ -154,7 +154,7 @@ public class ExportLiveMeasuresStepTest { .containsOnly(tuple( 1L, 0, - 4711.0d, + 0.0d, "test", 7.0d)); assertThat(logTester.logs(LoggerLevel.DEBUG)).contains("1 live measures exported"); @@ -166,7 +166,7 @@ public class ExportLiveMeasuresStepTest { ComponentDto project = createProject(true); componentRepository.register(1, project.uuid(), false); MetricDto metric = dbTester.measures().insertMetric(m -> m.setValueType(INT.name())); - dbTester.measures().insertLiveMeasure(project, metric, m -> m.setProjectUuid(project.uuid()).setValue(null).setData((String) null).setVariation(null)); + dbTester.measures().insertLiveMeasure(project, metric, m -> m.setProjectUuid(project.uuid()).setValue(null).setData((String) null)); when(projectHolder.projectDto()).thenReturn(dbTester.components().getProjectDto(project)); when(projectHolder.branches()).thenReturn(newArrayList(new BranchDto() .setProjectUuid(project.uuid()) diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectexport/steps/ExportMeasuresStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectexport/steps/ExportMeasuresStepTest.java index faccb9279b3..60e51e242a6 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectexport/steps/ExportMeasuresStepTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectexport/steps/ExportMeasuresStepTest.java @@ -82,6 +82,12 @@ public class ExportMeasuresStepTest { .setShortName("Coverage") .setEnabled(false); + private static final MetricDto NEW_NCLOC = new MetricDto() + .setUuid("5") + .setKey("new_ncloc") + .setShortName("New Lines of code") + .setEnabled(true); + private static final List<BranchDto> BRANCHES = newArrayList( new BranchDto() .setBranchType(BranchType.BRANCH) @@ -107,7 +113,7 @@ public class ExportMeasuresStepTest { String projectUuid = dbTester.components().insertPublicProject(PROJECT).uuid(); componentRepository.register(1, projectUuid, false); dbTester.getDbClient().componentDao().insert(dbTester.getSession(), FILE, ANOTHER_PROJECT); - dbTester.getDbClient().metricDao().insert(dbTester.getSession(), NCLOC, DISABLED_METRIC); + dbTester.getDbClient().metricDao().insert(dbTester.getSession(), NCLOC, DISABLED_METRIC, NEW_NCLOC); dbTester.commit(); when(projectHolder.projectDto()).thenReturn(dbTester.components().getProjectDto(PROJECT)); when(projectHolder.branches()).thenReturn(BRANCHES); @@ -174,8 +180,7 @@ public class ExportMeasuresStepTest { .setValue(100.0) .setData("data") .setAlertStatus("OK") - .setAlertText("alert text") - .setVariation(1.0); + .setAlertText("alert text"); insertMeasure(analysis, PROJECT, dto); dbTester.commit(); @@ -189,7 +194,32 @@ public class ExportMeasuresStepTest { assertThat(measure.getTextValue()).isEqualTo(dto.getData()); assertThat(measure.getMetricRef()).isZero(); assertThat(measure.getAnalysisUuid()).isEqualTo(analysis.getUuid()); - assertThat(measure.getVariation1().getValue()).isEqualTo(dto.getVariation()); + assertThat(measure.getVariation1().getValue()).isZero(); + } + + @Test + public void test_exported_fields_new_metric() { + SnapshotDto analysis = insertSnapshot("U_1", PROJECT, STATUS_PROCESSED); + MeasureDto dto = new MeasureDto() + .setMetricUuid(NEW_NCLOC.getUuid()) + .setValue(100.0) + .setData("data") + .setAlertStatus("OK") + .setAlertText("alert text"); + insertMeasure(analysis, PROJECT, dto); + dbTester.commit(); + + underTest.execute(new TestComputationStepContext()); + + List<ProjectDump.Measure> exportedMeasures = dumpWriter.getWrittenMessagesOf(DumpElement.MEASURES); + ProjectDump.Measure measure = exportedMeasures.get(0); + assertThat(measure.getAlertStatus()).isEqualTo(dto.getAlertStatus()); + assertThat(measure.getAlertText()).isEqualTo(dto.getAlertText()); + assertThat(measure.getDoubleValue().getValue()).isZero(); + assertThat(measure.getTextValue()).isEqualTo(dto.getData()); + assertThat(measure.getMetricRef()).isZero(); + assertThat(measure.getAnalysisUuid()).isEqualTo(analysis.getUuid()); + assertThat(measure.getVariation1().getValue()).isEqualTo(dto.getValue()); } @Test diff --git a/server/sonar-ce-task-projectanalysis/src/testFixtures/java/org/sonar/ce/task/projectanalysis/measure/MeasureAssert.java b/server/sonar-ce-task-projectanalysis/src/testFixtures/java/org/sonar/ce/task/projectanalysis/measure/MeasureAssert.java index 400d3e927d8..10cc6bbc355 100644 --- a/server/sonar-ce-task-projectanalysis/src/testFixtures/java/org/sonar/ce/task/projectanalysis/measure/MeasureAssert.java +++ b/server/sonar-ce-task-projectanalysis/src/testFixtures/java/org/sonar/ce/task/projectanalysis/measure/MeasureAssert.java @@ -89,6 +89,25 @@ public class MeasureAssert extends AbstractAssert<MeasureAssert, Measure> { return this; } + public MeasureAssert hasValue(double expected, Offset<Double> offset) { + isNotNull(); + + if (actual.getValueType() != Measure.ValueType.DOUBLE) { + failWithMessage( + "Expected Measure to have a double value and therefore its ValueType to be <%s> but was <%s>", + Measure.ValueType.DOUBLE, actual.getValueType()); + } + + double value = actual.getDoubleValue(); + if (abs(expected - value) > offset.value) { + failWithMessage( + "Expected value of Measure to be close to <%s> by less than <%s> but was <%s>", + expected, offset.value, value); + } + + return this; + } + public MeasureAssert hasValue(boolean expected) { isNotNull(); @@ -197,46 +216,6 @@ public class MeasureAssert extends AbstractAssert<MeasureAssert, Measure> { } } - public MeasureAssert hasVariation(double expected) { - isNotNull(); - hasVariation(); - - if (!actual.hasVariation()) { - failWithMessage("Expected Measure to have a variation but it did not"); - } - - double variation = actual.getVariation(); - if (variation != expected) { - failWithMessage("Expected variation of Measure to be <%s> but was <%s>", expected, variation); - } - - return this; - } - - public MeasureAssert hasVariation(double expected, Offset<Double> offset) { - isNotNull(); - hasVariation(); - - if (!actual.hasVariation()) { - failWithMessage("Expected Measure to have a variation but it did not"); - } - - double variation = actual.getVariation(); - if (abs(expected - variation) > offset.value) { - failWithMessage( - "Expected variation of Measure to be close to <%s> by less than <%s> but was <%s>", - expected, offset.value, variation); - } - - return this; - } - - private void hasVariation() { - if (!actual.hasVariation()) { - failWithMessage("Expected Measure to have a variation but it did not"); - } - } - public void isAbsent() { if (actual != null) { failWithMessage("Expected measure to be absent"); 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 59809bfefa6..e3be5887f4a 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,8 +19,6 @@ */ package org.sonar.ce.task.projectanalysis.measure; -import java.math.BigDecimal; -import java.math.RoundingMode; import java.util.Map; import java.util.Objects; import java.util.function.Function; @@ -73,7 +71,6 @@ public final class MeasureRepoEntry { public static boolean deepEquals(Measure measure, Measure measure1) { return measure.getValueType() == measure1.getValueType() && equalsByValue(measure, measure1) - && equalsByVariation(measure, measure1) && equalsByQualityGateStatus(measure, measure1) && Objects.equals(measure.getData(), measure1.getData()); } @@ -99,18 +96,6 @@ public final class MeasureRepoEntry { } } - private static boolean equalsByVariation(Measure measure, Measure measure1) { - return measure.hasVariation() == measure1.hasVariation() && (!measure.hasVariation() - || Double.compare(scale(measure.getVariation()), scale(measure1.getVariation())) == 0); - } - - private static final int DOUBLE_PRECISION = 1; - - private static double scale(double value) { - BigDecimal bd = BigDecimal.valueOf(value); - return bd.setScale(DOUBLE_PRECISION, RoundingMode.HALF_UP).doubleValue(); - } - private static boolean equalsByQualityGateStatus(Measure measure, Measure measure1) { if (measure.hasQualityGateStatus() != measure1.hasQualityGateStatus()) { return false; |