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 5dbf026a11 TODO-999: Eclipse compiler-option-ignored cleanup, S3878 
infinite-recursion fixes (Jetty/Tomcat/LinkString), OAuthResourceOwnerFlow 
deprecation propagation, LocaleFormat Locale.Builder migration, resource-leak 
suppressions, and juneau-utest Sonar fixes (S125/S3415/S1130/RouteIndexMixin).
5dbf026a11 is described below

commit 5dbf026a11549930ed3fa38c49010e0ff7cacecd
Author: James Bognar <[email protected]>
AuthorDate: Thu Jun 4 07:35:35 2026 -0400

    TODO-999: Eclipse compiler-option-ignored cleanup, S3878 infinite-recursion 
fixes (Jetty/Tomcat/LinkString), OAuthResourceOwnerFlow deprecation 
propagation, LocaleFormat Locale.Builder migration, resource-leak suppressions, 
and juneau-utest Sonar fixes (S125/S3415/S1130/RouteIndexMixin).
    
    Co-authored-by: Cursor <[email protected]>
---
 .../src/main/java/org/apache/juneau/bean/LinkString.java  |  5 ++++-
 .../src/main/java/org/apache/juneau/LocaleFormat.java     |  9 ++++-----
 .../main/java/org/apache/juneau/encoders/EncoderSet.java  |  3 +++
 .../java/org/apache/juneau/ini/IniSerializerSession.java  |  1 -
 .../org/apache/juneau/parquet/ParquetParserSession.java   |  1 -
 .../main/java/org/apache/juneau/parser/ParserSession.java |  2 +-
 .../src/main/java/org/apache/juneau/parser/ParserSet.java |  3 +++
 .../java/org/apache/juneau/serializer/SerializerSet.java  |  3 +++
 .../juneau/microservice/jetty/JettyServerComponent.java   |  8 +++++++-
 .../juneau/microservice/tomcat/TomcatServerComponent.java | 15 ++++++++-------
 .../rest/reactive/ReactiveOptIn_BareServer_Test.java      |  1 +
 .../rest/auth/oauth/flow/OAuthResourceOwnerFlow.java      | 15 +++++++++++++++
 .../juneau/rest/reactive/ReactiveResponseProcessor.java   |  8 ++++++--
 .../juneau/rest/view/freemarker/FreemarkerDispatcher.java |  2 +-
 .../org/apache/juneau/rest/view/jsp/JspDispatcher.java    |  2 +-
 .../juneau/rest/view/mustache/MustacheDispatcher.java     |  2 +-
 .../juneau/rest/view/thymeleaf/ThymeleafDispatcher.java   |  2 +-
 .../src/main/java/org/apache/juneau/rest/RestContext.java |  2 +-
 .../apache/juneau/commons/collections/MultiList_Test.java |  4 ++--
 .../juneau/junit5/JuneauBeanStoreExtension_Test.java      |  6 +++---
 .../java/org/apache/juneau/junit5/TestBeanStore_Test.java |  1 +
 .../juneau/rest/StackOverlay_RestContext_Spike_Test.java  |  1 +
 .../juneau/rest/ops/RouteIndexMixin_AsMixin_Test.java     |  1 +
 .../juneau/rest/view/jsp/JspMixin_PathTraversal_Test.java |  1 +
 24 files changed, 69 insertions(+), 29 deletions(-)

diff --git 
a/juneau-bean/juneau-bean-common/src/main/java/org/apache/juneau/bean/LinkString.java
 
