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 4fe56a4a40 org.apache.juneau.common.reflect API improvements
4fe56a4a40 is described below
commit 4fe56a4a404daba9ca69dd6896ccdf9db7928aba
Author: James Bognar <[email protected]>
AuthorDate: Tue Nov 18 10:30:24 2025 -0500
org.apache.juneau.common.reflect API improvements
---
.../juneau/common/reflect/ReflectionMap.java | 47 +++-
.../src/main/java/org/apache/juneau/Context.java | 2 -
.../org/apache/juneau/csv/CsvMetaProvider.java | 1 -
.../org/apache/juneau/html/HtmlMetaProvider.java | 1 -
.../juneau/httppart/bean/MethodInfoUtils.java | 2 -
.../org/apache/juneau/json/JsonMetaProvider.java | 1 -
.../juneau/jsonschema/JsonSchemaMetaProvider.java | 1 -
.../apache/juneau/msgpack/MsgPackMetaProvider.java | 1 -
.../apache/juneau/oapi/OpenApiMetaProvider.java | 1 -
.../juneau/plaintext/PlainTextMetaProvider.java | 1 -
.../apache/juneau/soap/SoapXmlMetaProvider.java | 1 -
.../org/apache/juneau/uon/UonMetaProvider.java | 1 -
.../urlencoding/UrlEncodingMetaProvider.java | 1 -
.../org/apache/juneau/xml/XmlMetaProvider.java | 1 -
.../rest/client/remote/RemoteOperationMeta.java | 1 -
.../src/test/java/DefaultPackageTestClass.java | 33 +--
.../org/apache/juneau/annotation/Bean_Test.java | 1 -
.../juneau/common/reflect/AnnotationInfoTest.java | 2 -
.../juneau/common/reflect/ParamInfoTest.java | 1 -
.../juneau/common/reflect/ReflectionMap_Test.java | 261 +++++++++++++++++++--
.../juneau/csv/annotation/CsvConfig_Test.java | 1 -
.../juneau/html/HtmlConfigAnnotation_Test.java | 1 -
.../juneau/json/JsonConfigAnnotationTest.java | 1 -
.../juneau/jsonschema/JsonSchemaGeneratorTest.java | 2 -
.../msgpack/MsgPackConfigAnnotationTest.java | 1 -
.../juneau/oapi/OpenApiConfigAnnotation_Test.java | 2 -
.../juneau/parser/ParserConfigAnnotationTest.java | 1 -
.../plaintext/PlainTextConfigAnnotation_Test.java | 1 -
.../client/RestClient_Config_Context_Test.java | 2 -
.../serializer/SerializerConfigAnnotationTest.java | 1 -
.../juneau/soap/SoapXmlConfigAnnotationTest.java | 1 -
.../apache/juneau/uon/UonConfigAnnotationTest.java | 1 -
.../UrlEncodingConfigAnnotationTest.java | 1 -
.../apache/juneau/xml/XmlConfigAnnotationTest.java | 1 -
34 files changed, 277 insertions(+), 101 deletions(-)
diff --git
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ReflectionMap.java
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ReflectionMap.java
index 21a93795fb..4cf6cacc03 100644
---
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ReflectionMap.java
+++
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ReflectionMap.java
@@ -208,11 +208,11 @@ public class ReflectionMap<V> {
classEntries = list();
methodEntries = list();
fieldEntries = list();
- constructorEntries = list();
- }
+ constructorEntries = list();
+ }
- /**
- * Adds one or more mappings to this builder.
+ /**
+ * Adds one or more mappings to this builder.
*
* <p>
* This method accepts pattern strings that identify classes,
methods, fields, or constructors,
@@ -292,9 +292,9 @@ public class ReflectionMap<V> {
*
* @return A new immutable {@link ReflectionMap} instance.
*/
- public ReflectionMap<V> build() {
- return new ReflectionMap<>(this);
- }
+ public ReflectionMap<V> build() {
+ return new ReflectionMap<>(this);
+ }
}
private static class ClassEntry<V> {
@@ -332,7 +332,11 @@ public class ReflectionMap<V> {
ConstructorEntry(String name, V value) {
int i = name.indexOf('(');
- this.args = splita(name.substring(i + 1, name.length()
- 1));
+ this.args = splitMethodArgs(name.substring(i + 1,
name.length() - 1));
+ for (int j = 0; j < args.length; j++) {
+ // Strip off generic parameters (e.g.,
"List<String>[]" -> "List[]")
+ args[j] = stripGenerics(args[j]);
+ }
name = name.substring(0, i).trim();
this.simpleClassName = simpleClassName(name);
this.fullClassName = name;
@@ -404,10 +408,8 @@ public class ReflectionMap<V> {
this.args = i == -1 ? null :
splitMethodArgs(name.substring(i + 1, name.length() - 1));
if (nn(args)) {
for (int j = 0; j < args.length; j++) {
- // Strip off generic parameters.
- int k = args[j].indexOf('<');
- if (k > 0)
- args[j] = args[j].substring(0,
k);
+ // Strip off generic parameters (e.g.,
"List<String>[]" -> "List[]")
+ args[j] = stripGenerics(args[j]);
}
}
name = i == -1 ? name : name.substring(0, i);
@@ -508,6 +510,24 @@ public class ReflectionMap<V> {
return eq(patternBase, typeBase.getSimpleName()) ||
eq(patternBase, typeBase.getName());
}
+ private static String stripGenerics(String type) {
+ if (type.indexOf('<') == -1)
+ return type;
+ var sb = new StringBuilder(type.length());
+ int depth = 0;
+ for (int i = 0; i < type.length(); i++) {
+ char c = type.charAt(i);
+ if (c == '<') {
+ depth++;
+ } else if (c == '>') {
+ depth--;
+ } else if (depth == 0) {
+ sb.append(c);
+ }
+ }
+ return sb.toString();
+ }
+
private static boolean classMatches(String simpleName, String fullName,
Class<?> c) {
// For class
org.apache.juneau.a.rttests.RountTripBeansWithBuilders$Ac$Builder
// c.getSimpleName() == "Builder"
@@ -538,6 +558,9 @@ public class ReflectionMap<V> {
int i = name.indexOf('.');
if (i == -1)
return name;
+ // Return null for fully qualified names to ensure they only
match by fullName, not by simpleName.
+ // This prevents ambiguous matches where a simple name pattern
might accidentally match
+ // a fully qualified pattern's simple part.
return null;
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
index d373873594..2922d9ec87 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
@@ -26,8 +26,6 @@ import java.lang.reflect.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;
-import java.util.stream.*;
-
import org.apache.juneau.annotation.*;
import org.apache.juneau.collections.*;
import org.apache.juneau.common.collections.*;
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvMetaProvider.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvMetaProvider.java
index 6b6bf2f27b..4973396bb4 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvMetaProvider.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvMetaProvider.java
@@ -17,7 +17,6 @@
package org.apache.juneau.csv;
import org.apache.juneau.*;
-import org.apache.juneau.common.reflect.*;
/**
* Interface for providing access to {@link CsvClassMeta} and {@link
CsvBeanPropertyMeta} objects.
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlMetaProvider.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlMetaProvider.java
index 60aefdd399..1eaeda83a3 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlMetaProvider.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlMetaProvider.java
@@ -17,7 +17,6 @@
package org.apache.juneau.html;
import org.apache.juneau.*;
-import org.apache.juneau.common.reflect.*;
/**
* Interface for providing access to {@link HtmlClassMeta} and {@link
HtmlBeanPropertyMeta} objects.
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/MethodInfoUtils.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/MethodInfoUtils.java
index 3a1b986406..eb3254a334 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/MethodInfoUtils.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/MethodInfoUtils.java
@@ -19,8 +19,6 @@ package org.apache.juneau.httppart.bean;
import static org.apache.juneau.common.utils.Utils.*;
import java.lang.annotation.*;
-import java.util.*;
-
import org.apache.juneau.annotation.*;
import org.apache.juneau.common.reflect.*;
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonMetaProvider.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonMetaProvider.java
index a495feffd0..d341858354 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonMetaProvider.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonMetaProvider.java
@@ -17,7 +17,6 @@
package org.apache.juneau.json;
import org.apache.juneau.*;
-import org.apache.juneau.common.reflect.*;
/**
* Interface for providing access to {@link JsonClassMeta} and {@link
JsonBeanPropertyMeta} objects.
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaMetaProvider.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaMetaProvider.java
index 6d7f9efcc9..a531dd1ba2 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaMetaProvider.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaMetaProvider.java
@@ -17,7 +17,6 @@
package org.apache.juneau.jsonschema;
import org.apache.juneau.*;
-import org.apache.juneau.common.reflect.*;
/**
* Interface for providing access to {@link JsonSchemaClassMeta} and {@link
JsonSchemaBeanPropertyMeta} objects.
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackMetaProvider.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackMetaProvider.java
index 99cb096fba..259b9092d3 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackMetaProvider.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackMetaProvider.java
@@ -17,7 +17,6 @@
package org.apache.juneau.msgpack;
import org.apache.juneau.*;
-import org.apache.juneau.common.reflect.*;
/**
* Interface for providing access to {@link MsgPackClassMeta} and {@link
MsgPackBeanPropertyMeta} objects.
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiMetaProvider.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiMetaProvider.java
index 797d6cd4c7..8c9db9a5dc 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiMetaProvider.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiMetaProvider.java
@@ -17,7 +17,6 @@
package org.apache.juneau.oapi;
import org.apache.juneau.*;
-import org.apache.juneau.common.reflect.*;
/**
* Interface for providing access to {@link OpenApiClassMeta} and {@link
OpenApiBeanPropertyMeta} objects.
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextMetaProvider.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextMetaProvider.java
index 938c4b20e3..7f4c36f3ea 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextMetaProvider.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextMetaProvider.java
@@ -17,7 +17,6 @@
package org.apache.juneau.plaintext;
import org.apache.juneau.*;
-import org.apache.juneau.common.reflect.*;
/**
* Interface for providing access to {@link PlainTextClassMeta} and {@link
PlainTextBeanPropertyMeta} objects.
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlMetaProvider.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlMetaProvider.java
index 5b20e8c4a2..4b2db17b33 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlMetaProvider.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlMetaProvider.java
@@ -17,7 +17,6 @@
package org.apache.juneau.soap;
import org.apache.juneau.*;
-import org.apache.juneau.common.reflect.*;
/**
* Interface for providing access to {@link SoapXmlClassMeta} and {@link
SoapXmlBeanPropertyMeta} objects.
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonMetaProvider.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonMetaProvider.java
index e0758a59de..3123fb4466 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonMetaProvider.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonMetaProvider.java
@@ -17,7 +17,6 @@
package org.apache.juneau.uon;
import org.apache.juneau.*;
-import org.apache.juneau.common.reflect.*;
/**
* Interface for providing access to {@link UonClassMeta} and {@link
UonBeanPropertyMeta} objects.
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingMetaProvider.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingMetaProvider.java
index 13506821e7..4fff0bd093 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingMetaProvider.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingMetaProvider.java
@@ -17,7 +17,6 @@
package org.apache.juneau.urlencoding;
import org.apache.juneau.*;
-import org.apache.juneau.common.reflect.*;
/**
* Interface for providing access to {@link UrlEncodingClassMeta} and {@link
UrlEncodingBeanPropertyMeta} objects.
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlMetaProvider.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlMetaProvider.java
index 82361c653f..97e99d1986 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlMetaProvider.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlMetaProvider.java
@@ -17,7 +17,6 @@
package org.apache.juneau.xml;
import org.apache.juneau.*;
-import org.apache.juneau.common.reflect.*;
/**
* Interface for providing access to {@link XmlClassMeta}, {@link
XmlBeanMeta}, and {@link XmlBeanPropertyMeta} objects.
diff --git
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteOperationMeta.java
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteOperationMeta.java
index 99777d3ac1..9808de8688 100644
---
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteOperationMeta.java
+++
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteOperationMeta.java
@@ -18,7 +18,6 @@ package org.apache.juneau.rest.client.remote;
import static org.apache.juneau.Constants.*;
import static org.apache.juneau.common.utils.CollectionUtils.*;
-import static org.apache.juneau.common.utils.PredicateUtils.*;
import static org.apache.juneau.common.utils.StringUtils.*;
import static org.apache.juneau.common.utils.Utils.*;
import static org.apache.juneau.http.remote.RemoteUtils.*;
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvMetaProvider.java
b/juneau-utest/src/test/java/DefaultPackageTestClass.java
similarity index 51%
copy from
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvMetaProvider.java
copy to juneau-utest/src/test/java/DefaultPackageTestClass.java
index 6b6bf2f27b..e4ef971c8d 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvMetaProvider.java
+++ b/juneau-utest/src/test/java/DefaultPackageTestClass.java
@@ -14,32 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.juneau.csv;
-import org.apache.juneau.*;
-import org.apache.juneau.common.reflect.*;
+// 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
-/**
- * Interface for providing access to {@link CsvClassMeta} and {@link
CsvBeanPropertyMeta} objects.
- *
- * <h5 class='section'>See Also:</h5><ul>
- * </ul>
- */
-public interface CsvMetaProvider {
-
- /**
- * Returns the language-specific metadata on the specified bean
property.
- *
- * @param bpm The bean property to return the metadata on.
- * @return The metadata.
- */
- CsvBeanPropertyMeta getCsvBeanPropertyMeta(BeanPropertyMeta bpm);
+public class DefaultPackageTestClass {
+ public static class InnerClass {
+ public static class NestedInner {}
+ }
+}
- /**
- * Returns the language-specific metadata on the specified class.
- *
- * @param cm The class to return the metadata on.
- * @return The metadata.
- */
- CsvClassMeta getCsvClassMeta(ClassMeta<?> cm);
-}
\ No newline at end of file
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/annotation/Bean_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/annotation/Bean_Test.java
index 3447567e3f..f7f6bda985 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/annotation/Bean_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/annotation/Bean_Test.java
@@ -25,7 +25,6 @@ import org.apache.juneau.marshaller.*;
import org.apache.juneau.common.reflect.*;
import org.apache.juneau.svl.*;
import org.junit.jupiter.api.*;
-import java.util.stream.*;
class Bean_Test extends TestBase {
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/common/reflect/AnnotationInfoTest.java
b/juneau-utest/src/test/java/org/apache/juneau/common/reflect/AnnotationInfoTest.java
index d6ac0e591a..b92461028d 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/common/reflect/AnnotationInfoTest.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/common/reflect/AnnotationInfoTest.java
@@ -22,8 +22,6 @@ import static
org.apache.juneau.common.utils.CollectionUtils.*;
import static org.apache.juneau.junit.bct.BctAssertions.*;
import java.lang.annotation.*;
-import java.util.stream.*;
-
import org.apache.juneau.*;
import org.apache.juneau.common.annotation.*;
import org.junit.jupiter.api.*;
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ParamInfoTest.java
b/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ParamInfoTest.java
index 9b66cce114..b305bd8225 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ParamInfoTest.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ParamInfoTest.java
@@ -28,7 +28,6 @@ import java.util.function.*;
import java.util.stream.*;
import org.apache.juneau.*;
-import org.apache.juneau.annotation.*;
import org.junit.jupiter.api.*;
import org.apache.juneau.annotation.Name;
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ReflectionMap_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ReflectionMap_Test.java
index ed04d35464..574e2d2e41 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ReflectionMap_Test.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ReflectionMap_Test.java
@@ -21,6 +21,7 @@ import static org.apache.juneau.junit.bct.BctAssertions.*;
import static org.junit.jupiter.api.Assertions.*;
import java.lang.reflect.*;
+import java.util.*;
import org.apache.juneau.*;
import org.junit.jupiter.api.*;
@@ -48,10 +49,12 @@ class ReflectionMap_Test extends TestBase {
static class A1 {}
static class A2 {}
+ // @formatter:off
static ReflectionMap<Number>
A1_SIMPLE = create().append("A1", 1).build(),
A1b_SIMPLE =
create().append("ReflectionMap_Test$A_Class$A1", 1).build(),
A1_FULL =
create().append("org.apache.juneau.common.reflect.ReflectionMap_Test$A_Class$A1",
1).build(); // Note this could be a static field.
+ // @formatter:on
@Test void a01_checkEntries() {
checkEntries(A1_SIMPLE, true, false, false, false);
@@ -89,6 +92,94 @@ class ReflectionMap_Test extends TestBase {
test(A2.class, false, false, false);
test(null, false, false, false);
}
+
+ // Test for wildcard matching (line 584)
+ @Test void a03_wildcardMatching() {
+ var rm = create().append("*", 1).build();
+ assertTrue(rm.find(A1.class).findAny().isPresent());
+ assertTrue(rm.find(A2.class).findAny().isPresent());
+ assertTrue(rm.find(String.class).findAny().isPresent());
+ }
+
+ // Test for inner class matching (lines 586, 588, 595-596)
+ static class OuterClass {
+ static class InnerClass1 {
+ static class InnerClass2 {}
+ }
+ }
+
+ @Test void a04_innerClassMatching() throws Exception {
+ var inner1 = OuterClass.InnerClass1.class;
+ var inner2 = OuterClass.InnerClass1.InnerClass2.class;
+
+ // Match inner class by partial name (should match
after stripping package)
+ var rm1 = create().append("OuterClass$InnerClass1",
1).build();
+ assertTrue(rm1.find(inner1).findAny().isPresent());
+
+ // Match inner class by simple name only (should match
in while loop - lines 595-596)
+ var rm2 = create().append("InnerClass1", 2).build();
+ assertTrue(rm2.find(inner1).findAny().isPresent());
+
+ // Match nested inner class by simple name (should
match in while loop)
+ var rm3 = create().append("InnerClass2", 3).build();
+ assertTrue(rm3.find(inner2).findAny().isPresent());
+
+ // Match nested inner class by partial path
+ var rm4 = create().append("InnerClass1$InnerClass2",
4).build();
+ assertTrue(rm4.find(inner2).findAny().isPresent());
+ }
+
+ // Test for class without package (line 586 false branch, line
588 false branch)
+ @Test void a05_classWithoutPackage() throws Exception {
+ // Primitive array class has no package and no '$' in
name
+ var intArrayClass = int[].class;
+ var rm1 = create().append("int[]", 1).build();
+
assertTrue(rm1.find(intArrayClass).findAny().isPresent());
+
+ // Test with a regular non-inner class (no '$') to hit
line 586 false branch
+ var rm2 = create().append("String", 2).build();
+
assertTrue(rm2.find(String.class).findAny().isPresent());
+ }
+
+ // Test for inner class with and without package (line 588
branches)
+ @Test void a06_innerClassPackageHandling() throws Exception {
+ var inner1 = OuterClass.InnerClass1.class;
+
+ // Pattern with full path including package - tests
line 588 true branch (package not null)
+ var rm1 =
create().append("ReflectionMap_Test$A_Class$OuterClass$InnerClass1", 1).build();
+ assertTrue(rm1.find(inner1).findAny().isPresent());
+
+ // Pattern with partial path - tests while loop and
line 588 execution
+ var rm2 =
create().append("A_Class$OuterClass$InnerClass1", 2).build();
+ assertTrue(rm2.find(inner1).findAny().isPresent());
+
+ // Test line 588 false branch (package IS null but
class has $ - inner class in default package)
+ // Must use reflection to access classes from default
package
+ var defaultPackageInner =
Class.forName("DefaultPackageTestClass$InnerClass");
+ var defaultPackageNested =
Class.forName("DefaultPackageTestClass$InnerClass$NestedInner");
+
+ // This class has '$' so line 586 is true, but
getPackage() returns null, so line 588 is false
+ var rm3 =
create().append("DefaultPackageTestClass$InnerClass", 3).build();
+
assertTrue(rm3.find(defaultPackageInner).findAny().isPresent());
+
+ // Test matching by simple inner class name (exercises
while loop with null package)
+ var rm4 = create().append("InnerClass", 4).build();
+
assertTrue(rm4.find(defaultPackageInner).findAny().isPresent());
+
+ // Test nested inner class in default package
+ var rm5 = create().append("NestedInner", 5).build();
+
assertTrue(rm5.find(defaultPackageNested).findAny().isPresent());
+ }
+
+ // Additional test to ensure both branches of line 586 are
covered
+ @Test void a07_nonInnerClassMatching() throws Exception {
+ // Test classes without $ (line 586 false branch)
+ var rm1 = create().append("String", 1).build();
+
assertTrue(rm1.find(String.class).findAny().isPresent()); // No $ in name
+
+ var rm2 = create().append("Integer", 2).build();
+
assertTrue(rm2.find(Integer.class).findAny().isPresent()); // No $ in name
+ }
}
//------------------------------------------------------------------------------------------------------------------
@@ -109,6 +200,7 @@ class ReflectionMap_Test extends TestBase {
public void m1() { /* no-op */ }
}
+ // @formatter:off
static ReflectionMap<Number>
B1m1_SIMPLE = create().append("B1.m1", 1).build(),
B1m1i_SIMPLE = create().append("B1.m1(int)", 1).build(),
@@ -122,6 +214,7 @@ class ReflectionMap_Test extends TestBase {
B1m1ss_FULL =
create().append("org.apache.juneau.common.reflect.ReflectionMap_Test$B_Method$B1.m1(java.lang.String)",
1).build(),
B1m1si_FULL =
create().append("org.apache.juneau.common.reflect.ReflectionMap_Test$B_Method$B1.m1(String,int)",
1).build(),
B1m1ssi_FULL =
create().append("org.apache.juneau.common.reflect.ReflectionMap_Test$B_Method$B1.m1(java.lang.String
, int)", 1).build();
+ // @formatter:on
@Test void a01_checkEntries() {
checkEntries(B1m1_SIMPLE, false, true, true, false);
@@ -139,8 +232,8 @@ class ReflectionMap_Test extends TestBase {
}
private static void test(Method m, boolean match_B1m1_SIMPLE,
boolean match_B1m1i_SIMPLE, boolean match_B1m1s_SIMPLE, boolean
match_B1m1ss_SIMPLE,
- boolean match_B1m1si_SIMPLE, boolean
match_B1m1ssi_SIMPLE, boolean match_B1m1_FULL, boolean match_B1m1i_FULL,
boolean match_B1m1s_FULL,
- boolean match_B1m1ss_FULL, boolean
match_B1m1si_FULL, boolean match_B1m1ssi_FULL) {
+ boolean match_B1m1si_SIMPLE, boolean
match_B1m1ssi_SIMPLE, boolean match_B1m1_FULL, boolean match_B1m1i_FULL,
boolean match_B1m1s_FULL,
+ boolean match_B1m1ss_FULL, boolean match_B1m1si_FULL,
boolean match_B1m1ssi_FULL) {
assertEquals(match_B1m1_SIMPLE,
B1m1_SIMPLE.find(m).findAny().isPresent());
assertEquals(match_B1m1i_SIMPLE,
B1m1i_SIMPLE.find(m).findAny().isPresent());
@@ -191,40 +284,121 @@ class ReflectionMap_Test extends TestBase {
test(B2.class.getMethod("m1"), false, false, false,
false, false, false, false, false, false, false, false, false);
test(null, false, false, false, false, false, false,
false, false, false, false, false, false);
}
-
- // Test for generic parameters in method signatures (lines
409-411)
+
+ // Test for generic parameters in method signatures (lines
407-411)
+ @SuppressWarnings("rawtypes")
+ static class B2a {
+ public void m1(List x) { /* no-op */ }
+ public void m2(List<String> x) { /* no-op */ }
+ public void m3(Map<String, Integer> x) { /* no-op */ }
+ public void m4(List<List<String>> x) { /* no-op */ }
+ public void m5(Map x, List y) { /* no-op */ }
+ }
+
@Test void a03_generics() throws Exception {
- ReflectionMap<Number> rm =
create().append("B1.m1(List<String>)", 1).build();
- // Generic parameters should be stripped, so this
should match m1(List)
- // Note: We can't easily test this because Java doesn't
preserve generic info at runtime,
- // but we can verify the pattern was parsed without
error
- assertEquals(1, rm.methodEntries.size());
- }
-
- // Test for array parameters in method signatures (lines
414-424)
+ // Generic parameters should be stripped, so
List<String> matches List
+ var rm1 = create().append("B2a.m1(List<String>)",
1).build();
+ assertTrue(rm1.find(B2a.class.getMethod("m1",
List.class)).findAny().isPresent());
+
+ // Also works the other way - List pattern matches
method declared with List<String>
+ var rm2 = create().append("B2a.m2(List)", 2).build();
+ assertTrue(rm2.find(B2a.class.getMethod("m2",
List.class)).findAny().isPresent());
+
+ // Multiple generic parameters
+ var rm3 =
create().append("B2a.m3(Map<String,Integer>)", 3).build();
+ assertTrue(rm3.find(B2a.class.getMethod("m3",
Map.class)).findAny().isPresent());
+
+ // Nested generic parameters
+ var rm4 = create().append("B2a.m4(List<List<String>>)",
4).build();
+ assertTrue(rm4.find(B2a.class.getMethod("m4",
List.class)).findAny().isPresent());
+
+ // Multiple parameters with generics
+ var rm5 = create().append("B2a.m5(Map<String,Integer>,
List<String>)", 5).build();
+ assertTrue(rm5.find(B2a.class.getMethod("m5",
Map.class, List.class)).findAny().isPresent());
+
+ // With fully qualified names
+ var rm6 =
create().append("B2a.m1(java.util.List<java.lang.String>)", 6).build();
+ assertTrue(rm6.find(B2a.class.getMethod("m1",
List.class)).findAny().isPresent());
+ }
+
+ // Test for array parameters in method signatures
static class B3 {
public void m1(String[] x) { /* no-op */ }
public void m2(String[][] x) { /* no-op */ }
public void m3(int[] x) { /* no-op */ }
}
-
+
@Test void a04_arrayParams() throws Exception {
// Single-dimensional array with simple name
- ReflectionMap<Number> rm1 =
create().append("B3.m1(String[])", 1).build();
+ var rm1 = create().append("B3.m1(String[])", 1).build();
assertTrue(rm1.find(B3.class.getMethod("m1",
String[].class)).findAny().isPresent());
-
+
// Single-dimensional array with full name
- ReflectionMap<Number> rm1b =
create().append("B3.m1(java.lang.String[])", 1).build();
+ var rm1b = create().append("B3.m1(java.lang.String[])",
1).build();
assertTrue(rm1b.find(B3.class.getMethod("m1",
String[].class)).findAny().isPresent());
-
+
// Multi-dimensional array
- ReflectionMap<Number> rm2 =
create().append("B3.m2(String[][])", 2).build();
+ var rm2 = create().append("B3.m2(String[][])",
2).build();
assertTrue(rm2.find(B3.class.getMethod("m2",
String[][].class)).findAny().isPresent());
-
+
// Primitive array
- ReflectionMap<Number> rm3 =
create().append("B3.m3(int[])", 3).build();
+ var rm3 = create().append("B3.m3(int[])", 3).build();
assertTrue(rm3.find(B3.class.getMethod("m3",
int[].class)).findAny().isPresent());
}
+
+ // Test for generic arrays - combining generics and arrays
+ static class B4 {
+ public void m1(List<String>[] x) { /* no-op */ }
+ public void m2(Map<String, Integer>[][] x) { /* no-op
*/ }
+ }
+
+ @Test void a05_genericArrays() throws Exception {
+ // Array of generic types - generics should be
stripped, array dimensions preserved
+ var rm1 = create().append("B4.m1(List<String>[])",
1).build();
+ assertTrue(rm1.find(B4.class.getMethod("m1",
List[].class)).findAny().isPresent());
+
+ // Also works without generics in pattern
+ var rm1b = create().append("B4.m1(List[])", 1).build();
+ assertTrue(rm1b.find(B4.class.getMethod("m1",
List[].class)).findAny().isPresent());
+
+ // Multi-dimensional array of generic types
+ var rm2 =
create().append("B4.m2(Map<String,Integer>[][])", 2).build();
+ assertTrue(rm2.find(B4.class.getMethod("m2",
Map[][].class)).findAny().isPresent());
+
+ // With fully qualified names
+ var rm3 =
create().append("B4.m1(java.util.List<java.lang.String>[])", 3).build();
+ assertTrue(rm3.find(B4.class.getMethod("m1",
List[].class)).findAny().isPresent());
+ }
+
+ // Test for negative matching - array dimension mismatches and
type mismatches
+ static class B5 {
+ public void testMethod(String[] x) { /* no-op */ }
+ public void testMethod(String[][] x) { /* no-op */ }
+ public void testMethod(Integer[] x) { /* no-op */ }
+ public void testMethod(int[] x) { /* no-op */ }
+ }
+
+ @Test void a06_arrayNegativeMatching() throws Exception {
+ // Array dimension mismatch - pattern has 1 dimension,
actual has 2
+ var rm1 = create().append("B5.testMethod(String[])",
1).build();
+ assertFalse(rm1.find(B5.class.getMethod("testMethod",
String[][].class)).findAny().isPresent());
+
+ // Array dimension mismatch - pattern has 2 dimensions,
actual has 1
+ var rm2 = create().append("B5.testMethod(String[][])",
2).build();
+ assertFalse(rm2.find(B5.class.getMethod("testMethod",
String[].class)).findAny().isPresent());
+
+ // Array type mismatch - pattern is String[], actual is
Integer[]
+ var rm3 = create().append("B5.testMethod(String[])",
1).build();
+ assertFalse(rm3.find(B5.class.getMethod("testMethod",
Integer[].class)).findAny().isPresent());
+
+ // Array type mismatch - pattern is Integer[], actual
is String[]
+ var rm4 = create().append("B5.testMethod(Integer[])",
3).build();
+ assertFalse(rm4.find(B5.class.getMethod("testMethod",
String[].class)).findAny().isPresent());
+
+ // Array type mismatch - pattern is int[], actual is
String[]
+ var rm5 = create().append("B5.testMethod(int[])",
4).build();
+ assertFalse(rm5.find(B5.class.getMethod("testMethod",
String[].class)).findAny().isPresent());
+ }
}
//------------------------------------------------------------------------------------------------------------------
@@ -242,9 +416,11 @@ class ReflectionMap_Test extends TestBase {
public int f1;
}
+ // @formatter:off
static ReflectionMap<Number>
C1f1_SIMPLE = create().append("C1.f1", 1).build(),
C1f1_FULL =
create().append("org.apache.juneau.common.reflect.ReflectionMap_Test$C_Field$C1.f1",
1).build();
+ // @formatter:on
@Test void a01_checkEntries() {
checkEntries(C1f1_SIMPLE, false, true, true, false);
@@ -287,6 +463,7 @@ class ReflectionMap_Test extends TestBase {
public D2() { /* no-op */ }
}
+ // @formatter:off
static ReflectionMap<Number>
D_SIMPLE = create().append("D1()", 1).build(),
Di_SIMPLE = create().append("D1(int)", 1).build(),
@@ -300,6 +477,7 @@ class ReflectionMap_Test extends TestBase {
Dss_FULL =
create().append("org.apache.juneau.common.reflect.ReflectionMap_Test$D_Constructor$D1(java.lang.String)",
1).build(),
Dsi_FULL =
create().append("org.apache.juneau.common.reflect.ReflectionMap_Test$D_Constructor$D1(String,
int)", 1).build(),
Dssi_FULL =
create().append("org.apache.juneau.common.reflect.ReflectionMap_Test$D_Constructor$D1(java.lang.String,
int)", 1).build();
+ // @formatter:on
@Test void a01_checkEntries() {
checkEntries(D_SIMPLE, false, false, false, true);
@@ -317,8 +495,8 @@ class ReflectionMap_Test extends TestBase {
}
private static void test(Constructor<?> c, boolean
match_D_SIMPLE, boolean match_Di_SIMPLE, boolean match_Ds_SIMPLE, boolean
match_Dss_SIMPLE,
- boolean match_Dsi_SIMPLE, boolean
match_Dssi_SIMPLE, boolean match_D_FULL, boolean match_Di_FULL, boolean
match_Ds_FULL,
- boolean match_Dss_FULL, boolean match_Dsi_FULL,
boolean match_Dssi_FULL) {
+ boolean match_Dsi_SIMPLE, boolean match_Dssi_SIMPLE,
boolean match_D_FULL, boolean match_Di_FULL, boolean match_Ds_FULL,
+ boolean match_Dss_FULL, boolean match_Dsi_FULL, boolean
match_Dssi_FULL) {
assertEquals(match_D_SIMPLE,
D_SIMPLE.find(c).findAny().isPresent());
assertEquals(match_Di_SIMPLE,
Di_SIMPLE.find(c).findAny().isPresent());
@@ -368,6 +546,35 @@ class ReflectionMap_Test extends TestBase {
test(D2.class.getConstructor(), false, false, false,
false, false, false, false, false, false, false, false, false);
test(null, false, false, false, false, false, false,
false, false, false, false, false, false);
}
+
+ // Test for generic parameters with commas in constructor
signatures
+ static class D3 {
+ public D3(Map<String, Integer> x) { /* no-op */ }
+ public D3(Map<String, Integer> x, List<String> y) { /*
no-op */ }
+ public D3(Map<String, Integer>[] x) { /* no-op */ }
+ }
+
+ @Test void a03_generics() throws Exception {
+ // Generic parameters with commas should be handled
correctly
+ var rm1 = create().append("D3(Map<String,Integer>)",
1).build();
+
assertTrue(rm1.find(D3.class.getConstructor(Map.class)).findAny().isPresent());
+
+ // Also works without generics in pattern
+ var rm1b = create().append("D3(Map)", 1).build();
+
assertTrue(rm1b.find(D3.class.getConstructor(Map.class)).findAny().isPresent());
+
+ // Multiple parameters with generics containing commas
+ var rm2 = create().append("D3(Map<String,Integer>,
List<String>)", 2).build();
+ assertTrue(rm2.find(D3.class.getConstructor(Map.class,
List.class)).findAny().isPresent());
+
+ // Generic array parameters
+ var rm3 = create().append("D3(Map<String,Integer>[])",
3).build();
+
assertTrue(rm3.find(D3.class.getConstructor(Map[].class)).findAny().isPresent());
+
+ // With fully qualified names
+ var rm4 =
create().append("D3(java.util.Map<java.lang.String,java.lang.Integer>)",
4).build();
+
assertTrue(rm4.find(D3.class.getConstructor(Map.class)).findAny().isPresent());
+ }
}
//------------------------------------------------------------------------------------------------------------------
@@ -415,12 +622,14 @@ class ReflectionMap_Test extends TestBase {
}
@Test void a03_toString() {
- ReflectionMap<Number> rm = create()
+ var rm = create()
.append("F1", 1) // class
- .append("F1.toString", 2) // method
(and field)
- .append("F1()", 3) //
constructor
+ .append("F1.toString", 2) // method
without args (args=null)
+ .append("F1.toString(String)", 3) // method
with args
+ .append("F1.myField", 4) // field
+ .append("F1()", 5) //
constructor
.build();
- assertString("{classEntries=[{simpleName=F1,
fullName=F1, value=1}], methodEntries=[{simpleClassName=F1, fullClassName=F1,
methodName=toString, value=2}], fieldEntries=[{simpleClassName=F1,
fullClassName=F1, fieldName=toString, value=2}],
constructorEntries=[{simpleClassName=F1, fullClassName=F1, value=3}]}", rm);
+ assertString("{classEntries=[{simpleName=F1,
fullName=F1, value=1}], methodEntries=[{simpleClassName=F1, fullClassName=F1,
methodName=toString, value=2}, {simpleClassName=F1, fullClassName=F1,
methodName=toString, args=[String], value=3}, {simpleClassName=F1,
fullClassName=F1, methodName=myField, value=4}],
fieldEntries=[{simpleClassName=F1, fullClassName=F1, fieldName=toString,
value=2}, {simpleClassName=F1, fullClassName=F1, fieldName=myField, value=4}],
constructorEntries=[{simpleC [...]
}
}
}
\ No newline at end of file
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/csv/annotation/CsvConfig_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/csv/annotation/CsvConfig_Test.java
index b67f3f96c9..8e4db44a61 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/csv/annotation/CsvConfig_Test.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/csv/annotation/CsvConfig_Test.java
@@ -23,7 +23,6 @@ import org.apache.juneau.*;
import org.apache.juneau.csv.*;
import org.apache.juneau.common.reflect.*;
import org.junit.jupiter.api.*;
-import java.util.stream.*;
/**
* Tests the @CsvConfig annotation.
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/html/HtmlConfigAnnotation_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/html/HtmlConfigAnnotation_Test.java
index 240ba4a9b6..751c1c8c07 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/html/HtmlConfigAnnotation_Test.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/html/HtmlConfigAnnotation_Test.java
@@ -27,7 +27,6 @@ import org.apache.juneau.html.annotation.*;
import org.apache.juneau.common.reflect.*;
import org.apache.juneau.svl.*;
import org.junit.jupiter.api.*;
-import java.util.stream.*;
/**
* Tests the @HtmlConfig annotation.
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/json/JsonConfigAnnotationTest.java
b/juneau-utest/src/test/java/org/apache/juneau/json/JsonConfigAnnotationTest.java
index fca375b9a6..d0495ab0c1 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/json/JsonConfigAnnotationTest.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/json/JsonConfigAnnotationTest.java
@@ -26,7 +26,6 @@ import org.apache.juneau.json.annotation.*;
import org.apache.juneau.common.reflect.*;
import org.apache.juneau.svl.*;
import org.junit.jupiter.api.*;
-import java.util.stream.*;
/**
* Tests the @JsonConfig annotation.
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorTest.java
b/juneau-utest/src/test/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorTest.java
index 0627295c2b..3ca2898d9f 100755
---
a/juneau-utest/src/test/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorTest.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorTest.java
@@ -22,8 +22,6 @@ import static org.apache.juneau.jsonschema.TypeCategory.*;
import static org.apache.juneau.junit.bct.BctAssertions.*;
import java.util.*;
-import java.util.stream.*;
-
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.collections.*;
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/msgpack/MsgPackConfigAnnotationTest.java
b/juneau-utest/src/test/java/org/apache/juneau/msgpack/MsgPackConfigAnnotationTest.java
index 8934b22f1e..132ed2fdec 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/msgpack/MsgPackConfigAnnotationTest.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/msgpack/MsgPackConfigAnnotationTest.java
@@ -26,7 +26,6 @@ import org.apache.juneau.msgpack.annotation.*;
import org.apache.juneau.common.reflect.*;
import org.apache.juneau.svl.*;
import org.junit.jupiter.api.*;
-import java.util.stream.*;
/**
* Tests the @MsgPackConfig annotation.
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/oapi/OpenApiConfigAnnotation_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/oapi/OpenApiConfigAnnotation_Test.java
index 20de129cf8..91f33b381b 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/oapi/OpenApiConfigAnnotation_Test.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/oapi/OpenApiConfigAnnotation_Test.java
@@ -19,8 +19,6 @@ package org.apache.juneau.oapi;
import static org.apache.juneau.common.utils.CollectionUtils.*;
import static org.junit.jupiter.api.Assertions.*;
-import java.util.stream.*;
-
import org.apache.juneau.*;
import org.apache.juneau.oapi.annotation.*;
import org.apache.juneau.common.reflect.*;
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/parser/ParserConfigAnnotationTest.java
b/juneau-utest/src/test/java/org/apache/juneau/parser/ParserConfigAnnotationTest.java
index 11399d88d0..1504eec0de 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/parser/ParserConfigAnnotationTest.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/parser/ParserConfigAnnotationTest.java
@@ -29,7 +29,6 @@ import org.apache.juneau.parser.annotation.*;
import org.apache.juneau.common.reflect.*;
import org.apache.juneau.svl.*;
import org.junit.jupiter.api.*;
-import java.util.stream.*;
/**
* Tests the @ParserConfig annotation.
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/plaintext/PlainTextConfigAnnotation_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/plaintext/PlainTextConfigAnnotation_Test.java
index 8c35239d4a..a419067b94 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/plaintext/PlainTextConfigAnnotation_Test.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/plaintext/PlainTextConfigAnnotation_Test.java
@@ -24,7 +24,6 @@ import org.apache.juneau.plaintext.annotation.*;
import org.apache.juneau.common.reflect.*;
import org.apache.juneau.svl.*;
import org.junit.jupiter.api.*;
-import java.util.stream.*;
/**
* Tests the @PlainTextConfig annotation.
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_Context_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_Context_Test.java
index a405ac5086..602b223f7a 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_Context_Test.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_Context_Test.java
@@ -21,8 +21,6 @@ import static
org.apache.juneau.common.utils.CollectionUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import java.io.*;
-import java.util.stream.*;
-
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.common.reflect.*;
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/serializer/SerializerConfigAnnotationTest.java
b/juneau-utest/src/test/java/org/apache/juneau/serializer/SerializerConfigAnnotationTest.java
index e6c1f4fdc6..78a6aed736 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/serializer/SerializerConfigAnnotationTest.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/serializer/SerializerConfigAnnotationTest.java
@@ -28,7 +28,6 @@ import org.apache.juneau.common.reflect.*;
import org.apache.juneau.serializer.annotation.*;
import org.apache.juneau.svl.*;
import org.junit.jupiter.api.*;
-import java.util.stream.*;
/**
* Tests the @SerializerConfig annotation.
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/soap/SoapXmlConfigAnnotationTest.java
b/juneau-utest/src/test/java/org/apache/juneau/soap/SoapXmlConfigAnnotationTest.java
index f1bba7be95..39bb069745 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/soap/SoapXmlConfigAnnotationTest.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/soap/SoapXmlConfigAnnotationTest.java
@@ -26,7 +26,6 @@ import org.apache.juneau.common.reflect.*;
import org.apache.juneau.soap.annotation.*;
import org.apache.juneau.svl.*;
import org.junit.jupiter.api.*;
-import java.util.stream.*;
/**
* Tests the @SoapXmlConfig annotation.
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/uon/UonConfigAnnotationTest.java
b/juneau-utest/src/test/java/org/apache/juneau/uon/UonConfigAnnotationTest.java
index 62c9326e47..c896fd82ef 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/uon/UonConfigAnnotationTest.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/uon/UonConfigAnnotationTest.java
@@ -26,7 +26,6 @@ import org.apache.juneau.common.reflect.*;
import org.apache.juneau.svl.*;
import org.apache.juneau.uon.annotation.*;
import org.junit.jupiter.api.*;
-import java.util.stream.*;
/**
* Tests the @UonConfig annotation.
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/urlencoding/UrlEncodingConfigAnnotationTest.java
b/juneau-utest/src/test/java/org/apache/juneau/urlencoding/UrlEncodingConfigAnnotationTest.java
index b6bdb9de6c..eb221887be 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/urlencoding/UrlEncodingConfigAnnotationTest.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/urlencoding/UrlEncodingConfigAnnotationTest.java
@@ -26,7 +26,6 @@ import org.apache.juneau.common.reflect.*;
import org.apache.juneau.svl.*;
import org.apache.juneau.urlencoding.annotation.*;
import org.junit.jupiter.api.*;
-import java.util.stream.*;
/**
* Tests the @UrlEncodingConfig annotation.
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/xml/XmlConfigAnnotationTest.java
b/juneau-utest/src/test/java/org/apache/juneau/xml/XmlConfigAnnotationTest.java
index e60dc4be28..864fe937cc 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/xml/XmlConfigAnnotationTest.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/xml/XmlConfigAnnotationTest.java
@@ -31,7 +31,6 @@ import org.apache.juneau.common.reflect.*;
import org.apache.juneau.svl.*;
import org.apache.juneau.xml.annotation.*;
import org.junit.jupiter.api.*;
-import java.util.stream.*;
/**
* Tests the @XmlConfig annotation.