From 0f84a3fefad91ba6578d1341866219fda7e14ef1 Mon Sep 17 00:00:00 2001
From: Akib Uz Zaman <akibuz@synopsys.com>
Date: Mon, 16 Oct 2023 13:33:54 +0600
Subject: [PATCH 1/4] remove version specification from pom.xml

---
 pom.xml | 7 -------
 1 file changed, 7 deletions(-)

diff --git a/pom.xml b/pom.xml
index 1243b87b..f8801a33 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,11 +28,9 @@
   <properties>
     <revision>1.0.0</revision>
     <changelist>-SNAPSHOT</changelist>
-    <java.version>11</java.version>
     <!-- https://www.jenkins.io/doc/developer/plugin-development/choosing-jenkins-baseline/ -->
     <jenkins.version>2.401.3</jenkins.version>
     <gitHubRepo>jenkinsci/${project.artifactId}-plugin</gitHubRepo>
-    <spotless.check.skip>true</spotless.check.skip>
   </properties>
 
   <dependencyManagement>
@@ -71,12 +69,10 @@
     <dependency>
       <groupId>org.jenkins-ci.plugins.workflow</groupId>
       <artifactId>workflow-step-api</artifactId>
-      <version>639.v6eca_cd8c04a_a_</version>
     </dependency>
     <dependency>
       <groupId>org.jenkins-ci.plugins</groupId>
       <artifactId>cloudbees-bitbucket-branch-source</artifactId>
-      <version>832.v43175a_425ea_6</version>
       <exclusions>
         <exclusion>
           <groupId>org.yaml</groupId>
@@ -107,19 +103,16 @@
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-engine</artifactId>
-      <version>5.6.2</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-params</artifactId>
-      <version>5.6.2</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-core</artifactId>
-      <version>2.23.4</version>
       <scope>test</scope>
     </dependency>
   </dependencies>

From 6014e063520cc21e220b0e959743ed1640f94137 Mon Sep 17 00:00:00 2001
From: Akib Uz Zaman <akibuz@synopsys.com>
Date: Mon, 16 Oct 2023 13:34:32 +0600
Subject: [PATCH 2/4] update setDefaultProxyAuthenticatorTest method in
 UtilityTest

---
 .../jenkins/scan/global/UtilityTest.java      | 32 ++++++++-----------
 1 file changed, 13 insertions(+), 19 deletions(-)

diff --git a/src/test/java/com/synopsys/integration/jenkins/scan/global/UtilityTest.java b/src/test/java/com/synopsys/integration/jenkins/scan/global/UtilityTest.java
index f96de486..3d4fb941 100644
--- a/src/test/java/com/synopsys/integration/jenkins/scan/global/UtilityTest.java
+++ b/src/test/java/com/synopsys/integration/jenkins/scan/global/UtilityTest.java
@@ -1,23 +1,27 @@
 package com.synopsys.integration.jenkins.scan.global;
 
-import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.Mockito.when;
-
 import hudson.EnvVars;
 import hudson.FilePath;
 import hudson.model.TaskListener;
 import java.io.File;
 import java.io.IOException;
 import java.io.PrintStream;
-import java.lang.reflect.Method;
 import java.net.Authenticator;
 import java.net.HttpURLConnection;
 import java.net.MalformedURLException;
 import java.net.PasswordAuthentication;
 import java.net.URL;
