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 103fe96dc3 SonarQube bug fixes
103fe96dc3 is described below

commit 103fe96dc32b70bbe4e77a8b2d46464de464adaa
Author: James Bognar <[email protected]>
AuthorDate: Wed Feb 18 13:04:44 2026 -0500

    SonarQube bug fixes
---
 .../apache/juneau/commons/collections/Cache.java   |   2 +-
 .../juneau/commons/collections/MultiList.java      | 180 +++++++++++----------
 .../juneau/commons/collections/MultiMap.java       | 127 ++++++++-------
 .../apache/juneau/commons/logging/LogRecord.java   |   5 +-
 .../org/apache/juneau/commons/logging/Logger.java  |   2 +-
 .../apache/juneau/commons/reflect/ClassInfo.java   |   4 +-
 .../apache/juneau/commons/utils/StringUtils.java   |   7 +-
 .../org/apache/juneau/commons/utils/Utils.java     |   2 +-
 .../src/main/java/org/apache/juneau/BeanMeta.java  |   1 +
 .../apache/juneau/msgpack/MsgPackInputStream.java  |   3 +-
 .../java/org/apache/juneau/parser/ParserPipe.java  |   6 +-
 .../org/apache/juneau/examples/rest/TestUtils.java |   2 +-
 .../org/apache/juneau/rest/client/RestClient.java  |   4 +-
 .../juneau/http/response/BasicHttpException.java   |  14 ++
 .../apache/juneau/rest/converter/Queryable.java    |  84 +++++-----
 .../resources/htdocs/scripts/MenuItemWidget.js     |   2 +-
 .../src/test/java/DefaultPackageTestClass.java     |   2 +-
 .../commons/reflect/ExecutableInfo_Test.java       |   4 +-
 .../juneau/rest/client/RestCallException_Test.java |  19 +--
 19 files changed, 243 insertions(+), 227 deletions(-)

diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/Cache.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/Cache.java
index 2f87edfa04..f7dd900611 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/Cache.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/Cache.java
@@ -488,7 +488,7 @@ public class Cache<K,V> {
        protected Cache(Builder<K,V> builder) {
                this.maxSize = builder.maxSize;
                this.disableCaching = builder.cacheMode == NONE;
-               this.supplier = builder.supplier != null ? builder.supplier : 
(key) -> null;
+               this.supplier = builder.supplier != null ? builder.supplier : 
key -> null;
                this.isThreadLocal = builder.threadLocal;
 
                if (isThreadLocal) {
diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/MultiList.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/MultiList.java
index 01b230d88c..79f443f800 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/MultiList.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/MultiList.java
@@ -332,112 +332,116 @@ public class MultiList<E> extends AbstractList<E> {
        public ListIterator<E> listIterator(int index) {
                if (index < 0 || index > size())
                        throw new IndexOutOfBoundsException("Index: " + index + 
", Size: " + size());
-               return new ListIterator<>() {
-                       int currentIndex = index;
-                       int listIndex = 0;
-                       int offset = 0;
-                       ListIterator<E> currentIterator = null;
+               return new MultiListIterator(index);
+       }
 
-                       {
-                               // Initialize to the correct position
-                               for (var i = 0; i < l.length; i++) {
-                                       var size = l[i].size();
-                                       if (index < offset + size) {
-                                               listIndex = i;
-                                               currentIterator = 
l[i].listIterator(index - offset);
-                                               break;
-                                       }
-                                       offset += size;
-                               }
-                               if (currentIterator == null && l.length > 0) {
-                                       // Index is at the end, position at the 
last list
-                                       listIndex = l.length - 1;
-                                       currentIterator = 
l[listIndex].listIterator(l[listIndex].size());
+       private final class MultiListIterator implements ListIterator<E> {
+               int currentIndex;
+               int listIndex;
+               int offset;
+               ListIterator<E> currentIterator;
+
+               MultiListIterator(int index) {
+                       currentIndex = index;
+                       listIndex = 0;
+                       offset = 0;
+                       currentIterator = null;
+                       for (var i = 0; i < l.length; i++) {
+                               var size = l[i].size();
+                               if (index < offset + size) {
+                                       listIndex = i;
+                                       currentIterator = 
l[i].listIterator(index - offset);
+                                       break;
                                }
+                               offset += size;
                        }
+                       if (currentIterator == null && l.length > 0) {
+                               listIndex = l.length - 1;
+                               currentIterator = 
l[listIndex].listIterator(l[listIndex].size());
+                       }
+               }
 
-                       @Override
-                       public boolean hasNext() {
-                               if (currentIterator == null)
-                                       return false;
-                               if (currentIterator.hasNext())
-                                       return true;
-                               for (var j = listIndex + 1; j < l.length; j++)
-                                       if (l[j].size() > 0)
-                                               return true;
+               @Override
+               public boolean hasNext() {
+                       if (currentIterator == null)
                                return false;
-                       }
+                       if (currentIterator.hasNext())
+                               return true;
+                       for (var j = listIndex + 1; j < l.length; j++)
+                               if (l[j].size() > 0)
+                                       return true;
+                       return false;
+               }
 
-                       @Override
-                       public E next() {
-                               if (currentIterator == null)
+               @Override
+               public E next() {
+                       if (currentIterator == null)
+                               throw new NoSuchElementException();
+                       while (! currentIterator.hasNext()) {
+                               if (listIndex + 1 >= l.length)
                                        throw new NoSuchElementException();
-                               while (! currentIterator.hasNext()) {
-                                       if (listIndex + 1 >= l.length)
-                                               throw new 
NoSuchElementException();
-                                       listIndex++;
-                                       currentIterator = 
l[listIndex].listIterator();
-                               }
-                               currentIndex++;
-                               return currentIterator.next();
+                               listIndex++;
+                               currentIterator = l[listIndex].listIterator();
                        }
+                       currentIndex++;
+                       return currentIterator.next();
+               }
 
-                       @Override
-                       public boolean hasPrevious() {
-                               if (currentIterator == null)
-                                       return false;
-                               if (currentIterator.hasPrevious())
-                                       return true;
-                               for (var j = listIndex - 1; j >= 0; j--)
-                                       if (l[j].size() > 0)
-                                               return true;
+               @Override
+               public boolean hasPrevious() {
+                       if (currentIterator == null)
                                return false;
-                       }
+                       if (currentIterator.hasPrevious())
+                               return true;
+                       for (var j = listIndex - 1; j >= 0; j--)
+                               if (l[j].size() > 0)
+                                       return true;
+                       return false;
+               }
 
-                       @Override
-                       public E previous() {
-                               if (currentIterator == null)
+               @Override
+               public E previous() {
+                       if (currentIterator == null)
+                               throw new NoSuchElementException();
+                       while (! currentIterator.hasPrevious()) {
+                               if (listIndex == 0)
                                        throw new NoSuchElementException();
-                               while (! currentIterator.hasPrevious()) {
-                                       if (listIndex == 0)
-                                               throw new 
NoSuchElementException();
-                                       listIndex--;
-                                       currentIterator = 
l[listIndex].listIterator(l[listIndex].size());
-                               }
-                               currentIndex--;
-                               return currentIterator.previous();
+                               listIndex--;
+                               currentIterator = 
l[listIndex].listIterator(l[listIndex].size());
                        }
+                       currentIndex--;
+                       return currentIterator.previous();
+               }
 
-                       @Override
-                       public int nextIndex() {
-                               return currentIndex;
-                       }
+               @Override
+               public int nextIndex() {
+                       return currentIndex;
+               }
 
-                       @Override
-                       public int previousIndex() {
-                               return currentIndex - 1;
-                       }
+               @Override
+               public int previousIndex() {
+                       return currentIndex - 1;
+               }
 
-                       @Override
-                       public void remove() {
-                               if (currentIterator == null)
-                                       throw new IllegalStateException();
-                               currentIterator.remove();
-                               currentIndex--;
-                       }
+               @Override
+               public void remove() {
+                       if (currentIterator == null)
+                               throw new IllegalStateException();
+                       currentIterator.remove();
+                       currentIndex--;
+               }
 
-                       @Override
-                       public void set(E e) {
-                               if (currentIterator == null)
-                                       throw new IllegalStateException();
-                               currentIterator.set(e);
-                       }
+               @Override
+               public void set(E e) {
+                       if (currentIterator == null)
+                               throw new IllegalStateException();
+                       currentIterator.set(e);
+               }
 
-                       @Override
-                       public void add(E e) {
-                               throw new 
UnsupportedOperationException("MultiList does not support add operations");
-                       }
-               };
+               @Override
+               public void add(E e) {
+                       throw new UnsupportedOperationException("MultiList does 
not support add operations");
+               }
        }
 
        /**
diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/MultiMap.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/MultiMap.java
index a2cc71a78f..a466feb7a3 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/MultiMap.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/MultiMap.java
@@ -210,67 +210,7 @@ public class MultiMap<K,V> extends AbstractMap<K,V> {
                return new AbstractSet<>() {
                        @Override
                        public Iterator<Entry<K,V>> iterator() {
-                               return new Iterator<>() {
-                                       int mapIndex = 0;
-                                       Iterator<Entry<K,V>> currentIterator;
-                                       Set<K> seenKeys = new HashSet<>();
-                                       Entry<K,V> nextEntry;
-                                       Iterator<Entry<K,V>> lastIterator; // 
Iterator that produced the last entry
-                                       boolean canRemove = false; // Whether 
remove() can be called
-
-                                       {
-                                               // Initialize to first map's 
iterator
-                                               if (m.length > 0) {
-                                                       currentIterator = 
m[0].entrySet().iterator();
-                                                       advance();
-                                               }
-                                       }
-
-                                       private void advance() {
-                                               nextEntry = null;
-                                               while (currentIterator != null) 
{
-                                                       while 
(currentIterator.hasNext()) {
-                                                               var entry = 
currentIterator.next();
-                                                               if 
(!seenKeys.contains(entry.getKey())) {
-                                                                       
seenKeys.add(entry.getKey());
-                                                                       
nextEntry = entry;
-                                                                       return;
-                                                               }
-                                                       }
-                                                       // Move to next map
-                                                       mapIndex++;
-                                                       if (mapIndex < 
m.length) {
-                                                               currentIterator 
= m[mapIndex].entrySet().iterator();
-                                                       } else {
-                                                               currentIterator 
= null;
-                                                       }
-                                               }
-                                       }
-
-                                       @Override
-                                       public boolean hasNext() {
-                                               return nextEntry != null;
-                                       }
-
-                                       @Override
-                                       public Entry<K,V> next() {
-                                               if (nextEntry == null)
-                                                       throw new 
NoSuchElementException();
-                                               var result = nextEntry;
-                                               lastIterator = currentIterator; 
// Store the iterator that produced this entry
-                                               canRemove = true;
-                                               advance();
-                                               return result;
-                                       }
-
-                                       @Override
-                                       public void remove() {
-                                               if (!canRemove || lastIterator 
== null)
-                                                       throw new 
IllegalStateException();
-                                               lastIterator.remove();
-                                               canRemove = false;
-                                       }
-                               };
+                               return new EntryIterator();
                        }
 
                        @Override
@@ -280,6 +220,71 @@ public class MultiMap<K,V> extends AbstractMap<K,V> {
                };
        }
 
+       private final class EntryIterator implements Iterator<Entry<K,V>> {
+               int mapIndex;
+               Iterator<Entry<K,V>> currentIterator;
+               final Set<K> seenKeys = new HashSet<>();
+               Entry<K,V> nextEntry;
+               Iterator<Entry<K,V>> lastIterator;
+               boolean canRemove;
+
+               EntryIterator() {
+                       mapIndex = 0;
+                       currentIterator = null;
+                       nextEntry = null;
+                       lastIterator = null;
+                       canRemove = false;
+                       if (m.length > 0) {
+                               currentIterator = m[0].entrySet().iterator();
+                               advance();
+                       }
+               }
+
+               private void advance() {
+                       nextEntry = null;
+                       while (currentIterator != null) {
+                               while (currentIterator.hasNext()) {
+                                       var entry = currentIterator.next();
+                                       if (!seenKeys.contains(entry.getKey())) 
{
+                                               seenKeys.add(entry.getKey());
+                                               nextEntry = entry;
+                                               return;
+                                       }
+                               }
+                               mapIndex++;
+                               if (mapIndex < m.length) {
+                                       currentIterator = 
m[mapIndex].entrySet().iterator();
+                               } else {
+                                       currentIterator = null;
+                               }
+                       }
+               }
+
+               @Override
+               public boolean hasNext() {
+                       return nextEntry != null;
+               }
+
+               @Override
+               public Entry<K,V> next() {
+                       if (nextEntry == null)
+                               throw new NoSuchElementException();
+                       var result = nextEntry;
+                       lastIterator = currentIterator;
+                       canRemove = true;
+                       advance();
+                       return result;
+               }
+
+               @Override
+               public void remove() {
+                       if (!canRemove || lastIterator == null)
+                               throw new IllegalStateException();
+                       lastIterator.remove();
+                       canRemove = false;
+               }
+       }
+
        /**
         * Returns the number of unique key-value mappings in this map.
         *
diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/logging/LogRecord.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/logging/LogRecord.java
index ed91be17be..e778a08514 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/logging/LogRecord.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/logging/LogRecord.java
@@ -49,8 +49,9 @@ import org.apache.juneau.commons.utils.*;
  * </ul>
  */
 @SuppressWarnings({
-       "java:S115", // Constants use UPPER_snakeCase convention
-       "java:S100" // Class name intentionally matches 
java.util.logging.LogRecord
+       "java:S115",  // Constants use UPPER_snakeCase convention
+       "java:S100", // Class name intentionally matches 
java.util.logging.LogRecord
+       "java:S1192" // Rename not desired; extends java.util.logging.LogRecord 
for compatibility
 })
 public class LogRecord extends java.util.logging.LogRecord {
 
diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/logging/Logger.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/logging/Logger.java
index 8dbb12ee1b..a54e7694b7 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/logging/Logger.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/logging/Logger.java
@@ -75,7 +75,7 @@ import org.apache.juneau.commons.collections.Cache;
  *     <li class='jc'>{@link java.util.logging.Logger}
  * </ul>
  */
-@SuppressWarnings("java:S100") // Class name intentionally matches 
java.util.logging.Logger
+@SuppressWarnings({ "java:S100", "java:S1192" }) // Class name intentionally 
matches java.util.logging.Logger for compatibility
 public class Logger extends java.util.logging.Logger {
 
        /**
diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ClassInfo.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ClassInfo.java
index f2a2a04a20..714ce4e7dc 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ClassInfo.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ClassInfo.java
@@ -76,7 +76,7 @@ public class ClassInfo extends ElementInfo implements 
Annotatable, Type, Compara
        private static final String ARG_type = "type";
        private static final String ARG_pt = "pt";
 
-       private static final Cache<Class,ClassInfoTyped> CACHE = 
Cache.of(Class.class, ClassInfoTyped.class).build();
+       private static final Cache<Class,ClassInfo> CACHE = 
Cache.of(Class.class, ClassInfo.class).build();
 
        /** Reusable cached ClassInfo instance for Object.class. */
        public static final ClassInfo OBJECT = ClassInfo.of(Object.class);
@@ -149,7 +149,7 @@ public class ClassInfo extends ElementInfo implements 
Annotatable, Type, Compara
         * @return The constructed class info.
         */
        public static <T> ClassInfoTyped<T> of(Class<T> inner) {
-               return CACHE.get(inner, () -> new ClassInfoTyped<>(inner));
+               return (ClassInfoTyped<T>) CACHE.get(inner, () -> new 
ClassInfoTyped<>(inner));
        }
 
        /**
diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/StringUtils.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/StringUtils.java
index 6693fc74ca..26f1ff1a66 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/StringUtils.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/StringUtils.java
@@ -363,7 +363,7 @@ public class StringUtils {
                        var b0 = BASE64M2[i0];
                        var b1 = BASE64M2[i1];
                        var b2 = BASE64M2[i2];
-                       var b3 = BASE64M2[i3];
+                       var b3 = BASE64M2[i3 & 0xff];
                        var o0 = (b0 << 2) | (b1 >>> 4);
                        var o1 = ((b1 & 0xf) << 4) | (b2 >>> 2);
                        var o2 = ((b2 & 3) << 6) | b3;
@@ -1848,7 +1848,7 @@ public class StringUtils {
 
                var result = new ArrayList<String>();
                // Basic URL pattern: protocol://domain/path
-               var pattern = 
Pattern.compile("(?:https?|ftp)://[\\w\\-._~:/?#\\[\\]@!$&'()*+,;=%]+", 
Pattern.CASE_INSENSITIVE);
+               var pattern = 
Pattern.compile("(?:https?|ftp)://[\\w\\-.~:/?#\\[\\]@!$&'()*+,;=%]+", 
Pattern.CASE_INSENSITIVE);
                var matcher = pattern.matcher(str);
                while (matcher.find()) {
                        result.add(matcher.group());
@@ -2668,8 +2668,9 @@ public class StringUtils {
                if (end > lines.length)
                        end = lines.length;
                var sb = new StringBuilder();
+               var format = String.format("%%0%dd", digits);
                for (var l : l(lines).subList(start - 1, end))
-                       sb.append(String.format("%0" + digits + "d", 
start++)).append(": ").append(l).append("\n");
+                       sb.append(String.format(format, start++)).append(": 
").append(l).append("\n");
                return sb.toString();
        }
 
diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/Utils.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/Utils.java
index e74bd57037..6ce172a46e 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/Utils.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/Utils.java
@@ -1696,7 +1696,7 @@ public class Utils {
        public static final void printLines(String[] lines) {
                Logger log = Logger.getLogger(Utils.class);
                for (var i = 0; i < lines.length; i++)
-                       log.info(String.format("%4s:" + lines[i], i + 1));
+                       log.info(String.format("%4s:%s", i + 1, lines[i]));
        }
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
index fa16d57ac3..11cec3d986 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
@@ -585,6 +585,7 @@ public class BeanMeta<T> {
                beanProxyInvocationHandler = 
mem(()->beanContext.isUseInterfaceProxies() && c.isInterface() ? new 
BeanProxyInvocationHandler<>(this) : null);
        }
 
+       @SuppressWarnings("java:S107") // 8 parameters needed for property 
validation context
        private void validateAndRegisterProperty(BeanPropertyMeta.Builder p, 
Class<?> c, TypeVariables typeVarImpls, Set<String> readOnlyProps, Set<String> 
writeOnlyProps, Iterator<BeanPropertyMeta.Builder> i, Map<Method,String> 
getterProps, Map<Method,String> setterProps) {
                try {
                        if (p.field == null)
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackInputStream.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackInputStream.java
index 5524460b11..de83b2f303 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackInputStream.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackInputStream.java
@@ -60,7 +60,6 @@ public class MsgPackInputStream extends ParserInputStream {
                /*0xF?*/ 
INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT
        };
        // @formatter:on
-       private DataType currentDataType;
        private long length;
        private int lastByte;
        private int extType;
@@ -140,7 +139,7 @@ public class MsgPackInputStream extends ParserInputStream {
                int i = read();
                if (i == -1)
                        throw ioex("Unexpected end of file found at position 
{0}", pos2);
-               currentDataType = TYPES[i];
+               DataType currentDataType = TYPES[i];
                switch (currentDataType) {
                        case NULL, FLOAT: {
                                length = 4;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserPipe.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserPipe.java
index cb72a2f7fb..d2b512b7fb 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserPipe.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserPipe.java
@@ -72,7 +72,6 @@ public class ParserPipe implements Closeable {
        private String inputString;
        private InputStream inputStream;
        private Reader reader;
-       private ParserReader parserReader;
        private boolean doClose;
        private BinaryFormat binaryFormat;
        private Positionable positionable;
@@ -255,10 +254,7 @@ public class ParserPipe implements Closeable {
        public ParserReader getParserReader() throws IOException {
                if (input == null)
                        return null;
-               if (input instanceof ParserReader input2)
-                       parserReader = input2;
-               else
-                       parserReader = new ParserReader(this);
+               ParserReader parserReader = input instanceof ParserReader 
input2 ? input2 : new ParserReader(this);
                return parserReader;
        }
 
diff --git 
a/juneau-examples/juneau-examples-rest-jetty-ftest/src/test/java/org/apache/juneau/examples/rest/TestUtils.java
 
b/juneau-examples/juneau-examples-rest-jetty-ftest/src/test/java/org/apache/juneau/examples/rest/TestUtils.java
index 85f6ec8ac7..63857c276d 100644
--- 
a/juneau-examples/juneau-examples-rest-jetty-ftest/src/test/java/org/apache/juneau/examples/rest/TestUtils.java
+++ 
b/juneau-examples/juneau-examples-rest-jetty-ftest/src/test/java/org/apache/juneau/examples/rest/TestUtils.java
@@ -147,7 +147,7 @@ public class TestUtils {
 
        private static void printLines(String[] lines) {
                for (var i = 0; i < lines.length; i++)
-                       System.err.println(String.format("%4s:" + lines[i], i + 
1));  // NOT DEBUG
+                       System.err.println(String.format("%4s:%s", i + 1, 
lines[i]));  // NOT DEBUG
        }
 
        public static void validateXml(Object o) throws Exception {
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
index 26a16684e7..ebd2238d36 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
@@ -6345,7 +6345,8 @@ public class RestClient extends BeanContextable 
implements HttpClient, Closeable
                                        mark = i;
                                        // State machine requires state 
transition to S5, SonarLint reports false positive
                                        @SuppressWarnings({
-                                               "java:S1854" // State machine 
requires state transition to S5, SonarLint reports false positive
+                                               "java:S1854",  // State machine 
requires state transition to S5
+                                               "java:S1481"   // unused 
variable intentional; assignment is for side effect (state = S5)
                                        })
                                        var unused = (state = S5);
                                }
@@ -7781,6 +7782,7 @@ public class RestClient extends BeanContextable 
implements HttpClient, Closeable
         */
        @Override
        @Deprecated(since = "9", forRemoval = true) // Object.finalize() is 
deprecated
+       @SuppressWarnings("java:S1113") // Kept for detectLeaks; logs warning 
when RestClient is GC'd without close
        protected void finalize() throws Throwable {
                if (detectLeaks && ! isClosed.get() && ! keepHttpClientOpen) {
                        var sb = new StringBuilder("WARNING:  RestClient 
garbage collected before it was finalized.");  // NOT DEBUG
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/response/BasicHttpException.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/response/BasicHttpException.java
index 3947660529..f23bb1bd5d 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/response/BasicHttpException.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/response/BasicHttpException.java
@@ -290,6 +290,20 @@ public class BasicHttpException extends 
BasicRuntimeException implements HttpRes
        @Override /* Overridden from HttpMessage */
        public StatusLine getStatusLine() { return statusLine; }
 
+       @Override /* Overridden from Object */
+       public boolean equals(Object o) {
+               return this == o || (o instanceof BasicHttpException other && 
eq(this, other, (x, y) -> {
+                       Throwable t1 = x, t2 = y;
+                       while (nn(t1) && nn(t2)) {
+                               if (!Arrays.equals(t1.getStackTrace(), 
t2.getStackTrace()))
+                                       return false;
+                               t1 = t1.getCause();
+                               t2 = t2.getCause();
+                       }
+                       return t1 == null && t2 == null;
+               }));
+       }
+
        @Override /* Overridden from Object */
        public int hashCode() {
                int i = 0;
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converter/Queryable.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converter/Queryable.java
index b668592f2d..33e91a74d4 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converter/Queryable.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converter/Queryable.java
@@ -84,52 +84,52 @@ public class Queryable implements RestConverter {
         * Swagger parameters for this converter.
         */
        public static final String SWAGGER_PARAMS = """
-               {
-                       in:'query',
-                       name:'s',
-                       description:'Search.
+\t\t{
+\t\t\tin:'query',
+\t\t\tname:'s',
+\t\t\tdescription:'Search.
 \t\t\t\tKey/value pairs representing column names and search tokens.
 \t\t\t\t\\'*\\' and \\'?\\' can be used as meta-characters in string fields.
 \t\t\t\t\\'>\\', \\'>=\\', \\'<\\', and \\'<=\\' can be used as limits on 
numeric and date fields.
 \t\t\t\tDate fields can be matched with partial dates (e.g. \\'2018\\' to 
match any date in the year 2018).',
-                       type:'array',
-                       collectionFormat:'csv',
-                       examples:{example:'?s=Bill*,birthDate>2000'}
-               },{
-                       in:'query',
-                       name:'v',
-                       description:'View.
-                               Column names to display.',
-                       type:'array',
-                       collectionFormat:'csv',
-                       examples:{example:'?v=name,birthDate'}
-               },{
-                       in:'query',
-                       name:'o',
-                       description:'Order by.
-                               Columns to sort by.
-                               Column names can be suffixed with \\'+\\' or 
\\'-\\' to indicate ascending or descending order.
-                               The default is ascending order.',
-                       type:'array',
-                       collectionFormat:'csv',
-                       examples:{example:'?o=name,birthDate-'}
-               },{
-                       in:'query',
-                       name:'p',
-                       description:'Position.
-                               Only return rows starting at the specified 
index position (zero-indexed).
-                               Default is 0',
-                       type:'integer',
-                       examples:{example:'?p=100'}
-               },{
-                       in:'query',
-                       name:'l',
-                       description:'Limit.
-                               Only return the specified number of rows.
-                               Default is 0 (meaning return all rows).',
-                       type:'integer',
-                       examples:{example:'?l=100'}
-               }""";
+\t\t\ttype:'array',
+\t\t\tcollectionFormat:'csv',
+\t\t\texamples:{example:'?s=Bill*,birthDate>2000'}
+\t\t},{
+\t\t\tin:'query',
+\t\t\tname:'v',
+\t\t\tdescription:'View.
+\t\t\t\tColumn names to display.',
+\t\t\ttype:'array',
+\t\t\tcollectionFormat:'csv',
+\t\t\texamples:{example:'?v=name,birthDate'}
+\t\t},{
+\t\t\tin:'query',
+\t\t\tname:'o',
+\t\t\tdescription:'Order by.
+\t\t\t\tColumns to sort by.
+\t\t\t\tColumn names can be suffixed with \\'+\\' or \\'-\\' to indicate 
ascending or descending order.
+\t\t\t\tThe default is ascending order.',
+\t\t\ttype:'array',
+\t\t\tcollectionFormat:'csv',
+\t\t\texamples:{example:'?o=name,birthDate-'}
+\t\t},{
+\t\t\tin:'query',
+\t\t\tname:'p',
+\t\t\tdescription:'Position.
+\t\t\t\tOnly return rows starting at the specified index position 
(zero-indexed).
+\t\t\t\tDefault is 0',
+\t\t\ttype:'integer',
+\t\t\texamples:{example:'?p=100'}
+\t\t},{
+\t\t\tin:'query',
+\t\t\tname:'l',
+\t\t\tdescription:'Limit.
+\t\t\t\tOnly return the specified number of rows.
+\t\t\t\tDefault is 0 (meaning return all rows).',
+\t\t\ttype:'integer',
+\t\t\texamples:{example:'?l=100'}
+\t\t}""";
 
        @Override /* Overridden from RestConverter */
        public Object convert(RestRequest req, Object o) {
diff --git 
a/juneau-rest/juneau-rest-server/src/main/resources/htdocs/scripts/MenuItemWidget.js
 
b/juneau-rest/juneau-rest-server/src/main/resources/htdocs/scripts/MenuItemWidget.js
index b06c194ce4..6856959bbe 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/resources/htdocs/scripts/MenuItemWidget.js
+++ 
b/juneau-rest/juneau-rest-server/src/main/resources/htdocs/scripts/MenuItemWidget.js
@@ -25,7 +25,7 @@ function menuClick(item) {
        popupItem = item;
 }
 
-window.onclick = function(event) {
+globalThis.onclick = function(event) {
        if (popupItem != null && popupItem != event.target && ! 
popupItem.nextElementSibling.contains(event.target)) {
                closePopup();
        }
diff --git a/juneau-utest/src/test/java/DefaultPackageTestClass.java 
b/juneau-utest/src/test/java/DefaultPackageTestClass.java
index d14972216b..f3a1a0d2b5 100644
--- a/juneau-utest/src/test/java/DefaultPackageTestClass.java
+++ b/juneau-utest/src/test/java/DefaultPackageTestClass.java
@@ -18,7 +18,7 @@
 // This class is intentionally in the default package to test line 588 false 
branch
 // where a class has $ (is an inner class) but has no package
 
-@SuppressWarnings("java:S1220")
+@SuppressWarnings({ "java:S1220", "java:S1228" }) // Intentionally in default 
package for test
 public class DefaultPackageTestClass {
        public int testField;  // Field for testing FieldInfo.getFullName() 
with null package
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/ExecutableInfo_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/ExecutableInfo_Test.java
index ec2eaa3785..354891c609 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/ExecutableInfo_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/commons/reflect/ExecutableInfo_Test.java
@@ -896,7 +896,7 @@ class ExecutableInfo_Test extends TestBase {
                protected void protectedMethod() {}
                static void staticMethod() {}
                final void finalMethod() {}
-               public void methodWithThrows() throws java.io.IOException, 
java.lang.Exception {}
+               public void methodWithThrows() throws java.lang.Exception {}
                public <T> void genericMethod(T t) {}
                public <T extends Comparable<T>> void genericMethodWithBounds(T 
t) {}
        }
@@ -936,7 +936,7 @@ class ExecutableInfo_Test extends TestBase {
 
                // Method with throws
                var methodWithThrows = ci.getPublicMethod(x -> 
x.hasName("methodWithThrows")).get();
-               assertEquals("public void 
org.apache.juneau.commons.reflect.ExecutableInfo_Test$ToStringTestClass.methodWithThrows()
 throws java.io.IOException, java.lang.Exception", methodWithThrows.toString());
+               assertEquals("public void 
org.apache.juneau.commons.reflect.ExecutableInfo_Test$ToStringTestClass.methodWithThrows()
 throws java.lang.Exception", methodWithThrows.toString());
 
                // Generic method
                var genericMethod = ci.getPublicMethod(x -> 
x.hasName("genericMethod")).get();
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestCallException_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestCallException_Test.java
index 238b243388..1ded2d22e8 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestCallException_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestCallException_Test.java
@@ -54,20 +54,13 @@ class RestCallException_Test extends TestBase {
        }
 
        @Test void a01_basic() throws Exception {
-               try {
-                       client().build().get().run();
-                       fail();
-               } catch (RestCallException e) {
-                       assertEquals(404, e.getResponseCode());
-                       assertNull(e.getCause());
-               }
+               RestCallException ex1 = assertThrows(RestCallException.class, 
() -> client().build().get().run());
+               assertEquals(404, ex1.getResponseCode());
+               assertNull(ex1.getCause());
 
-               try {
-                       client().build().post("/echo",new 
StringEntity("{f:")).run().getContent().as(ABean.class);
-                       fail();
-               } catch (RestCallException e) {
-                       assertThrowable(Exception.class, "Could not find '}'", 
e.getCause(ParseException.class));
-               }
+               RestCallException ex2 = assertThrows(RestCallException.class, 
() ->
+                       client().build().post("/echo", new 
StringEntity("{f:")).run().getContent().as(ABean.class));
+               assertThrowable(Exception.class, "Could not find '}'", 
ex2.getCause(ParseException.class));
 
                var e = new RestCallException(null, null, null);
                assertNotNull(e.getThrown());

Reply via email to