This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new f90caf2b10 SonarQube bug fixes
f90caf2b10 is described below

commit f90caf2b1027e2fbe32e54ad2f06b4816d24623e
Author: James Bognar <[email protected]>
AuthorDate: Thu Feb 5 10:11:08 2026 -0500

    SonarQube bug fixes
---
 .../apache/juneau/commons/time/TimeProvider.java   |  1 +
 .../juneau/objecttools/NumberMatcherFactory.java   |  1 +
 .../apache/juneau/objecttools/ObjectSorter.java    |  1 +
 .../apache/juneau/objecttools/ObjectViewer.java    |  1 +
 .../juneau/objecttools/StringMatcherFactory.java   |  1 +
 .../org/apache/juneau/utils/GenericConverter.java  |  1 +
 .../org/apache/juneau/http/header/BasicHeader.java |  9 +++++
 .../org/apache/juneau/http/BasicHeader_Test.java   | 46 ++++++++++++++++++++++
 8 files changed, 61 insertions(+)

diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/time/TimeProvider.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/time/TimeProvider.java
index 9f5b55f388..5c35a273e2 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/time/TimeProvider.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/time/TimeProvider.java
@@ -47,6 +47,7 @@ public class TimeProvider {
        /**
         * The default instance that uses the system's time and timezone.
         */
+       @SuppressWarnings("java:S6541") // Intentional singleton for 
extensibility
        public static final TimeProvider INSTANCE = new TimeProvider();
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/NumberMatcherFactory.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/NumberMatcherFactory.java
index 303302535f..122b82fe84 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/NumberMatcherFactory.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/NumberMatcherFactory.java
@@ -307,6 +307,7 @@ public class NumberMatcherFactory extends MatcherFactory {
        /**
         * Default reusable matcher.
         */
+       @SuppressWarnings("java:S6541") // Stateless factory, singleton for 
convenience
        public static final NumberMatcherFactory DEFAULT = new 
NumberMatcherFactory();
 
        @Override
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectSorter.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectSorter.java
index 619fb95b2a..e97259caa0 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectSorter.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectSorter.java
@@ -95,6 +95,7 @@ public class ObjectSorter implements ObjectTool<SortArgs> {
        /**
         * Default reusable searcher.
         */
+       @SuppressWarnings("java:S6541") // Stateless utility, singleton for 
convenience
        public static final ObjectSorter DEFAULT = new ObjectSorter();
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectViewer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectViewer.java
index e3b2e2fc85..1241cd4125 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectViewer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectViewer.java
@@ -58,6 +58,7 @@ public class ObjectViewer implements ObjectTool<ViewArgs> {
        /**
         * Default reusable searcher.
         */
+       @SuppressWarnings("java:S6541") // Stateless utility, singleton for 
convenience
        public static final ObjectViewer DEFAULT = new ObjectViewer();
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/StringMatcherFactory.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/StringMatcherFactory.java
index d196d74bb5..075c4d613b 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/StringMatcherFactory.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/StringMatcherFactory.java
@@ -162,6 +162,7 @@ public class StringMatcherFactory extends MatcherFactory {
        /**
         * Default reusable matcher.
         */
+       @SuppressWarnings("java:S6541") // Stateless factory, singleton for 
convenience
        public static final StringMatcherFactory DEFAULT = new 
StringMatcherFactory();
 
        @Override
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/GenericConverter.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/GenericConverter.java
index 7778c8fa34..4d67aaf1b1 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/GenericConverter.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/GenericConverter.java
@@ -58,6 +58,7 @@ public class GenericConverter implements Converter {
         * <p>
         * This instance can be safely shared across multiple threads and 
reused for all conversion operations.
         */
+       @SuppressWarnings("java:S6541") // Stateless converter, singleton for 
convenience
        public static final GenericConverter INSTANCE = new GenericConverter();
 
        /**
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicHeader.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicHeader.java
index 63ab3ca812..949e1a468b 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicHeader.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicHeader.java
@@ -143,6 +143,15 @@ public class BasicHeader implements Header, Cloneable, 
Serializable {
                this.supplier = copyFrom.supplier;
        }
 
+       @Override
+       public BasicHeader clone() {
+               BasicHeader cloned = new BasicHeader(this);
+               if (this.elements != null) {
+                       cloned.elements = this.elements.clone();
+               }
+               return cloned;
+       }
+
        /**
         * Provides an object for performing assertions against the name of 
this header.
         *
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/BasicHeader_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/http/BasicHeader_Test.java
index cf737761bf..f8564a65d4 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/http/BasicHeader_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/http/BasicHeader_Test.java
@@ -20,6 +20,7 @@ import static org.apache.juneau.http.HttpHeaders.*;
 import static org.apache.juneau.junit.bct.BctAssertions.*;
 import static org.junit.jupiter.api.Assertions.*;
 
+import java.util.concurrent.atomic.*;
 import java.util.function.*;
 
 import org.apache.juneau.*;
@@ -105,6 +106,51 @@ class BasicHeader_Test extends TestBase {
                assertNotEquals("foo", h1);
        }
 
+       @Test void a10_clone() throws Exception {
+               // Test cloning with simple string value
+               var h1 = header("Foo", "bar");
+               var cloned1 = h1.clone();
+               assertNotSame(h1, cloned1);
+               assertEquals(h1.getName(), cloned1.getName());
+               assertEquals(h1.getValue(), cloned1.getValue());
+               assertEquals(h1, cloned1);
+
+               // Test cloning with supplier value
+               var supplierValue = new AtomicReference<>("test");
+               var h2 = header("X-Test", () -> supplierValue.get());
+               var cloned2 = h2.clone();
+               assertNotSame(h2, cloned2);
+               assertEquals(h2.getName(), cloned2.getName());
+               assertEquals(h2.getValue(), cloned2.getValue());
+
+               // Modify the supplier value and verify both see the change 
(shared supplier)
+               supplierValue.set("modified");
+               assertEquals("modified", h2.getValue());
+               assertEquals("modified", cloned2.getValue());
+
+               // Test cloning with elements already computed
+               var h3 = header("Content-Type", "text/plain; charset=utf-8");
+               var elements1 = h3.getElements(); // Force computation of 
elements
+               var cloned3 = h3.clone();
+               var elements2 = cloned3.getElements();
+               
+               // Elements should be cloned (different array instances)
+               assertNotSame(elements1, elements2);
+               // But should have same content
+               assertEquals(elements1.length, elements2.length);
+               if (elements1.length > 0) {
+                       assertEquals(elements1[0].getName(), 
elements2[0].getName());
+               }
+
+               // Test cloning header with empty string value (null values 
return null from header())
+               var h4 = header("X-Empty", "");
+               var cloned4 = h4.clone();
+               assertNotSame(h4, cloned4);
+               assertEquals(h4.getName(), cloned4.getName());
+               assertEquals(h4.getValue(), cloned4.getValue());
+               assertEquals(h4, cloned4);
+       }
+
        
//------------------------------------------------------------------------------------------------------------------
        // Utility methods
        
//------------------------------------------------------------------------------------------------------------------

Reply via email to