]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-19970 Remove PR measure replacement
authorEric Giffon <eric.giffon@sonarsource.com>
Mon, 21 Aug 2023 13:56:04 +0000 (15:56 +0200)
committersonartech <sonartech@sonarsource.com>
Wed, 23 Aug 2023 20:03:05 +0000 (20:03 +0000)
server/sonar-webserver-webapi/src/it/java/org/sonar/server/measure/ws/ComponentActionIT.java
server/sonar-webserver-webapi/src/it/java/org/sonar/server/measure/ws/ComponentTreeActionIT.java
server/sonar-webserver-webapi/src/main/java/org/sonar/server/measure/ws/ComponentAction.java
server/sonar-webserver-webapi/src/main/java/org/sonar/server/measure/ws/ComponentTreeAction.java
server/sonar-webserver-webapi/src/main/java/org/sonar/server/measure/ws/PrMeasureFix.java [deleted file]
server/sonar-webserver-webapi/src/test/java/org/sonar/server/measure/ws/prMeasureFixTest.java [deleted file]

index daad47eba90e432c8ad9d553d28cd8e6ae8fcdfc..d526ae2ccbd0c63b291c30a1d0f5f19fdffb42eb 100644 (file)
@@ -19,8 +19,6 @@
  */
 package org.sonar.server.measure.ws;
 
-import java.util.Optional;
-import java.util.function.Function;
 import org.junit.Rule;
 import org.junit.Test;
 import org.sonar.api.server.ws.WebService;
@@ -44,7 +42,6 @@ import org.sonarqube.ws.Measures.Component;
 import org.sonarqube.ws.Measures.ComponentWsResponse;
 
 import static java.lang.Double.parseDouble;
-import static java.util.function.Predicate.not;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.assertj.core.api.Assertions.tuple;
@@ -192,70 +189,6 @@ public class ComponentActionIT {
       .containsExactlyInAnyOrder(tuple(complexity.getKey(), measure.getValue()));
   }
 
