]> source.dussan.org Git - sonarqube.git/commitdiff
Fixing SonarQube analysis issues (#2084)
authorJacek <52388493+jacek-poreda-sonarsource@users.noreply.github.com>
Fri, 20 Sep 2019 08:30:43 +0000 (10:30 +0200)
committerSonarTech <sonartech@sonarsource.com>
Tue, 24 Sep 2019 18:21:18 +0000 (20:21 +0200)
server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/period/NewCodePeriodResolver.java
server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/LoadPeriodsStep.java
server/sonar-db-dao/src/main/java/org/sonar/db/purge/period/KeepOneFilter.java
server/sonar-webserver-webapi/src/main/java/org/sonar/server/newcodeperiod/ws/SetAction.java
server/sonar-webserver-webapi/src/main/java/org/sonar/server/newcodeperiod/ws/ShowAction.java
server/sonar-webserver-webapi/src/test/java/org/sonar/server/newcodeperiod/ws/NewCodePeriodsWsTest.java [new file with mode: 0644]
sonar-plugin-api/src/main/java/org/sonar/api/server/profile/BuiltInQualityProfileAnnotationLoader.java

index 7fee57705c8cbaba41a4c325d39633f62a2076ad..5e925e88401b8624ead586f82314f2bfb8aef029 100644 (file)
@@ -62,8 +62,8 @@ public class NewCodePeriodResolver {
   private Period toPeriod(NewCodePeriodType type, @Nullable String value, DbSession dbSession, String projectVersion, String rootUuid, long referenceDate) {
     switch (type) {
       case NUMBER_OF_DAYS:
-        Integer days = NewCodePeriodParser.parseDays(value);
         checkNotNullValue(value, type);
+        Integer days = NewCodePeriodParser.parseDays(value);
         return resolveByDays(dbSession, rootUuid, days, value, referenceDate);
       case PREVIOUS_VERSION:
         return resolveByPreviousVersion(dbSession, rootUuid, projectVersion);
@@ -104,7 +104,6 @@ public class NewCodePeriodResolver {
     List<SnapshotDto> snapshots = dbClient.snapshotDao().selectAnalysesByQuery(dbSession, createCommonQuery(rootUuid)
       .setCreatedBefore(referenceDate).setSort(BY_DATE, ASC));
 
-    ensureNotOnFirstAnalysis(!snapshots.isEmpty());
     Instant targetDate = DateUtils.addDays(Instant.ofEpochMilli(referenceDate), -days);
     LOG.debug("Resolving new code period by {} days: {}", days, supplierToString(() -> logDate(targetDate)));
     SnapshotDto snapshot = findNearestSnapshotToTargetDate(snapshots, targetDate);
@@ -156,6 +155,9 @@ public class NewCodePeriodResolver {
     // FIXME shouldn't this be the first analysis after targetDate?
     Duration bestDuration = null;
     SnapshotDto nearest = null;
+
+    ensureNotOnFirstAnalysis(!snapshots.isEmpty());
+
     for (SnapshotDto snapshot : snapshots) {
       Instant createdAt = Instant.ofEpochMilli(snapshot.getCreatedAt());
       Duration duration = Duration.between(targetDate, createdAt).abs();
index 46b46ed41bc992fa0c93ba88a17752d1a3aa0617..13e7537e26555e6fb4c1a6758de98995fbc68451 100644 (file)
@@ -19,6 +19,8 @@
  */
 package org.sonar.ce.task.projectanalysis.step;
 
+import java.util.Arrays;
+import java.util.Collection;
 import java.util.Optional;
 import java.util.function.Supplier;
 import org.sonar.ce.task.projectanalysis.analysis.AnalysisMetadataHolder;
@@ -77,10 +79,11 @@ public class LoadPeriodsStep implements ComputationStep {
     String projectVersion = treeRootHolder.getRoot().getProjectAttributes().getProjectVersion();
 
     try (DbSession dbSession = dbClient.openSession(false)) {
-      Optional<NewCodePeriodDto> dto = firstPresent(
+      Optional<NewCodePeriodDto> dto = firstPresent(Arrays.asList(
         () -> getBranchSetting(dbSession, projectUuid, branchUuid),
         () -> getProjectSetting(dbSession, projectUuid),
-        () -> getGlobalSetting(dbSession));
+        () -> getGlobalSetting(dbSession)
+      ));
 
       long analysisDate = analysisMetadataHolder.getAnalysisDate();
       Period period = dto.map(d -> resolver.resolve(dbSession, branchUuid, d, analysisDate, projectVersion))
@@ -89,7 +92,7 @@ public class LoadPeriodsStep implements ComputationStep {
     }
   }
 
-  private static <T> Optional<T> firstPresent(Supplier<Optional<T>>... suppliers) {
+  private static <T> Optional<T> firstPresent(Collection<Supplier<Optional<T>>> suppliers) {
     for (Supplier<Optional<T>> supplier : suppliers) {
       Optional<T> result = supplier.get();
       if (result.isPresent()) {
index f15bf1749ddf999cd8efff1b8f714bca4cfee188..8b1d8821186d85f39e94149848da7f3f54a9cd4d 100644 (file)
@@ -20,7 +20,6 @@
 package org.sonar.db.purge.period;
 
 import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.Lists;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
index 0394cc27a70c136198650a4d7f2da082e29b20d5..96458fbb3e941c639e63c254f4e56da4fd608a94 100644 (file)
@@ -154,11 +154,7 @@ public class SetAction implements NewCodePeriodsWsAction {
         break;
       case NUMBER_OF_DAYS:
         requireValue(type, value);
-        try {
-          dto.setValue(Integer.toString(NewCodePeriodParser.parseDays(value)));
-        } catch (Exception e) {
-          throw new IllegalArgumentException("Failed to parse number of days: " + value);
-        }
+        dto.setValue(parseDays(value));
         break;
       case SPECIFIC_ANALYSIS:
         requireValue(type, value);
@@ -171,6 +167,14 @@ public class SetAction implements NewCodePeriodsWsAction {
     }
   }
 
+  private static String parseDays(String value) {
+    try {
+      return Integer.toString(NewCodePeriodParser.parseDays(value));
+    } catch (Exception e) {
+      throw new IllegalArgumentException("Failed to parse number of days: " + value);
+    }
+  }
+
   private static void requireValue(NewCodePeriodType type, @Nullable String value) {
     Preconditions.checkArgument(value != null, "New Code Period type '%s' requires a value", type);
   }
index c46343aca4b4540be158523ede6c52ce9ff399e8..0460b4d753505dad203b9b545547f19960684782 100644 (file)
@@ -133,7 +133,7 @@ public class ShowAction implements NewCodePeriodsWsAction {
       .orElseGet(() -> get(dbSession, projectUuid, null, true));
   }
 
-  private ShowWSResponse.Builder build(NewCodePeriodDto dto, boolean inherited) {
+  private static ShowWSResponse.Builder build(NewCodePeriodDto dto, boolean inherited) {
     ShowWSResponse.Builder builder = ShowWSResponse.newBuilder()
       .setType(convertType(dto.getType()))
       .setInherited(inherited);
@@ -144,7 +144,7 @@ public class ShowAction implements NewCodePeriodsWsAction {
     return builder;
   }
 
-  private ShowWSResponse.Builder buildDefault(boolean inherited) {
+  private static ShowWSResponse.Builder buildDefault(boolean inherited) {
     return ShowWSResponse.newBuilder()
       .setType(convertType(NewCodePeriodType.PREVIOUS_VERSION))
       .setInherited(inherited);
diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/newcodeperiod/ws/NewCodePeriodsWsTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/newcodeperiod/ws/NewCodePeriodsWsTest.java
new file mode 100644 (file)
index 0000000..54c4561
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2019 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.newcodeperiod.ws;
+
+import org.junit.Test;
+import org.sonar.api.server.ws.Request;
+import org.sonar.api.server.ws.Response;
+import org.sonar.api.server.ws.WebService;
+
+import static org.apache.commons.lang.RandomStringUtils.randomAlphanumeric;
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class NewCodePeriodsWsTest {
+  private String actionKey = randomAlphanumeric(10);
+  private NewCodePeriodsWs underTest = new NewCodePeriodsWs(
+    new NewCodePeriodsWsAction() {
+      @Override
+      public void define(WebService.NewController context) {
+        context.createAction(actionKey).setHandler(this);
+      }
+
+      @Override
+      public void handle(Request request, Response response) {
+
+      }
+    }
+  );
+
+  @Test
+  public void define_ws() {
+    WebService.Context context = new WebService.Context();
+
+    underTest.define(context);
+
+    WebService.Controller controller = context.controller("api/new_code_periods");
+    assertThat(controller).isNotNull();
+    assertThat(controller.description()).isNotEmpty();
+    assertThat(controller.actions()).hasSize(1);
+  }
+
+}
index bb87c1fabcf5d90cc99cba0ca4be8364c5bf2aca..88bcb3f61ef108f43615bcc67f4c8ca579664c45 100644 (file)
@@ -19,7 +19,6 @@
  */
 package org.sonar.api.server.profile;
 
-import javax.annotation.CheckForNull;
 import org.apache.commons.lang.StringUtils;
 import org.sonar.api.rules.RuleAnnotationUtils;
 import org.sonar.api.server.ServerSide;