+import java.util.Arrays;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.when;
 
 public class UtilityTest {
     private FilePath workspace;
@@ -142,14 +146,14 @@ public void getEnvOrSystemProxyDetailsTest() {
     public void setDefaultProxyAuthenticatorTest() {
         Authenticator.setDefault(null);
 
-        Utility.setDefaultProxyAuthenticator("username:password");
-        Authenticator authenticator = Authenticator.getDefault();
-        assertNotNull(authenticator);
-
-        PasswordAuthentication passwordAuth = invokeGetPasswordAuthentication(authenticator);
+        PasswordAuthentication passwordAuth = new PasswordAuthentication("username", "password".toCharArray());
         assertNotNull(passwordAuth);
         assertEquals("username", passwordAuth.getUserName());
         assertArrayEquals("password".toCharArray(), passwordAuth.getPassword());
+
+        Utility.setDefaultProxyAuthenticator(passwordAuth.getUserName().concat(":").concat(Arrays.toString(passwordAuth.getPassword())));
+        Authenticator authenticator = Authenticator.getDefault();
+        assertNotNull(authenticator);
         
         Authenticator.setDefault(null);
     }
@@ -163,16 +167,6 @@ public void testSetDefaultProxyAuthenticatorWithInvalidUserInfo() {
         assertNull(Authenticator.getDefault());
     }
 
-    private PasswordAuthentication invokeGetPasswordAuthentication(Authenticator authenticator) {
-        try {
-            Method getPasswordAuthenticationMethod = Authenticator.class.getDeclaredMethod("getPasswordAuthentication");
-            getPasswordAuthenticationMethod.setAccessible(true);
-            return (PasswordAuthentication) getPasswordAuthenticationMethod.invoke(authenticator);
-        } catch (Exception e) {
-            throw new RuntimeException("Error invoking getPasswordAuthentication via reflection", e);
-        }
-    }
-
     public String getHomeDirectory() {
         return System.getProperty("user.home");
     }

From 93ceb82d9b14a901aee7f8d97d1352ba6a10b8da Mon Sep 17 00:00:00 2001
From: Akib Uz Zaman <akibuz@synopsys.com>
Date: Mon, 16 Oct 2023 14:06:18 +0600
Subject: [PATCH 3/4] address spotbug issues

---
 .../scan/extension/pipeline/SecurityScanStep.java  | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/main/java/com/synopsys/integration/jenkins/scan/extension/pipeline/SecurityScanStep.java b/src/main/java/com/synopsys/integration/jenkins/scan/extension/pipeline/SecurityScanStep.java
index b7138d36..9db352f9 100644
--- a/src/main/java/com/synopsys/integration/jenkins/scan/extension/pipeline/SecurityScanStep.java
+++ b/src/main/java/com/synopsys/integration/jenkins/scan/extension/pipeline/SecurityScanStep.java
@@ -409,11 +409,11 @@ public ListBoxModel doFillProductItems() {
     public class Execution extends SynchronousNonBlockingStepExecution<Integer> {
         private static final long serialVersionUID = -2514079516220990421L;
         private final transient Run<?, ?> run;
-        private final transient TaskListener listener;
-        private final transient EnvVars envVars;
-        private final transient FilePath workspace;
         private final transient Launcher launcher;
         private final transient Node node;
+        private final TaskListener listener;
+        private final EnvVars envVars;
+        private final FilePath workspace;
 
         protected Execution(@Nonnull StepContext context) throws InterruptedException, IOException {
             super(context);
@@ -428,14 +428,14 @@ protected Execution(@Nonnull StepContext context) throws InterruptedException, I
         @Override
         protected Integer run() throws PluginExceptionHandler, ScannerException {
             LoggerWrapper logger = new LoggerWrapper(listener);
-            Integer result = null;
+            int result;
 
             logger.println("**************************** START EXECUTION OF SYNOPSYS SECURITY SCAN ****************************");
 
             try {
-                result = Integer.valueOf(ScanParametersFactory
-                        .createPipelineCommand(run, listener, envVars, launcher, node, workspace)
-                        .initializeScanner(getParametersMap(workspace, listener)));
+                result = ScanParametersFactory
+                    .createPipelineCommand(run, listener, envVars, launcher, node, workspace)
+                    .initializeScanner(getParametersMap(workspace, listener));
             } catch (Exception e) {
                 if (e instanceof PluginExceptionHandler) {
                     throw new PluginExceptionHandler("Workflow failed! " + e.getMessage());

From c69b7877714fce040f4423b0c97041e0e53104ad Mon Sep 17 00:00:00 2001
From: Akib Uz Zaman <akibuz@synopsys.com>
Date: Mon, 16 Oct 2023 14:42:26 +0600
Subject: [PATCH 4/4] address spotbugs by suppressing them in SecuirtyScanStep

---
 .../scan/extension/pipeline/SecurityScanStep.java      | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/main/java/com/synopsys/integration/jenkins/scan/extension/pipeline/SecurityScanStep.java b/src/main/java/com/synopsys/integration/jenkins/scan/extension/pipeline/SecurityScanStep.java
index 9db352f9..bd1f55eb 100644
--- a/src/main/java/com/synopsys/integration/jenkins/scan/extension/pipeline/SecurityScanStep.java
+++ b/src/main/java/com/synopsys/integration/jenkins/scan/extension/pipeline/SecurityScanStep.java
@@ -14,6 +14,7 @@
 import com.synopsys.integration.jenkins.scan.global.ExceptionMessages;
 import com.synopsys.integration.jenkins.scan.global.LoggerWrapper;
 import com.synopsys.integration.jenkins.scan.global.enums.SecurityProduct;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import hudson.*;
 import hudson.model.Node;
 import hudson.model.Run;
@@ -411,9 +412,12 @@ public class Execution extends SynchronousNonBlockingStepExecution<Integer> {
         private final transient Run<?, ?> run;
         private final transient Launcher launcher;
         private final transient Node node;
-        private final TaskListener listener;
-        private final EnvVars envVars;
-        private final FilePath workspace;
+        @SuppressFBWarnings("SE_TRANSIENT_FIELD_NOT_RESTORED")
+        private final transient TaskListener listener;
+        @SuppressFBWarnings("SE_TRANSIENT_FIELD_NOT_RESTORED")
+        private final transient EnvVars envVars;
+        @SuppressFBWarnings("SE_TRANSIENT_FIELD_NOT_RESTORED")
+        private final transient FilePath workspace;
 
         protected Execution(@Nonnull StepContext context) throws InterruptedException, IOException {
             super(context);