-  @Test
-  public void new_issue_count_measures_are_transformed_in_pr() {
-    ProjectData projectData = db.components().insertPrivateProject();
-    ComponentDto mainBranch = projectData.getMainBranchComponent();
-    userSession.addProjectPermission(USER, projectData.getProjectDto())
-      .registerBranches(projectData.getMainBranchDto());
-    ComponentDto branch = db.components().insertProjectBranch(mainBranch, b -> b.setKey("pr-123").setBranchType(PULL_REQUEST));
-    userSession.addProjectBranchMapping(projectData.projectUuid(), branch);
-    SnapshotDto analysis = db.components().insertSnapshot(branch);
-    ComponentDto file = db.components().insertComponent(newFileDto(branch, mainBranch.uuid()));
-    MetricDto bugs = db.measures().insertMetric(m1 -> m1.setKey("bugs").setValueType("INT"));
-    MetricDto newBugs = db.measures().insertMetric(m1 -> m1.setKey("new_bugs").setValueType("INT"));
-    MetricDto violations = db.measures().insertMetric(m1 -> m1.setKey("violations").setValueType("INT"));
-    MetricDto newViolations = db.measures().insertMetric(m1 -> m1.setKey("new_violations").setValueType("INT"));
-    LiveMeasureDto bugMeasure = db.measures().insertLiveMeasure(file, bugs, m -> m.setValue(12.0d));
-    LiveMeasureDto newBugMeasure = db.measures().insertLiveMeasure(file, newBugs, m -> m.setValue(1d));
-    LiveMeasureDto violationMeasure = db.measures().insertLiveMeasure(file, violations, m -> m.setValue(20.0d));
-
-    ComponentWsResponse response = ws.newRequest()
-      .setParam(PARAM_COMPONENT, file.getKey())
-      .setParam(PARAM_PULL_REQUEST, "pr-123")
-      .setParam(PARAM_METRIC_KEYS, newBugs.getKey() + "," + bugs.getKey() + "," + newViolations.getKey())
-      .executeProtobuf(ComponentWsResponse.class);
-
-    assertThat(response.getComponent()).extracting(Component::getKey, Component::getPullRequest)
-      .containsExactlyInAnyOrder(file.getKey(), "pr-123");
-
-    Function<Measures.Measure, Double> extractVariation = m -> Optional.ofNullable(m.getPeriod())
-      .map(Measures.PeriodValue::getValue)
-      .filter(not(String::isEmpty))
-      .map(Double::parseDouble)
-      .orElse(null);
-    assertThat(response.getComponent().getMeasuresList())
-      .extracting(Measures.Measure::getMetric, extractVariation, m -> m.getValue().isEmpty() ? null : parseDouble(m.getValue()))
-      .containsExactlyInAnyOrder(
-        tuple(newBugs.getKey(), bugMeasure.getValue(), null),
-        tuple(bugs.getKey(), null, bugMeasure.getValue()),
-        tuple(newViolations.getKey(), violationMeasure.getValue(), null));
-  }
-
-  @Test
-  public void new_issue_count_measures_are_not_transformed_if_they_dont_exist_in_pr() {
-    ProjectData projectData = db.components().insertPrivateProject();
-    ComponentDto mainBranch = projectData.getMainBranchComponent();
-    userSession.addProjectPermission(USER, projectData.getProjectDto());
-    ComponentDto branch = db.components().insertProjectBranch(mainBranch, b -> b.setKey("pr-123").setBranchType(PULL_REQUEST));
-    userSession.addProjectBranchMapping(projectData.projectUuid(), branch);
-    SnapshotDto analysis = db.components().insertSnapshot(branch);
-    ComponentDto file = db.components().insertComponent(newFileDto(branch, mainBranch.uuid()));
-    MetricDto bugs = db.measures().insertMetric(m1 -> m1.setKey("bugs").setOptimizedBestValue(false).setValueType("INT"));
-    MetricDto newBugs = db.measures().insertMetric(m1 -> m1.setKey("new_bugs").setOptimizedBestValue(false).setValueType("INT"));
-
-    ComponentWsResponse response = ws.newRequest()
-      .setParam(PARAM_COMPONENT, file.getKey())
-      .setParam(PARAM_PULL_REQUEST, "pr-123")
-      .setParam(PARAM_METRIC_KEYS, newBugs.getKey() + "," + bugs.getKey())
-      .executeProtobuf(ComponentWsResponse.class);
-
-    assertThat(response.getComponent()).extracting(Component::getKey, Component::getPullRequest)
-      .containsExactlyInAnyOrder(file.getKey(), "pr-123");
-
-    assertThat(response.getComponent().getMeasuresList()).isEmpty();
-  }
-
   @Test
   public void reference_key_in_the_response() {
     ComponentDto mainBranch = db.components().insertPrivateProject().getMainBranchComponent();
index 75431fb3ffd82b7ef79f0f644f17f998af3fa6ea..8b885bf3c126e0fde159ad549b6b7a7f6e621cc1 100644 (file)
@@ -24,7 +24,6 @@ import java.util.List;
 import java.util.stream.IntStream;
 import org.junit.Rule;
 import org.junit.Test;
-import org.sonar.api.measures.CoreMetrics;
 import org.sonar.api.measures.Metric;
 import org.sonar.api.resources.ResourceTypeTree;
 import org.sonar.api.resources.ResourceTypes;
@@ -627,61 +626,6 @@ public class ComponentTreeActionIT {
       .containsExactlyInAnyOrder(tuple(complexity.getKey(), measure.getValue()));
   }
 
-  @Test
-  public void fix_pull_request_new_issue_count_metrics() {
-    ProjectData projectData = db.components().insertPrivateProject();
-    ComponentDto mainBranch = projectData.getMainBranchComponent();
-    addProjectPermission(projectData);
-    ComponentDto branch = db.components().insertProjectBranch(mainBranch, b -> b.setKey("pr-123").setBranchType(PULL_REQUEST));
-    userSession.addProjectBranchMapping(projectData.projectUuid(), branch);
-    SnapshotDto analysis = db.components().insertSnapshot(branch);
-    ComponentDto file = db.components().insertComponent(newFileDto(branch, mainBranch.uuid()));
-    MetricDto bug = db.measures().insertMetric(m -> m.setValueType(INT.name()).setKey(CoreMetrics.BUGS_KEY));
-    MetricDto newBug = db.measures().insertMetric(m -> m.setValueType(INT.name()).setKey(CoreMetrics.NEW_BUGS_KEY));
-
-    LiveMeasureDto measure = db.measures().insertLiveMeasure(file, bug, m -> m.setValue(12.0d));
-
-    ComponentTreeWsResponse response = ws.newRequest()
-      .setParam(PARAM_COMPONENT, file.getKey())
-      .setParam(PARAM_PULL_REQUEST, "pr-123")
-      .setParam(PARAM_METRIC_KEYS, newBug.getKey())
-      .executeProtobuf(ComponentTreeWsResponse.class);
-
-    assertThat(response.getBaseComponent()).extracting(Component::getKey, Component::getPullRequest)
-      .containsExactlyInAnyOrder(file.getKey(), "pr-123");
-    assertThat(response.getBaseComponent().getMeasuresList())
-      .extracting(Measure::getMetric, m -> parseDouble(m.getPeriod().getValue()), Measure::getValue)
-      .containsExactlyInAnyOrder(tuple(newBug.getKey(), measure.getValue(), ""));
-
-    assertThat(response.getBaseComponent().getMeasuresList())
-      .extracting(Measure::getMetric, m -> parseDouble(m.getPeriod().getValue()), Measure::getValue)
-      .containsExactlyInAnyOrder(tuple(newBug.getKey(), measure.getValue(), ""));
-  }
-
-  @Test
-  public void new_issue_count_measures_are_not_transformed_if_they_dont_exist_in_pr() {
-    ProjectData projectData = db.components().insertPrivateProject();
-    ComponentDto mainBranch = projectData.getMainBranchComponent();
-    addProjectPermission(projectData);
-    ComponentDto pr = db.components().insertProjectBranch(mainBranch, b -> b.setKey("pr").setBranchType(PULL_REQUEST));
-    userSession.addProjectBranchMapping(projectData.projectUuid(), pr);
-    SnapshotDto analysis = db.components().insertSnapshot(pr);
-    ComponentDto file = db.components().insertComponent(newFileDto(pr, mainBranch.uuid()));
-    MetricDto bug = db.measures().insertMetric(m -> m.setValueType(INT.name()).setKey(CoreMetrics.BUGS_KEY));
-    MetricDto newBug = db.measures().insertMetric(m -> m.setValueType(INT.name()).setKey(CoreMetrics.NEW_BUGS_KEY));
-
-    ComponentTreeWsResponse response = ws.newRequest()
-      .setParam(PARAM_COMPONENT, file.getKey())
-      .setParam(PARAM_PULL_REQUEST, "pr")
-      .setParam(PARAM_METRIC_KEYS, newBug.getKey() + "," + bug.getKey())
-      .executeProtobuf(ComponentTreeWsResponse.class);
-
-    assertThat(response.getBaseComponent()).extracting(Component::getKey, Component::getPullRequest)
-      .containsExactlyInAnyOrder(file.getKey(), "pr");
-    assertThat(response.getBaseComponent().getMeasuresList())
-      .isEmpty();
-  }
-
   @Test
   public void metric_without_a_domain() {
     ProjectData projectData = db.components().insertPrivateProject();
index e753537b48c21e5dc08ab9710036246ecaec0fc5..4ab014e88af9656135e972b0daaad0a6c737df22 100644 (file)
@@ -145,31 +145,17 @@ public class ComponentAction implements MeasuresWsAction {
       checkPermissions(component);
       SnapshotDto analysis = dbClient.snapshotDao().selectLastAnalysisByRootComponentUuid(dbSession, component.branchUuid()).orElse(null);
 
-      boolean isPR = isPR(pullRequest);
-
-      Set<String> metricKeysToRequest = new HashSet<>(request.metricKeys);
-
-      if (isPR) {
-        PrMeasureFix.addReplacementMetricKeys(metricKeysToRequest);
-      }
-
-      List<MetricDto> metrics = searchMetrics(dbSession, metricKeysToRequest);
+      List<MetricDto> metrics = searchMetrics(dbSession, new HashSet<>(request.getMetricKeys()));
       List<LiveMeasureDto> measures = searchMeasures(dbSession, component, metrics);
       Map<MetricDto, LiveMeasureDto> measuresByMetric = getMeasuresByMetric(measures, metrics);
 
-      if (isPR) {
-        Set<String> originalMetricKeys = new HashSet<>(request.metricKeys);
-        PrMeasureFix.createReplacementMeasures(metrics, measuresByMetric, originalMetricKeys);
-        PrMeasureFix.removeMetricsNotRequested(metrics, originalMetricKeys);
-      }
-
       Optional<Measures.Period> period = snapshotToWsPeriods(analysis);
       Optional<RefComponent> reference = getReference(dbSession, component);
       return buildResponse(dbSession, request, component, reference, measuresByMetric, metrics, period);
     }
   }
 
-  public List<MetricDto> searchMetrics(DbSession dbSession, Collection<String> metricKeys) {
+  public List<MetricDto> searchMetrics(DbSession dbSession, Set<String> metricKeys) {
     List<MetricDto> metrics = dbClient.metricDao().selectByKeys(dbSession, metricKeys);
     if (metrics.size() < metricKeys.size()) {
       Set<String> foundMetricKeys = metrics.stream().map(MetricDto::getKey).collect(Collectors.toSet());
@@ -222,10 +208,6 @@ public class ComponentAction implements MeasuresWsAction {
     }
   }
 
-  private static boolean isPR(@Nullable String pullRequest) {
-    return pullRequest != null;
-  }
-
   private ComponentDto loadComponent(DbSession dbSession, ComponentRequest request, @Nullable String branch, @Nullable String pullRequest) {
     String componentKey = request.getComponent();
     checkRequest(componentKey != null, "The '%s' parameter is missing", PARAM_COMPONENT);
index 8a3492e6b16cc745e22d0d9517985fda4a43b117..3e089a836a9a279be715b25bd29a79e85e57ef03 100644 (file)
@@ -104,8 +104,8 @@ import static org.sonar.server.measure.ws.SnapshotDtoToWsPeriod.snapshotToWsPeri
 import static org.sonar.server.ws.KeyExamples.KEY_BRANCH_EXAMPLE_001;
 import static org.sonar.server.ws.KeyExamples.KEY_PROJECT_EXAMPLE_001;
 import static org.sonar.server.ws.KeyExamples.KEY_PULL_REQUEST_EXAMPLE_001;
-import static org.sonar.server.ws.WsParameterBuilder.createQualifiersParameter;
 import static org.sonar.server.ws.WsParameterBuilder.QualifierParameterContext.newQualifierParameterContext;
+import static org.sonar.server.ws.WsParameterBuilder.createQualifiersParameter;
 import static org.sonar.server.ws.WsUtils.writeProtobuf;
 
 /**
@@ -426,26 +426,12 @@ public class ComponentTreeAction implements MeasuresWsAction {
           .build();
       }
 
-      Set<String> requestedMetricKeys = new HashSet<>(wsRequest.getMetricKeys());
-      Set<String> metricKeysToSearch = new HashSet<>(requestedMetricKeys);
-
-      boolean isPR = isPR(wsRequest.getPullRequest());
-      if (isPR) {
-        PrMeasureFix.addReplacementMetricKeys(metricKeysToSearch);
-      }
-
       ComponentTreeQuery componentTreeQuery = toComponentTreeQuery(wsRequest, baseComponent);
       List<ComponentDto> components = searchComponents(dbSession, componentTreeQuery);
 
-      List<MetricDto> metrics = searchMetrics(dbSession, metricKeysToSearch);
-      Table<String, MetricDto, ComponentTreeData.Measure> measuresByComponentUuidAndMetric = searchMeasuresByComponentUuidAndMetric(dbSession, baseComponent, componentTreeQuery,
-        components,
-        metrics);
-
-      if (isPR) {
-        PrMeasureFix.removeMetricsNotRequested(metrics, requestedMetricKeys);
-        PrMeasureFix.createReplacementMeasures(metrics, measuresByComponentUuidAndMetric, requestedMetricKeys);
-      }
+      List<MetricDto> metrics = searchMetrics(dbSession, new HashSet<>(wsRequest.getMetricKeys()));
+      Table<String, MetricDto, ComponentTreeData.Measure> measuresByComponentUuidAndMetric =
+        searchMeasuresByComponentUuidAndMetric(dbSession, baseComponent, componentTreeQuery, components, metrics);
 
       components = filterComponents(components, measuresByComponentUuidAndMetric, metrics, wsRequest);
       components = filterAuthorizedComponents(components);
@@ -477,10 +463,6 @@ public class ComponentTreeAction implements MeasuresWsAction {
       .collect(Collectors.toMap(BranchDto::getUuid, BranchDto::getBranchKey));
   }
 
-  private static boolean isPR(@Nullable String pullRequest) {
-    return pullRequest != null;
-  }
-
   private ComponentDto loadComponent(DbSession dbSession, ComponentTreeRequest request) {
     String componentKey = request.getComponent();
     String branch = request.getBranch();
diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/measure/ws/PrMeasureFix.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/measure/ws/PrMeasureFix.java
deleted file mode 100644 (file)
index 7e75547..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2023 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.server.measure.ws;
-
-import com.google.common.collect.BiMap;
-import com.google.common.collect.HashBiMap;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Table;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
-import org.sonar.db.measure.LiveMeasureDto;
-import org.sonar.db.metric.MetricDto;
-
-import static org.sonar.api.measures.CoreMetrics.BLOCKER_VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.BUGS_KEY;
-import static org.sonar.api.measures.CoreMetrics.CODE_SMELLS_KEY;
-import static org.sonar.api.measures.CoreMetrics.CRITICAL_VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.INFO_VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.MAJOR_VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.MINOR_VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_BLOCKER_VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_BUGS_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_CODE_SMELLS_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_CRITICAL_VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_INFO_VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_MAJOR_VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_MINOR_VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_RELIABILITY_RATING_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_RELIABILITY_REMEDIATION_EFFORT_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_SECURITY_RATING_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_SECURITY_REMEDIATION_EFFORT_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_TECHNICAL_DEBT_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_VULNERABILITIES_KEY;
-import static org.sonar.api.measures.CoreMetrics.RELIABILITY_RATING_KEY;
-import static org.sonar.api.measures.CoreMetrics.RELIABILITY_REMEDIATION_EFFORT_KEY;
-import static org.sonar.api.measures.CoreMetrics.SECURITY_RATING_KEY;
-import static org.sonar.api.measures.CoreMetrics.SECURITY_REMEDIATION_EFFORT_KEY;
-import static org.sonar.api.measures.CoreMetrics.TECHNICAL_DEBT_KEY;
-import static org.sonar.api.measures.CoreMetrics.VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.VULNERABILITIES_KEY;
-
-/**
- * See SONAR-11736
- * This class should be removed in 8.0.
- */
-class PrMeasureFix {
-  static final BiMap<String, String> METRICS;
-
-  static {
-    METRICS = HashBiMap.create();
-
-    METRICS.put(NEW_VIOLATIONS_KEY, VIOLATIONS_KEY);
-
-    // issue severities
-    METRICS.put(NEW_BLOCKER_VIOLATIONS_KEY, BLOCKER_VIOLATIONS_KEY);
-    METRICS.put(NEW_CRITICAL_VIOLATIONS_KEY, CRITICAL_VIOLATIONS_KEY);
-    METRICS.put(NEW_MAJOR_VIOLATIONS_KEY, MAJOR_VIOLATIONS_KEY);
-    METRICS.put(NEW_MINOR_VIOLATIONS_KEY, MINOR_VIOLATIONS_KEY);
-    METRICS.put(NEW_INFO_VIOLATIONS_KEY, INFO_VIOLATIONS_KEY);
-
-    // issue types
-    METRICS.put(NEW_BUGS_KEY, BUGS_KEY);
-    METRICS.put(NEW_CODE_SMELLS_KEY, CODE_SMELLS_KEY);
-    METRICS.put(NEW_VULNERABILITIES_KEY, VULNERABILITIES_KEY);
-
-    // ratings
-    METRICS.put(NEW_SECURITY_RATING_KEY, SECURITY_RATING_KEY);
-    METRICS.put(NEW_RELIABILITY_RATING_KEY, RELIABILITY_RATING_KEY);
-
-    // effort
-    METRICS.put(NEW_TECHNICAL_DEBT_KEY, TECHNICAL_DEBT_KEY);
-    METRICS.put(NEW_SECURITY_REMEDIATION_EFFORT_KEY, SECURITY_REMEDIATION_EFFORT_KEY);
-    METRICS.put(NEW_RELIABILITY_REMEDIATION_EFFORT_KEY, RELIABILITY_REMEDIATION_EFFORT_KEY);
-  }
-
-  private PrMeasureFix() {
-    // static only
-  }
-
-  static void addReplacementMetricKeys(Collection<String> metricKeys) {
-    Set<String> keysToAdd = metricKeys.stream()
-      .filter(METRICS::containsKey)
-      .map(METRICS::get)
-      .collect(Collectors.toSet());
-    metricKeys.addAll(keysToAdd);
-  }
-
-  static void removeMetricsNotRequested(List<MetricDto> metrics, Set<String> requestedMetricKeys) {
-    metrics.removeIf(m -> !requestedMetricKeys.contains(m.getKey()));
-  }
-
-  static void createReplacementMeasures(List<MetricDto> metrics, Table<String, MetricDto, ComponentTreeData.Measure> measuresByComponentUuidAndMetric,
-    Set<String> requestedMetricKeys) {
-    Map<String, MetricDto> metricByKey = Maps.uniqueIndex(metrics, MetricDto::getKey);
-
-    for (MetricDto metric : measuresByComponentUuidAndMetric.columnKeySet()) {
-      Map<String, ComponentTreeData.Measure> newEntries = new HashMap<>();
-
-      String originalKey = METRICS.inverse().get(metric.getKey());
-      if (originalKey != null && requestedMetricKeys.contains(originalKey)) {
-        for (Map.Entry<String, ComponentTreeData.Measure> e : measuresByComponentUuidAndMetric.column(metric).entrySet()) {
-          newEntries.put(e.getKey(), e.getValue());
-        }
-
-        MetricDto originalMetric = metricByKey.get(originalKey);
-        newEntries.forEach((k, v) -> measuresByComponentUuidAndMetric.put(k, originalMetric, v));
-      }
-    }
-
-    List<MetricDto> toRemove = measuresByComponentUuidAndMetric.columnKeySet().stream().filter(m -> !requestedMetricKeys.contains(m.getKey())).toList();
-    measuresByComponentUuidAndMetric.columnKeySet().removeAll(toRemove);
-  }
-
-  static void createReplacementMeasures(List<MetricDto> metrics, Map<MetricDto, LiveMeasureDto> measuresByMetric, Set<String> requestedMetricKeys) {
-    Map<String, MetricDto> metricByKey = Maps.uniqueIndex(metrics, MetricDto::getKey);
-    Map<MetricDto, LiveMeasureDto> newEntries = new HashMap<>();
-
-    for (Map.Entry<MetricDto, LiveMeasureDto> e : measuresByMetric.entrySet()) {
-      String originalKey = METRICS.inverse().get(e.getKey().getKey());
-
-      if (originalKey != null && requestedMetricKeys.contains(originalKey)) {
-        MetricDto metricDto = metricByKey.get(originalKey);
-        newEntries.put(metricDto, copyMeasure(e.getValue(), metricDto.getUuid()));
-      }
-    }
-
-    measuresByMetric.entrySet().removeIf(e -> !requestedMetricKeys.contains(e.getKey().getKey()));
-    measuresByMetric.putAll(newEntries);
-  }
-
-  private static LiveMeasureDto copyMeasure(LiveMeasureDto dto, String metricUuid) {
-    LiveMeasureDto copy = new LiveMeasureDto();
-    copy.setValue(dto.getValue());
-    copy.setProjectUuid(dto.getProjectUuid());
-    copy.setComponentUuid(dto.getComponentUuid());
-    copy.setMetricUuid(metricUuid);
-    return copy;
-  }
-}
diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/measure/ws/prMeasureFixTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/measure/ws/prMeasureFixTest.java
deleted file mode 100644 (file)
index 83958ff..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2023 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.server.measure.ws;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import javax.annotation.Nullable;
-import org.junit.Test;
-import org.sonar.db.measure.LiveMeasureDto;
-import org.sonar.db.metric.MetricDto;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.tuple;
-import static org.sonar.api.measures.CoreMetrics.BUGS_KEY;
-import static org.sonar.api.measures.CoreMetrics.MINOR_VIOLATIONS_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_BUGS_KEY;
-import static org.sonar.api.measures.CoreMetrics.NEW_MINOR_VIOLATIONS_KEY;
-
-public class prMeasureFixTest {
-
-  @Test
-  public void should_add_replacement_metrics() {
-    List<String> metricList = new ArrayList<>(Arrays.asList(NEW_BUGS_KEY, NEW_MINOR_VIOLATIONS_KEY));
-    PrMeasureFix.addReplacementMetricKeys(metricList);
-    assertThat(metricList).contains(BUGS_KEY, NEW_BUGS_KEY, MINOR_VIOLATIONS_KEY, NEW_MINOR_VIOLATIONS_KEY);
-  }
-
-  @Test
-  public void should_remove_metrics_not_initially_requested() {
-    Set<String> originalMetricList = new HashSet<>(Arrays.asList(NEW_BUGS_KEY, MINOR_VIOLATIONS_KEY, NEW_MINOR_VIOLATIONS_KEY));
-    MetricDto dto1 = new MetricDto().setKey(BUGS_KEY).setUuid("1");
-    MetricDto dto2 = new MetricDto().setKey(NEW_BUGS_KEY).setUuid("2");
-    MetricDto dto3 = new MetricDto().setKey(MINOR_VIOLATIONS_KEY).setUuid("3");
-    MetricDto dto4 = new MetricDto().setKey(NEW_MINOR_VIOLATIONS_KEY).setUuid("4");
-
-    List<MetricDto> metricList = new ArrayList<>(Arrays.asList(dto1, dto2, dto3, dto4));
-
-    PrMeasureFix.removeMetricsNotRequested(metricList, originalMetricList);
-    assertThat(metricList).containsOnly(dto2, dto3, dto4);
-  }
-
-  @Test
-  public void should_transform_measures() {
-    Set<String> requestedKeys = new HashSet<>(Arrays.asList(NEW_BUGS_KEY, MINOR_VIOLATIONS_KEY, NEW_MINOR_VIOLATIONS_KEY));
-
-    MetricDto bugsMetric = new MetricDto().setKey(BUGS_KEY).setUuid("1");
-    MetricDto newBugsMetric = new MetricDto().setKey(NEW_BUGS_KEY).setUuid("2");
-    MetricDto violationsMetric = new MetricDto().setKey(MINOR_VIOLATIONS_KEY).setUuid("3");
-    MetricDto newViolationsMetric = new MetricDto().setKey(NEW_MINOR_VIOLATIONS_KEY).setUuid("4");
-
-    List<MetricDto> metricList = Arrays.asList(bugsMetric, newBugsMetric, violationsMetric, newViolationsMetric);
-
-    LiveMeasureDto bugs = createLiveMeasure(bugsMetric.getUuid(), 10.0);
-    LiveMeasureDto newBugs = createLiveMeasure(newBugsMetric.getUuid(), 5.0);
-    LiveMeasureDto violations = createLiveMeasure(violationsMetric.getUuid(), 20.0);
-    LiveMeasureDto newViolations = createLiveMeasure(newViolationsMetric.getUuid(), 3.0);
-
-    Map<MetricDto, LiveMeasureDto> measureByMetric = new HashMap<>();
-    measureByMetric.put(bugsMetric, bugs);
-    measureByMetric.put(newBugsMetric, newBugs);
-    measureByMetric.put(violationsMetric, violations);
-    measureByMetric.put(newViolationsMetric, newViolations);
-
-    PrMeasureFix.createReplacementMeasures(metricList, measureByMetric, requestedKeys);
-    assertThat(measureByMetric.entrySet()).extracting(e -> e.getKey().getKey(), e -> e.getValue().getValue())
-      .containsOnly(tuple(NEW_BUGS_KEY, 10.0),
-        tuple(MINOR_VIOLATIONS_KEY, 20.0),
-        tuple(NEW_MINOR_VIOLATIONS_KEY, 20.0));
-  }
-
-  private static LiveMeasureDto createLiveMeasure(String metricUuid, @Nullable Double value) {
-    return new LiveMeasureDto().setMetricUuid(metricUuid).setValue(value);
-  }
-}