From 572ca92110d132b14ea08b302b76ec7e1429c4d2 Mon Sep 17 00:00:00 2001 From: Matthias Mayer Date: Mon, 10 Jan 2022 18:55:29 +0100 Subject: [PATCH] Update dependencies and require to java 11 --- pom.xml | 43 +++++++----- .../sonargerrit/SonarToGerritPublisher.java | 66 +++++++++++-------- .../sonargerrit/inspection/entity/Issue.java | 3 +- .../review/GerritConnectionInfo.java | 4 +- .../sonargerrit/sonar/SonarClient.java | 10 +-- .../plugins/sonargerrit/DummyRevisionApi.java | 42 ++++++++++++ 6 files changed, 117 insertions(+), 51 deletions(-) diff --git a/pom.xml b/pom.xml index 34c5c76a..7183a0dc 100644 --- a/pom.xml +++ b/pom.xml @@ -1,12 +1,13 @@ - + 4.0.0 org.jenkins-ci.plugins plugin - 4.4 - + 4.32 + sonar-gerrit @@ -25,7 +26,9 @@ ~ hpi-plugin.version: The HPI Maven Plugin version used by the plugin.. ~ stapler-plugin.version: The Stapler Maven plugin version required by the plugin. --> - 2.31 + 3.0.3 + 2.277.1 + 11 Sonar Gerrit Plugin @@ -54,7 +57,7 @@ scm:git:ssh://git@github.com/jenkinsci/${project.artifactId}-plugin.git https://github.com/jenkinsci/${project.artifactId}-plugin - sonar-gerrit-2.4.3 + sonar-gerrit-3.0.2 @@ -88,6 +91,7 @@ org.jenkins-ci.tools maven-hpi-plugin true + 1.0 @@ -146,17 +150,17 @@ commons-net commons-net - 3.6 + 3.8.0 com.google.code.gson gson - 2.8.5 + 2.8.8 org.jenkins-ci.plugins.workflow workflow-step-api - 2.22 + 2.23 org.jenkins-ci.plugins.workflow @@ -171,17 +175,17 @@ commons-codec commons-codec - 1.14 + 1.15 org.apache.commons commons-lang3 - 3.10 + 3.11 org.jenkins-ci.plugins scm-api - 2.6.3 + 2.6.4 org.jenkins-ci.plugins @@ -196,24 +200,24 @@ org.jenkins-ci.plugins structs - 1.20 + 308.v852b473a2b8c com.sonyericsson.hudson.plugins.gerrit gerrit-trigger - 2.30.5 + 2.35.2 org.jenkins-ci.plugins token-macro - 2.12 + 267.vcdaea6462991 org.jenkins-ci.plugins sonar - 2.12 + 2.14 @@ -223,12 +227,12 @@ com.google.guava guava - 20.0 + 31.0.1-jre com.urswolfer.gerrit.client.rest gerrit-rest-java-client - 0.9.2 + 0.9.4 @@ -247,5 +251,10 @@ jersey-media-json-binding ${jersey.version} + + com.google.code.findbugs + jsr305 + 3.0.0 + diff --git a/src/main/java/org/jenkinsci/plugins/sonargerrit/SonarToGerritPublisher.java b/src/main/java/org/jenkinsci/plugins/sonargerrit/SonarToGerritPublisher.java index 5361e3ee..572812b7 100644 --- a/src/main/java/org/jenkinsci/plugins/sonargerrit/SonarToGerritPublisher.java +++ b/src/main/java/org/jenkinsci/plugins/sonargerrit/SonarToGerritPublisher.java @@ -59,21 +59,16 @@ import hudson.tasks.Publisher; import jenkins.tasks.SimpleBuildStep; -/** - * Project: Sonar-Gerrit Plugin - * Author: Tatiana Didik - */ public class SonarToGerritPublisher extends Publisher implements SimpleBuildStep { private static final Logger LOGGER = Logger.getLogger(SonarToGerritPublisher.class.getName()); + public static final String GERRIT_CHANGE_NUMBER_ENV_VAR_NAME = "GERRIT_CHANGE_NUMBER"; + public static final String GERRIT_NAME_ENV_VAR_NAME = "GERRIT_NAME"; + public static final String GERRIT_PATCHSET_NUMBER_ENV_VAR_NAME = "GERRIT_PATCHSET_NUMBER"; - // ------------------ configuration settings - /* - * The URL of SonarQube server to be used for comments - * */ @Nonnull private InspectionConfig inspectionConfig = new InspectionConfig(); @@ -96,11 +91,11 @@ public SonarToGerritPublisher() { // @DataBoundConstructor @Deprecated //since 2.0. Left here for Jenkins version < 1.625.3 public SonarToGerritPublisher(String sonarURL, List subJobConfigs, - String severity, boolean changedLinesOnly, boolean newIssuesOnly, - String noIssuesToPostText, String someIssuesToPostText, String issueComment, - boolean overrideCredentials, String httpUsername, String httpPassword, - boolean postScore, String category, String noIssuesScore, String issuesScore, - String noIssuesNotification, String issuesNotification) { + String severity, boolean changedLinesOnly, boolean newIssuesOnly, + String noIssuesToPostText, String someIssuesToPostText, String issueComment, + boolean overrideCredentials, String httpUsername, String httpPassword, + boolean postScore, String category, String noIssuesScore, String issuesScore, + String noIssuesNotification, String issuesNotification) { setSonarURL(sonarURL); setSubJobConfigs(subJobConfigs); @@ -114,19 +109,23 @@ public SonarToGerritPublisher(String sonarURL, List subJobConfigs, setReviewConfig(reviewConfig); if (postScore) { - ScoreConfig scoreConfig = new ScoreConfig(issueFilterConfig, category, Integer.parseInt(noIssuesScore), Integer.parseInt(issuesScore)); + ScoreConfig scoreConfig = new ScoreConfig(issueFilterConfig, category, Integer.parseInt(noIssuesScore), Integer + .parseInt(issuesScore)); setScoreConfig(scoreConfig); } else { setScoreConfig(null); } - NotificationConfig notificationConfig = new NotificationConfig(noIssuesNotification, issuesNotification, issuesNotification); + NotificationConfig notificationConfig = new NotificationConfig(noIssuesNotification, issuesNotification, + issuesNotification); setNotificationConfig(notificationConfig); } @Override - public void perform(@Nonnull Run run, @Nonnull FilePath filePath, @Nonnull Launcher launcher, @Nonnull TaskListener listener) throws InterruptedException, IOException { - TaskListenerLogger.logMessage(listener, LOGGER, Level.INFO, "jenkins.plugin.sonar.start", inspectionConfig.getAnalysisType()); + public void perform(@Nonnull Run run, @Nonnull FilePath filePath, @Nonnull Launcher launcher, + @Nonnull TaskListener listener) throws InterruptedException, IOException { + TaskListenerLogger + .logMessage(listener, LOGGER, Level.INFO, "jenkins.plugin.sonar.start", inspectionConfig.getAnalysisType()); //load inspection report SonarConnector sonarConnector = new SonarConnector(run, listener, inspectionConfig); @@ -153,7 +152,9 @@ public void perform(@Nonnull Run run, @Nonnull FilePath filePath, @Nonnull //get issues to be commented Multimap file2issuesToComment = getFilteredFileToIssueMultimap( reviewConfig.getIssueFilterConfig(), sonarConnector, fileToChangedLines); - TaskListenerLogger.logMessage(listener, LOGGER, Level.INFO, "jenkins.plugin.issues.to.comment", file2issuesToComment.entries().size()); + TaskListenerLogger + .logMessage(listener, LOGGER, Level.INFO, "jenkins.plugin.issues.to.comment", file2issuesToComment.entries() + .size()); //get issues to be scored Multimap file2issuesToScore = null; @@ -161,7 +162,9 @@ public void perform(@Nonnull Run run, @Nonnull FilePath filePath, @Nonnull if (postScore) { file2issuesToScore = getFilteredFileToIssueMultimap( scoreConfig.getIssueFilterConfig(), sonarConnector, fileToChangedLines); - TaskListenerLogger.logMessage(listener, LOGGER, Level.INFO, "jenkins.plugin.issues.to.score", file2issuesToScore.entries().size()); + TaskListenerLogger + .logMessage(listener, LOGGER, Level.INFO, "jenkins.plugin.issues.to.score", file2issuesToScore.entries() + .size()); } String serverUrl; @@ -187,14 +190,15 @@ public void perform(@Nonnull Run run, @Nonnull FilePath filePath, @Nonnull } private Multimap getFilteredFileToIssueMultimap(IssueFilterConfig filterConfig, - SonarConnector sonarConnector, - Map> fileToChangedLines) { + SonarConnector sonarConnector, + Map> fileToChangedLines) { IssueFilter commentFilter = new IssueFilter(filterConfig, sonarConnector.getIssues(), fileToChangedLines); Iterable issuesToComment = commentFilter.filter(); return sonarConnector.getReportData(issuesToComment); } - private Map getEnvVars(Run run, TaskListener listener, List varNames) throws IOException, InterruptedException { + private Map getEnvVars(Run run, TaskListener listener, List varNames) throws IOException, + InterruptedException { Map envVars = new HashMap<>(); for (String varName : varNames) { envVars.put(varName, getEnvVar(run, listener, varName)); @@ -205,7 +209,8 @@ private Map getEnvVars(Run run, TaskListener listener, Lis private String getEnvVar(Run run, TaskListener listener, String name) throws IOException, InterruptedException { EnvVars envVars = run.getEnvironment(listener); String value = envVars.get(name); - // due to JENKINS-30910 old versions of workflow-job-plugin do not have code copying ParameterAction values to Environment Variables in pipeline jobs. + // due to JENKINS-30910 old versions of workflow-job-plugin do not have code copying ParameterAction values to + // Environment Variables in pipeline jobs. if (value == null) { ParametersAction action = run.getAction(ParametersAction.class); if (action != null) { @@ -234,12 +239,10 @@ public BuildStepMonitor getRequiredMonitorService() { return BuildStepMonitor.NONE; } - /** * Descriptor for {@link SonarToGerritPublisher}. Used as a singleton. * The class is marked as public so that it can be accessed from views. *