b/juneau-bean/juneau-bean-common/src/main/java/org/apache/juneau/bean/LinkString.java
index 321a0628b8..cba991a132 100644
--- 
a/juneau-bean/juneau-bean-common/src/main/java/org/apache/juneau/bean/LinkString.java
+++ 
b/juneau-bean/juneau-bean-common/src/main/java/org/apache/juneau/bean/LinkString.java
@@ -142,8 +142,11 @@ public class LinkString implements Comparable<LinkString> {
         *      <br>Can be <jk>null</jk> to unset the property.
         * @return This object.
         */
+       @SuppressWarnings({
+               "java:S1905" // Cast required to disambiguate varargs overload 
from this single-String overload; removing it causes infinite recursion.
+       })
        public LinkString setUri(String value) {
-               setUri(value, new Object[0]);
+               setUri(value, (Object[])new Object[0]);
                return this;
        }
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/LocaleFormat.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/LocaleFormat.java
index 5c9b88ad96..2c0b354694 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/LocaleFormat.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/LocaleFormat.java
@@ -89,10 +89,9 @@ public enum LocaleFormat {
 
        private static Locale parseUnderscore(String s) {
                var parts = s.split("_", -1);
-               return switch (parts.length) {
-                       case 1 -> new Locale(parts[0]);  // NOSONAR: legacy 
Locale constructor required for underscore form
-                       case 2 -> new Locale(parts[0], parts[1]);  // NOSONAR: 
legacy Locale constructor required for underscore form
-                       default -> new Locale(parts[0], parts[1], parts[2]);  
// NOSONAR: legacy Locale constructor required for underscore form
-               };
+               var b = new Locale.Builder().setLanguage(parts[0]);
+               if (parts.length > 1) b.setRegion(parts[1]);
+               if (parts.length > 2) b.setVariant(parts[2]);
+               return b.build();
        }
 }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderSet.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderSet.java
index 1b94397427..3549b7cde2 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderSet.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderSet.java
@@ -139,6 +139,9 @@ public class EncoderSet {
                 * @since 9.5.0
                 */
                @Override
+               @SuppressWarnings({
+                       "resource" // BasicBeanStore lifecycle is owned by the 
enclosing builder; closed externally when the builder is disposed.
+               })
                public Builder overridingBeanStore(BeanStore store) {
                        if (store != null)
                                this.beanStore = new 
BasicBeanStore(this.beanStore, store);
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniSerializerSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniSerializerSession.java
index 24577cd2d7..86074a5b73 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniSerializerSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ini/IniSerializerSession.java
@@ -17,7 +17,6 @@
 package org.apache.juneau.ini;
 
 import static org.apache.juneau.commons.utils.AssertionUtils.*;
-import static org.apache.juneau.commons.utils.StringUtils.*;
 import static org.apache.juneau.commons.utils.ThrowableUtils.*;
 import static org.apache.juneau.commons.utils.Utils.*;
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetParserSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetParserSession.java
index 5d6e877592..0471300d50 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetParserSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parquet/ParquetParserSession.java
@@ -31,7 +31,6 @@ import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 import java.util.Set;
 import java.util.UUID;
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
index 13c2a9ab63..501dec8044 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
@@ -820,7 +820,7 @@ public class ParserSession extends MarshallingSession {
                        throw new ParseException(this, completeThrown, 
"Exception occurred in BeanConsumer.complete().  exception={0}, message={1}.", 
cns(completeThrown), lm(completeThrown));
        }
 
-       private <T> Exception drainToConsumer(BeanConsumer<T> consumer, List<T> 
list) {
+       private static <T> Exception drainToConsumer(BeanConsumer<T> consumer, 
List<T> list) {
                try {
                        consumer.begin();
                        for (var element : list)
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSet.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSet.java
index 49525b1eb3..5c54f15b51 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSet.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSet.java
@@ -165,6 +165,9 @@ public class ParserSet {
                 * @since 9.5.0
                 */
                @Override
+               @SuppressWarnings({
+                       "resource" // BasicBeanStore lifecycle is owned by the 
enclosing builder; closed externally when the builder is disposed.
+               })
                public Builder overridingBeanStore(BeanStore store) {
                        if (store != null)
                                this.beanStore = new 
BasicBeanStore(this.beanStore, store);
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSet.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSet.java
index f60c1636e2..2578a806a8 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSet.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSet.java
@@ -165,6 +165,9 @@ public class SerializerSet {
                 * @since 9.5.0
                 */
                @Override
+               @SuppressWarnings({
+                       "resource" // BasicBeanStore lifecycle is owned by the 
enclosing builder; closed externally when the builder is disposed.
+               })
                public Builder overridingBeanStore(BeanStore store) {
                        if (store != null)
                                this.beanStore = new 
BasicBeanStore(this.beanStore, store);
diff --git 
a/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyServerComponent.java
 
b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyServerComponent.java
index 3dc8600c11..bef5cae770 100644
--- 
a/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyServerComponent.java
+++ 
b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyServerComponent.java
@@ -338,10 +338,13 @@ public class JettyServerComponent implements 
MicroserviceListener {
         * @param pathSpec The context path of the servlet.
         * @return This object.
         */
+       @SuppressWarnings({
+               "java:S3878" // Array wrapper required to dispatch to varargs 
overload; without it the call recurses infinitely back to this single-String 
overload.
+       })
        public JettyServerComponent addServlet(Servlet servlet, String 
pathSpec) {
                if (nn(pathSpec) && ! pathSpec.endsWith("/*"))
                        pathSpec = trimTrailingSlashes(pathSpec) + "/*";
-               return addServlet(servlet, new String[] {pathSpec});
+               return addServlet(servlet, new String[]{pathSpec});
        }
 
        /**
@@ -365,6 +368,9 @@ public class JettyServerComponent implements 
MicroserviceListener {
         * @param urlPattern The URL pattern the filter applies to (e.g. {@code 
"/*"}, {@code "/api/*"}).
         * @return This object.
         */
+       @SuppressWarnings({
+               "java:S3878" // Array wrapper required to dispatch to varargs 
overload; without it the call recurses infinitely back to this single-String 
overload.
+       })
        public JettyServerComponent addFilter(jakarta.servlet.Filter filter, 
String urlPattern) {
                return addFilter(filter, new String[]{urlPattern});
        }
diff --git 
a/juneau-microservice/juneau-microservice-tomcat/src/main/java/org/apache/juneau/microservice/tomcat/TomcatServerComponent.java
 
b/juneau-microservice/juneau-microservice-tomcat/src/main/java/org/apache/juneau/microservice/tomcat/TomcatServerComponent.java
index e5a3705d60..7ac94e80f4 100644
--- 
a/juneau-microservice/juneau-microservice-tomcat/src/main/java/org/apache/juneau/microservice/tomcat/TomcatServerComponent.java
+++ 
b/juneau-microservice/juneau-microservice-tomcat/src/main/java/org/apache/juneau/microservice/tomcat/TomcatServerComponent.java
@@ -124,7 +124,7 @@ public class TomcatServerComponent implements 
MicroserviceListener {
                                port = RANDOM.nextInt(32767 - ports[0] + 1) + 
ports[0];
                        try (var ss = new ServerSocket(port)) {
                                return port;
-                       } catch (@SuppressWarnings("unused") IOException e) {
+                       } catch (IOException e) {
                                // Port is in use, try next port in array
                        }
                }
@@ -187,8 +187,7 @@ public class TomcatServerComponent implements 
MicroserviceListener {
 
        @Override /* Overridden from MicroserviceListener */
        @SuppressWarnings({
-               "java:S3776", // Cognitive complexity acceptable for server 
creation logic
-               "resource"    // ms.getBeanStore() is owned by the microservice 
lifecycle; do not close here.
+               "java:S3776" // Cognitive complexity acceptable for server 
creation logic
        })
        public void onStart(Microservice ms) {
                try {
@@ -285,7 +284,7 @@ public class TomcatServerComponent implements 
MicroserviceListener {
                t.start();
                try {
                        t.join();
-               } catch (@SuppressWarnings("unused") InterruptedException e) {
+               } catch (InterruptedException e) {
                        Thread.currentThread().interrupt();
                }
        }
@@ -302,8 +301,9 @@ public class TomcatServerComponent implements 
MicroserviceListener {
         * @param pathSpec The context path of the servlet.
         * @return This object.
         */
+       @SuppressWarnings("java:S3878") // Array wrapper required to dispatch 
to varargs overload; without it the call recurses infinitely back to this 
single-String overload.
        public TomcatServerComponent addServlet(Servlet servlet, String 
pathSpec) {
-               return addServlet(servlet, new String[] 
{normalizePathSpec(pathSpec)});
+               return addServlet(servlet, new 
String[]{normalizePathSpec(pathSpec)});
        }
 
        /**
@@ -329,8 +329,9 @@ public class TomcatServerComponent implements 
MicroserviceListener {
         * @param urlPattern The URL pattern the filter applies to (e.g. {@code 
"/*"}, {@code "/api/*"}).
         * @return This object.
         */
+       @SuppressWarnings("java:S3878") // Array wrapper required to dispatch 
to varargs overload; without it the call recurses infinitely back to this 
single-String overload.
        public TomcatServerComponent addFilter(jakarta.servlet.Filter filter, 
String urlPattern) {
-               return addFilter(filter, new String[] {urlPattern});
+               return addFilter(filter, new String[]{urlPattern});
        }
 
        /**
@@ -399,7 +400,7 @@ public class TomcatServerComponent implements 
MicroserviceListener {
                String hostname = "localhost";
                try {
                        hostname = InetAddress.getLocalHost().getHostName();
-               } catch (@SuppressWarnings("unused") UnknownHostException e) {
+               } catch (UnknownHostException e) {
                        // Cannot determine hostname, use default "localhost"
                }
                return hostname;
diff --git 
a/juneau-rest/juneau-rest-mock/src/test/java/org/apache/juneau/rest/reactive/ReactiveOptIn_BareServer_Test.java
 
b/juneau-rest/juneau-rest-mock/src/test/java/org/apache/juneau/rest/reactive/ReactiveOptIn_BareServer_Test.java
index 284d8eb301..83ebcb153d 100644
--- 
a/juneau-rest/juneau-rest-mock/src/test/java/org/apache/juneau/rest/reactive/ReactiveOptIn_BareServer_Test.java
+++ 
b/juneau-rest/juneau-rest-mock/src/test/java/org/apache/juneau/rest/reactive/ReactiveOptIn_BareServer_Test.java
@@ -71,6 +71,7 @@ class ReactiveOptIn_BareServer_Test {
        @SuppressWarnings("resource")  // Static test client; intentionally 
held for the test class lifetime.
        private static final MockRestClient CA = 
MockRestClient.buildLax(A.class);
 
+       @SuppressWarnings("resource")
        @Test void a01_bareServer_doesNotProcessFlowPublisherReactively() 
throws Exception {
                String content;
                try (var req = CA.get("/flux")) {
diff --git 
a/juneau-rest/juneau-rest-server-oauth/src/main/java/org/apache/juneau/rest/auth/oauth/flow/OAuthResourceOwnerFlow.java
 
b/juneau-rest/juneau-rest-server-oauth/src/main/java/org/apache/juneau/rest/auth/oauth/flow/OAuthResourceOwnerFlow.java
index 2907c348cf..354cf09359 100644
--- 
a/juneau-rest/juneau-rest-server-oauth/src/main/java/org/apache/juneau/rest/auth/oauth/flow/OAuthResourceOwnerFlow.java
+++ 
b/juneau-rest/juneau-rest-server-oauth/src/main/java/org/apache/juneau/rest/auth/oauth/flow/OAuthResourceOwnerFlow.java
@@ -60,6 +60,7 @@ public class OAuthResourceOwnerFlow {
         *
         * @return A new builder.
         */
+       @Deprecated(since = "9.5.0", forRemoval = false)
        public static Builder create() {
                return new Builder();
        }
@@ -67,6 +68,7 @@ public class OAuthResourceOwnerFlow {
        /**
         * Builder.
         */
+       @Deprecated(since = "9.5.0", forRemoval = false)
        public static class Builder {
                private URI tokenEndpoint;
                private String clientId;
@@ -77,6 +79,7 @@ public class OAuthResourceOwnerFlow {
                private Consumer<HTTPRequest> httpRequestConfigurator;
 
                /** Constructor. */
+               @Deprecated(since = "9.5.0", forRemoval = false)
                protected Builder() {}
 
                /**
@@ -85,6 +88,7 @@ public class OAuthResourceOwnerFlow {
                 * @param value The endpoint.
                 * @return This object.
                 */
+               @Deprecated(since = "9.5.0", forRemoval = false)
                public Builder tokenEndpoint(URI value) {
                        tokenEndpoint = assertArgNotNull("value", value);
                        return this;
@@ -96,6 +100,7 @@ public class OAuthResourceOwnerFlow {
                 * @param value The client ID.
                 * @return This object.
                 */
+               @Deprecated(since = "9.5.0", forRemoval = false)
                public Builder clientId(String value) {
                        clientId = assertArgNotNullOrBlank("value", value);
                        return this;
@@ -107,6 +112,7 @@ public class OAuthResourceOwnerFlow {
                 * @param value The secret.
                 * @return This object.
                 */
+               @Deprecated(since = "9.5.0", forRemoval = false)
                public Builder clientSecret(String value) {
                        assertArgNotNullOrBlank("value", value);
                        clientSecretSupplier = () -> value;
@@ -119,6 +125,7 @@ public class OAuthResourceOwnerFlow {
                 * @param value The supplier.
                 * @return This object.
                 */
+               @Deprecated(since = "9.5.0", forRemoval = false)
                public Builder clientSecretSupplier(Supplier<String> value) {
                        clientSecretSupplier = assertArgNotNull("value", value);
                        return this;
@@ -130,6 +137,7 @@ public class OAuthResourceOwnerFlow {
                 * @param value The username.
                 * @return This object.
                 */
+               @Deprecated(since = "9.5.0", forRemoval = false)
                public Builder username(String value) {
                        username = assertArgNotNullOrBlank("value", value);
                        return this;
@@ -141,6 +149,7 @@ public class OAuthResourceOwnerFlow {
                 * @param value The password.
                 * @return This object.
                 */
+               @Deprecated(since = "9.5.0", forRemoval = false)
                public Builder password(String value) {
                        assertArgNotNullOrBlank("value", value);
                        passwordSupplier = () -> value;
@@ -153,6 +162,7 @@ public class OAuthResourceOwnerFlow {
                 * @param value The supplier.
                 * @return This object.
                 */
+               @Deprecated(since = "9.5.0", forRemoval = false)
                public Builder passwordSupplier(Supplier<String> value) {
                        passwordSupplier = assertArgNotNull("value", value);
                        return this;
@@ -164,6 +174,7 @@ public class OAuthResourceOwnerFlow {
                 * @param values The scopes.
                 * @return This object.
                 */
+               @Deprecated(since = "9.5.0", forRemoval = false)
                public Builder scope(String... values) {
                        assertArgNotNull("values", values);
                        for (var v : values) {
@@ -179,6 +190,7 @@ public class OAuthResourceOwnerFlow {
                 * @param value The callback.
                 * @return This object.
                 */
+               @Deprecated(since = "9.5.0", forRemoval = false)
                public Builder httpRequestConfigurator(Consumer<HTTPRequest> 
value) {
                        httpRequestConfigurator = assertArgNotNull("value", 
value);
                        return this;
@@ -189,6 +201,7 @@ public class OAuthResourceOwnerFlow {
                 *
                 * @return A new {@link OAuthResourceOwnerFlow}.
                 */
+               @Deprecated(since = "9.5.0", forRemoval = false)
                public OAuthResourceOwnerFlow build() {
                        if (tokenEndpoint == null)
                                throw new 
IllegalStateException("OAuthResourceOwnerFlow requires tokenEndpoint(...)");
@@ -217,6 +230,7 @@ public class OAuthResourceOwnerFlow {
         *
         * @param b The builder.
         */
+       @Deprecated(since = "9.5.0", forRemoval = false)
        protected OAuthResourceOwnerFlow(Builder b) {
                this.tokenEndpoint = b.tokenEndpoint;
                this.clientId = b.clientId;
@@ -232,6 +246,7 @@ public class OAuthResourceOwnerFlow {
         *
         * @return The acquired token.
         */
+       @Deprecated(since = "9.5.0", forRemoval = false)
        public OAuthToken acquire() {
                var clientAuth = new ClientSecretBasic(new ClientID(clientId), 
new Secret(clientSecretSupplier.get()));
                var grant = new ResourceOwnerPasswordCredentialsGrant(username, 
new Secret(passwordSupplier.get()));
diff --git 
a/juneau-rest/juneau-rest-server-reactive/src/main/java/org/apache/juneau/rest/reactive/ReactiveResponseProcessor.java
 
b/juneau-rest/juneau-rest-server-reactive/src/main/java/org/apache/juneau/rest/reactive/ReactiveResponseProcessor.java
index 93dfde6017..42eeaf7f53 100644
--- 
a/juneau-rest/juneau-rest-server-reactive/src/main/java/org/apache/juneau/rest/reactive/ReactiveResponseProcessor.java
+++ 
b/juneau-rest/juneau-rest-server-reactive/src/main/java/org/apache/juneau/rest/reactive/ReactiveResponseProcessor.java
@@ -273,7 +273,9 @@ public class ReactiveResponseProcessor implements 
ResponseProcessor {
        // Frame encoders.
        // 
-----------------------------------------------------------------------------------------------------------------
 
-       @SuppressWarnings({ "java:S2095", "resource" }) // Writer is 
response-owned; we never close it.
+       @SuppressWarnings({
+               "java:S2095" // Writer is response-owned; we never close it.
+       })
        private static void writeSseFrame(FinishablePrintWriter w, Object 
element) throws IOException, SerializeException {
                if (element == null)
                        return;
@@ -285,7 +287,9 @@ public class ReactiveResponseProcessor implements 
ResponseProcessor {
                SseSerializer.DEFAULT.serialize(new SseEvent(null, data), w);
        }
 
-       @SuppressWarnings({ "java:S2095", "resource" }) // Writer is 
response-owned; we never close it.
+       @SuppressWarnings({
+               "java:S2095" // Writer is response-owned; we never close it.
+       })
        private static void writeNdjsonFrame(FinishablePrintWriter w, Object 
element) throws SerializeException {
                if (element == null)
                        return;
diff --git 
a/juneau-rest/juneau-rest-server-view-freemarker/src/main/java/org/apache/juneau/rest/view/freemarker/FreemarkerDispatcher.java
 
b/juneau-rest/juneau-rest-server-view-freemarker/src/main/java/org/apache/juneau/rest/view/freemarker/FreemarkerDispatcher.java
index 090cd2568d..91615deb3c 100644
--- 
a/juneau-rest/juneau-rest-server-view-freemarker/src/main/java/org/apache/juneau/rest/view/freemarker/FreemarkerDispatcher.java
+++ 
b/juneau-rest/juneau-rest-server-view-freemarker/src/main/java/org/apache/juneau/rest/view/freemarker/FreemarkerDispatcher.java
@@ -252,7 +252,7 @@ public class FreemarkerDispatcher implements 
RawTemplateDispatcher {
                try {
                        var resolved = 
FileUtils.resolveVirtualPathSafely(basePath, template);
                        safeTemplate = stripBasePath(basePath, resolved);
-               } catch (@SuppressWarnings("unused") IllegalArgumentException 
ex) {
+               } catch (IllegalArgumentException ex) {
                        throw new Forbidden("Path escapes configured base 
path.");
                }
 
diff --git 
a/juneau-rest/juneau-rest-server-view-jsp/src/main/java/org/apache/juneau/rest/view/jsp/JspDispatcher.java
 
b/juneau-rest/juneau-rest-server-view-jsp/src/main/java/org/apache/juneau/rest/view/jsp/JspDispatcher.java
index 648021035b..9adad20b2e 100644
--- 
a/juneau-rest/juneau-rest-server-view-jsp/src/main/java/org/apache/juneau/rest/view/jsp/JspDispatcher.java
+++ 
b/juneau-rest/juneau-rest-server-view-jsp/src/main/java/org/apache/juneau/rest/view/jsp/JspDispatcher.java
@@ -98,7 +98,7 @@ public class JspDispatcher implements RawTemplateDispatcher {
                String target;
                try {
                        target = JspViewRenderer.joinPath(basePath, path);
-               } catch (@SuppressWarnings("unused") IllegalArgumentException 
ex) {
+               } catch (IllegalArgumentException ex) {
                        throw new Forbidden("Path escapes configured base 
path.");
                }
                try {
diff --git 
a/juneau-rest/juneau-rest-server-view-mustache/src/main/java/org/apache/juneau/rest/view/mustache/MustacheDispatcher.java
 
b/juneau-rest/juneau-rest-server-view-mustache/src/main/java/org/apache/juneau/rest/view/mustache/MustacheDispatcher.java
index d94a7c68d2..99df5d1cb2 100644
--- 
a/juneau-rest/juneau-rest-server-view-mustache/src/main/java/org/apache/juneau/rest/view/mustache/MustacheDispatcher.java
+++ 
b/juneau-rest/juneau-rest-server-view-mustache/src/main/java/org/apache/juneau/rest/view/mustache/MustacheDispatcher.java
@@ -221,7 +221,7 @@ public class MustacheDispatcher implements 
RawTemplateDispatcher {
                try {
                        var resolved = 
FileUtils.resolveVirtualPathSafely(basePath, template);
                        safeTemplate = stripBasePath(basePath, resolved);
-               } catch (@SuppressWarnings("unused") IllegalArgumentException 
ex) {
+               } catch (IllegalArgumentException ex) {
                        throw new Forbidden("Path escapes configured base 
path.");
                }
 
diff --git 
a/juneau-rest/juneau-rest-server-view-thymeleaf/src/main/java/org/apache/juneau/rest/view/thymeleaf/ThymeleafDispatcher.java
 
b/juneau-rest/juneau-rest-server-view-thymeleaf/src/main/java/org/apache/juneau/rest/view/thymeleaf/ThymeleafDispatcher.java
index 9c6a7e6edc..36c6e45e01 100644
--- 
a/juneau-rest/juneau-rest-server-view-thymeleaf/src/main/java/org/apache/juneau/rest/view/thymeleaf/ThymeleafDispatcher.java
+++ 
b/juneau-rest/juneau-rest-server-view-thymeleaf/src/main/java/org/apache/juneau/rest/view/thymeleaf/ThymeleafDispatcher.java
@@ -212,7 +212,7 @@ public class ThymeleafDispatcher implements 
RawTemplateDispatcher {
                try {
                        var resolved = 
FileUtils.resolveVirtualPathSafely(basePath, template);
                        safeTemplate = stripBasePath(basePath, resolved);
-               } catch (@SuppressWarnings("unused") IllegalArgumentException 
ex) {
+               } catch (IllegalArgumentException ex) {
                        throw new Forbidden("Path escapes configured base 
path.");
                }
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index b9240908ae..a08bf329a2 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -1970,7 +1970,7 @@ public class RestContext extends Context {
                var args = new Args(mixinClass, this, builder.inner, () -> 
mixinResource, "", null, null, null, true);
                var mixinCtx = new RestContext(args);
                var setCtx = ClassInfo.of(mixinResource).getMethod(x -> 
x.hasName("setContext") && x.hasParameterTypes(RestContext.class)).orElse(null);
-               if (nn(setCtx))
+               if (setCtx != null)
                        setCtx.accessible().invoke(mixinResource, mixinCtx);
                return mixinCtx;
        }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/commons/collections/MultiList_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/commons/collections/MultiList_Test.java
index 5858843853..8957e968eb 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/commons/collections/MultiList_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/commons/collections/MultiList_Test.java
@@ -808,8 +808,8 @@ class MultiList_Test extends TestBase {
        @Test
        void h15_equals_nonList() {
                var ml = new MultiList<>(l("a", "b"), l("c"));
-               assertNotEquals(ml, "not-a-list");
-               assertNotEquals(ml, null);
+               assertNotEquals("not-a-list", ml);
+               assertNotEquals(null, ml);
        }
 
        @Test
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/junit5/JuneauBeanStoreExtension_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/junit5/JuneauBeanStoreExtension_Test.java
index 44c8666eb4..9a14a47977 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/junit5/JuneauBeanStoreExtension_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/junit5/JuneauBeanStoreExtension_Test.java
@@ -302,7 +302,7 @@ class JuneauBeanStoreExtension_Test extends TestBase {
        }
 
        @Test
-       void i04_resolveParameter_fallsBackToClassScope() throws Exception {
+       void i04_resolveParameter_fallsBackToClassScope() {
                var ext = JuneauBeanStoreExtension.create();
                var classCtx = 
org.apache.juneau.junit5.testsupport.StubExtensionContext.of(F02_NullableField.class,
 null);
                ext.beforeAll(classCtx);
@@ -317,7 +317,7 @@ class JuneauBeanStoreExtension_Test extends TestBase {
        }
 
        @Test
-       void i05_getStore_returnsClassScope_whenNoMethodScope() throws 
Exception {
+       void i05_getStore_returnsClassScope_whenNoMethodScope() {
                var ext = JuneauBeanStoreExtension.create();
                var classCtx = 
org.apache.juneau.junit5.testsupport.StubExtensionContext.of(F02_NullableField.class,
 null);
                ext.beforeAll(classCtx);
@@ -330,7 +330,7 @@ class JuneauBeanStoreExtension_Test extends TestBase {
        }
 
        @Test
-       void i06_readClassStore_returnsNull_whenNoParentChainHasIt() throws 
Exception {
+       void i06_readClassStore_returnsNull_whenNoParentChainHasIt() {
                // Build a method context whose parent chain does NOT contain a 
class-scope store.
                var ext = JuneauBeanStoreExtension.create();
                var standaloneCtx = 
org.apache.juneau.junit5.testsupport.StubExtensionContext.of(F02_NullableField.class,
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/junit5/TestBeanStore_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/junit5/TestBeanStore_Test.java
index e480270174..f757f8ba57 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/junit5/TestBeanStore_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/junit5/TestBeanStore_Test.java
@@ -110,6 +110,7 @@ class TestBeanStore_Test extends TestBase {
        // c — supplier-based overrides
        
//-----------------------------------------------------------------------------------------------------------------
 
+       @SuppressWarnings("java:S125") // Explanatory prose on 
overload-resolution; not dead code.
        @Test
        void c01_supplier_invokedLazily() {
                var calls = new AtomicInteger();
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/StackOverlay_RestContext_Spike_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/StackOverlay_RestContext_Spike_Test.java
index 239c554d84..ec00f38719 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/StackOverlay_RestContext_Spike_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/StackOverlay_RestContext_Spike_Test.java
@@ -158,6 +158,7 @@ class StackOverlay_RestContext_Spike_Test extends TestBase {
        // d — toString lifecycle / cycle safety on the production-shaped 
composition
        
//-----------------------------------------------------------------------------------------------------------------
 
+       @SuppressWarnings("java:S125") // Explanatory prose describing the 
fixture shape; not dead code.
        @Test
        void d01_toString_doesNotStackOverflow_onProductionShapedComposition() {
                // Production shape: outer BasicBeanStore holds StackOverlay in 
its overridingParent slot;
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/ops/RouteIndexMixin_AsMixin_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/ops/RouteIndexMixin_AsMixin_Test.java
index 7e2982e6e0..0a45537144 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/ops/RouteIndexMixin_AsMixin_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/ops/RouteIndexMixin_AsMixin_Test.java
@@ -155,6 +155,7 @@ class RouteIndexMixin_AsMixin_Test extends TestBase {
        @Rest(mixins=RouteIndexMixin.class)
        public static class C extends RestServlet implements 
BasicUniversalConfig {
                private static final long serialVersionUID = 1L;
+               @Deprecated
                @RestGet(path="/c-item", summary="C item",
                        description={"line one", "line two"})
                public String cItem() { return "c"; }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/view/jsp/JspMixin_PathTraversal_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/view/jsp/JspMixin_PathTraversal_Test.java
index d3fb50c60f..464471c116 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/view/jsp/JspMixin_PathTraversal_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/view/jsp/JspMixin_PathTraversal_Test.java
@@ -104,6 +104,7 @@ class JspMixin_PathTraversal_Test extends TestBase {
        // URL-encoded traversal handling
        
//-----------------------------------------------------------------------------------------------------------------
 
+       @SuppressWarnings("java:S125") // Explanatory prose on URL-decoding 
behaviour; not dead code.
        @Test void t05_urlEncodedTraversal_doesNotEscape() throws Exception {
                // Behavior depends on whether HttpClient / MockRest 
URL-decodes %2e%2e before the
                // handler sees the path:

Reply via email to