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
//------------------------------------------------------------------------------------------------------------------