- * See src/main/resources/hudson/plugins/hello_world/SonarToGerritBuilder/*.jelly * for the actual HTML fragment for the configuration screen. */ @Symbol("sonarToGerrit") @@ -247,34 +250,45 @@ public BuildStepMonitor getRequiredMonitorService() { public static final class DescriptorImpl extends BuildStepDescriptor { public static final NotifyHandling NOTIFICATION_RECIPIENT_NO_ISSUES = NotifyHandling.NONE; + public static final NotifyHandling NOTIFICATION_RECIPIENT_SOME_ISSUES = NotifyHandling.OWNER; + public static final NotifyHandling NOTIFICATION_RECIPIENT_NEGATIVE_SCORE = NotifyHandling.OWNER; public static final String PROJECT_PATH = ""; + public static final String SONAR_REPORT_PATH = "target/sonar/sonar-report.json"; + public static final String SONAR_URL = "http://localhost:9000"; + public static final String SONAR_PULLREQUEST_KEY = "${GERRIT_CHANGE_NUMBER}"; public static final String DEFAULT_INSPECTION_CONFIG_TYPE = InspectionConfig.DescriptorImpl.BASE_TYPE; + public static final boolean AUTO_MATCH_INSPECTION_AND_REVISION_PATHS = false; public static final String NO_ISSUES_TEXT = Localization.getLocalized("jenkins.plugin.default.review.title.no.issues"); + public static final String SOME_ISSUES_TEXT = Localization.getLocalized("jenkins.plugin.default.review.title.issues"); + public static final String ISSUE_COMMENT_TEXT = Localization.getLocalized("jenkins.plugin.default.review.body"); public static final String CATEGORY = "Code-Review"; + public static final Integer NO_ISSUES_SCORE = 1; + public static final Integer SOME_ISSUES_SCORE = -1; public static final boolean OVERRIDE_CREDENTIALS = false; public static final String SEVERITY = Severity.INFO.name(); + public static final boolean NEW_ISSUES_ONLY = false; + public static final boolean CHANGED_LINES_ONLY = false; public static final int DEFAULT_SCORE = 0; - /** * In order to load the persisted global configuration, you have to * call load() in the constructor. diff --git a/src/main/java/org/jenkinsci/plugins/sonargerrit/inspection/entity/Issue.java b/src/main/java/org/jenkinsci/plugins/sonargerrit/inspection/entity/Issue.java index 70084942..3cbc774d 100644 --- a/src/main/java/org/jenkinsci/plugins/sonargerrit/inspection/entity/Issue.java +++ b/src/main/java/org/jenkinsci/plugins/sonargerrit/inspection/entity/Issue.java @@ -1,10 +1,9 @@ package org.jenkinsci.plugins.sonargerrit.inspection.entity; -import javax.json.bind.annotation.JsonbDateFormat; - import java.util.Date; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import jakarta.json.bind.annotation.JsonbDateFormat; /** * Project: Sonar-Gerrit Plugin diff --git a/src/main/java/org/jenkinsci/plugins/sonargerrit/review/GerritConnectionInfo.java b/src/main/java/org/jenkinsci/plugins/sonargerrit/review/GerritConnectionInfo.java index 2b1e3643..7f9cc2e2 100644 --- a/src/main/java/org/jenkinsci/plugins/sonargerrit/review/GerritConnectionInfo.java +++ b/src/main/java/org/jenkinsci/plugins/sonargerrit/review/GerritConnectionInfo.java @@ -3,7 +3,6 @@ import com.google.common.base.MoreObjects; import com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger; import org.jenkinsci.plugins.sonargerrit.config.AuthenticationConfig; -import org.jenkinsci.plugins.sonargerrit.review.ConnectionInfo; import org.jenkinsci.plugins.sonargerrit.util.DataHelper; import java.util.Arrays; @@ -13,6 +12,8 @@ import static org.jenkinsci.plugins.sonargerrit.util.Localization.getLocalized; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; + /** * Project: Sonar-Gerrit Plugin * Author: Tatiana Didik @@ -70,6 +71,7 @@ public String getPassword() { return password; } + @SuppressFBWarnings("NP_NULL_PARAM_DEREF") private String retrieveServerName(Map envVars, GerritTrigger trigger) { String serverName = envVars.get(GERRIT_NAME_ENV_VAR_NAME); String triggerServerName = trigger != null ? trigger.getServerName() : null; diff --git a/src/main/java/org/jenkinsci/plugins/sonargerrit/sonar/SonarClient.java b/src/main/java/org/jenkinsci/plugins/sonargerrit/sonar/SonarClient.java index 1b11ca60..9f60dff8 100644 --- a/src/main/java/org/jenkinsci/plugins/sonargerrit/sonar/SonarClient.java +++ b/src/main/java/org/jenkinsci/plugins/sonargerrit/sonar/SonarClient.java @@ -1,10 +1,10 @@ package org.jenkinsci.plugins.sonargerrit.sonar; import javax.annotation.Nullable; -import javax.ws.rs.client.Client; -import javax.ws.rs.client.ClientBuilder; -import javax.ws.rs.client.WebTarget; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.client.Client; +import jakarta.ws.rs.client.ClientBuilder; +import jakarta.ws.rs.client.WebTarget; +import jakarta.ws.rs.core.MediaType; import org.apache.commons.lang.StringUtils; import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature; @@ -82,7 +82,7 @@ public ComponentSearchResult fetchComponents(@Nullable String component) { ComponentSearchResult componentSearchResult = null; Integer total = null; - for (int currentPage = 1; total == null || (currentPage - 1) * PAGE_SIZE < total; currentPage++) { + for (int currentPage = 1; (total == null) || (((currentPage - 1) * PAGE_SIZE) < total); currentPage++) { ComponentSearchResult pageResult = fetchComponents(component, currentPage); if (componentSearchResult == null) { componentSearchResult = pageResult; diff --git a/src/test/java/org/jenkinsci/plugins/sonargerrit/DummyRevisionApi.java b/src/test/java/org/jenkinsci/plugins/sonargerrit/DummyRevisionApi.java index 0858417a..f97c3121 100644 --- a/src/test/java/org/jenkinsci/plugins/sonargerrit/DummyRevisionApi.java +++ b/src/test/java/org/jenkinsci/plugins/sonargerrit/DummyRevisionApi.java @@ -1,6 +1,8 @@ package org.jenkinsci.plugins.sonargerrit; +import com.google.common.collect.ListMultimap; import com.google.gerrit.extensions.api.changes.*; +import com.google.gerrit.extensions.client.ArchiveFormat; import com.google.gerrit.extensions.client.SubmitType; import com.google.gerrit.extensions.common.*; import com.google.gerrit.extensions.restapi.BinaryResult; @@ -62,6 +64,16 @@ public DiffRequest diffRequest() throws RestApiException { throw new UnsupportedOperationException("This is a dummy test class"); } + @Override + public void setReviewed(boolean b) throws RestApiException { + + } + + @Override + public BlameRequest blameRequest() throws RestApiException { + return null; + } + }; } @@ -140,6 +152,11 @@ public ChangeApi cherryPick(CherryPickInput in) throws RestApiException { throw new UnsupportedOperationException("This is a dummy test class"); } + @Override + public ChangeInfo cherryPickAsInfo(CherryPickInput cherryPickInput) throws RestApiException { + return null; + } + @Override public ChangeApi rebase() throws RestApiException { throw new UnsupportedOperationException("This is a dummy test class"); @@ -245,6 +262,21 @@ public MergeListRequest getMergeList() throws RestApiException { throw new UnsupportedOperationException("This is a dummy test class"); } + @Override + public RelatedChangesInfo related() throws RestApiException { + return null; + } + + @Override + public ListMultimap votes() throws RestApiException { + return null; + } + + @Override + public BinaryResult getArchive(ArchiveFormat archiveFormat) throws RestApiException { + return null; + } + @Override public BinaryResult patch() throws RestApiException { throw new UnsupportedOperationException("This is a dummy test class"); @@ -280,6 +312,11 @@ public EditInfo applyFix(String fixId) throws RestApiException { return null; } + @Override + public java.util.Map getFixPreview(String s) throws RestApiException { + return null; + } + @Override public BinaryResult submitPreview() throws RestApiException { throw new UnsupportedOperationException("This is a dummy test class"); @@ -300,4 +337,9 @@ public SubmitType testSubmitType(TestSubmitRuleInput in) throws RestApiException throw new UnsupportedOperationException("This is a dummy test class"); } + @Override + public TestSubmitRuleInfo testSubmitRule(TestSubmitRuleInput testSubmitRuleInput) throws RestApiException { + return null; + } + }