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 a086ba034f Utility class modernization
a086ba034f is described below

commit a086ba034ff3b35cb853c88d8fbf6b5af1b3f396
Author: James Bognar <[email protected]>
AuthorDate: Mon Nov 3 15:51:19 2025 -0500

    Utility class modernization
---
 .../org/apache/juneau/bean/openapi3/OpenApi.java   |   1 -
 .../juneau/assertions/FluentObjectAssertion.java   |   1 -
 .../common/annotation/AnnotationBuilder.java       |  10 +
 .../juneau/common/reflect/AccessibleInfo.java      |   7 -
 .../apache/juneau/common/reflect/Annotatable.java  |  73 ++++
 .../juneau/common/reflect/AnnotatableType.java     |  39 ++
 .../juneau/common/reflect/AnnotationInfo.java      | 291 ++-----------
 .../juneau/common/reflect/AnnotationInfo.java.new  | 479 +++++++++++++++++++++
 .../apache/juneau/common/reflect/ClassInfo.java    |  21 +-
 .../juneau/common/reflect/ConstructorInfo.java     |  18 +-
 .../juneau/common/reflect/ExecutableInfo.java      |   4 +-
 .../apache/juneau/common/reflect/FieldInfo.java    |  23 +-
 .../apache/juneau/common/reflect/MethodInfo.java   |  29 +-
 .../apache/juneau/common/reflect/PackageInfo.java  |  25 +-
 .../juneau/common/reflect/ParameterInfo.java       |  22 +-
 .../juneau/common/utils/CollectionUtils.java       |  15 +
 .../org/apache/juneau/common/utils/DateUtils.java  |   1 -
 .../main/java/org/apache/juneau/jena/RdfUtils.java |   1 -
 .../java/org/apache/juneau/AnnotationWorkList.java |   1 -
 .../src/main/java/org/apache/juneau/BeanMap.java   |   1 -
 .../src/main/java/org/apache/juneau/BeanMeta.java  |   1 -
 .../java/org/apache/juneau/BeanPropertyMeta.java   |   1 -
 .../main/java/org/apache/juneau/BeanRegistry.java  |   1 -
 .../main/java/org/apache/juneau/BeanSession.java   |   1 -
 .../src/main/java/org/apache/juneau/ClassMeta.java |   1 -
 .../src/main/java/org/apache/juneau/Context.java   |   1 -
 .../juneau/annotation/BeanConfigAnnotation.java    |   1 -
 .../apache/juneau/cp/BeanCreateMethodFinder.java   |   1 -
 .../java/org/apache/juneau/cp/BeanCreator.java     |   1 -
 .../main/java/org/apache/juneau/cp/BeanStore.java  |   1 -
 .../java/org/apache/juneau/cp/BeanStoreEntry.java  |   1 -
 .../juneau/http/annotation/ContactAnnotation.java  |   1 -
 .../http/annotation/HasFormDataAnnotation.java     |   1 -
 .../juneau/http/annotation/HasQueryAnnotation.java |   1 -
 .../juneau/http/annotation/LicenseAnnotation.java  |   1 -
 .../juneau/httppart/SimplePartParserSession.java   |   1 -
 .../juneau/httppart/SimplePartSerializer.java      |   1 -
 .../httppart/SimplePartSerializerSession.java      |   1 -
 .../org/apache/juneau/parser/ParserSession.java    |   1 -
 .../apache/juneau/serializer/SerializerPipe.java   |   2 -
 .../java/org/apache/juneau/swap/BuilderSwap.java   |   1 -
 .../java/org/apache/juneau/swaps/TemporalSwap.java |   1 -
 .../apache/juneau/uon/UonSerializerSession.java    |   1 -
 .../main/java/org/apache/juneau/xml/XmlUtils.java  |   2 -
 .../microservice/jetty/JettyMicroservice.java      |   1 -
 .../apache/juneau/rest/client/ResponseContent.java |   1 -
 .../apache/juneau/rest/client/ResponseHeader.java  |   1 -
 .../org/apache/juneau/rest/client/RestClient.java  |   1 -
 .../org/apache/juneau/http/header/HeaderList.java  |   1 -
 .../java/org/apache/juneau/http/part/PartList.java |   1 -
 .../apache/juneau/http/remote/RemoteDelete.java    |   1 -
 .../org/apache/juneau/http/remote/RemoteGet.java   |   1 -
 .../org/apache/juneau/http/remote/RemoteOp.java    |   1 -
 .../org/apache/juneau/http/remote/RemotePatch.java |   1 -
 .../org/apache/juneau/http/remote/RemotePost.java  |   1 -
 .../org/apache/juneau/http/remote/RemotePut.java   |   1 -
 .../http/remote/RrpcInterfaceMethodMeta.java       |   2 -
 .../java/org/apache/juneau/rest/RestContext.java   |   1 -
 .../java/org/apache/juneau/rest/RestOpSession.java |   2 -
 .../juneau/rest/debug/BasicDebugEnablement.java    |   2 -
 .../rest/processor/SerializedPojoProcessor.java    |   2 -
 .../org/apache/juneau/rest/remote/RrpcServlet.java |   1 -
 .../juneau/rest/widget/ContentTypeMenuItem.java    |   1 -
 .../apache/juneau/rest/widget/MenuItemWidget.java  |   1 -
 .../apache/juneau/BasicRuntimeException_Test.java  |   1 -
 .../java/org/apache/juneau/BenchmarkRunner.java    |   1 -
 .../juneau/common/reflect/AnnotationInfoTest.java  |   2 -
 .../juneau/common/reflect/ClassInfo_Test.java      |   2 -
 .../juneau/common/reflect/ConstructorInfoTest.java |   1 -
 .../juneau/common/reflect/ExecutableInfo_Test.java |   1 -
 .../juneau/common/reflect/FieldInfo_Test.java      |   1 -
 .../juneau/common/reflect/MethodInfo_Test.java     |   1 -
 .../juneau/common/reflect/ParamInfoTest.java       |   1 -
 .../java/org/apache/juneau/cp/BeanStore_Test.java  |   1 -
 .../rest/annotation/Restx_ReqAttrs_Test.java       |   2 -
 .../juneau/rest/client/RestClient_Body_Test.java   |   1 -
 .../juneau/utils/StringBuilderWriterTest.java      |   1 -
 77 files changed, 761 insertions(+), 367 deletions(-)

diff --git 
a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OpenApi.java
 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OpenApi.java
index 93852be5f6..83256778da 100644
--- 
a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OpenApi.java
+++ 
b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OpenApi.java
@@ -24,7 +24,6 @@ import static org.apache.juneau.internal.ConverterUtils.*;
 
 import java.util.*;
 
-import org.apache.juneau.*;
 import org.apache.juneau.common.collections.*;
 import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.json.*;
diff --git 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentObjectAssertion.java
 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentObjectAssertion.java
index 1b6b8e27a7..3fb9181dce 100644
--- 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentObjectAssertion.java
+++ 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentObjectAssertion.java
@@ -27,7 +27,6 @@ import java.util.function.*;
 
 import org.apache.juneau.common.utils.*;
 import org.apache.juneau.cp.*;
-import org.apache.juneau.internal.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.serializer.*;
diff --git 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/annotation/AnnotationBuilder.java
 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/annotation/AnnotationBuilder.java
index 3a3e9421e8..990586b869 100644
--- 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/annotation/AnnotationBuilder.java
+++ 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/annotation/AnnotationBuilder.java
@@ -63,10 +63,20 @@ public class AnnotationBuilder<B extends 
AnnotationBuilder<B>> {
                return (B)this;
        }
 
+       /**
+        * Returns the annotation type being built.
+        *
+        * @return The annotation type being built.
+        */
        public Class<? extends Annotation> getAnnotationType() {
                return annotationType;
        }
 
+       /**
+        * Returns the description of this annotation builder.
+        *
+        * @return The description array, or <jk>null</jk> if not set.
+        */
        public String[] getDescription() {
                return description;
        }
diff --git 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/AccessibleInfo.java
 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/AccessibleInfo.java
index 10ee1a68e7..a98c019748 100644
--- 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/AccessibleInfo.java
+++ 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/AccessibleInfo.java
@@ -16,15 +16,9 @@
  */
 package org.apache.juneau.common.reflect;
 
-import static org.apache.juneau.common.utils.CollectionUtils.*;
 import static org.apache.juneau.common.utils.Utils.*;
 
-import java.lang.annotation.*;
 import java.lang.reflect.*;
-import java.util.*;
-import java.util.function.*;
-
-import org.apache.juneau.common.collections.*;
 
 /**
  * Base class for reflection info classes that wrap {@link AccessibleObject}.
@@ -36,7 +30,6 @@ import org.apache.juneau.common.collections.*;
  * <h5 class='section'>See Also:</h5><ul>
  * </ul>
  */
-@SuppressWarnings({"rawtypes", "unchecked"})
 public abstract class AccessibleInfo {
 
        AccessibleObject ao;  // Effectively final
diff --git 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/Annotatable.java
 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/Annotatable.java
new file mode 100644
index 0000000000..873806403f
--- /dev/null
+++ 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/Annotatable.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juneau.common.reflect;
+
+/**
+ * Interface for all annotatable wrapper classes.
+ *
+ * <p>
+ * This interface provides a common type for all wrappers around Java 
reflection objects,
+ * allowing polymorphic handling of different annotatable types (Class, 
Method, Field, Constructor, Parameter, Package).
+ *
+ * <p>
+ * Implementers include:
+ * <ul>
+ *     <li>{@link ClassInfo} - Wraps {@link Class}
+ *     <li>{@link MethodInfo} - Wraps {@link java.lang.reflect.Method}
+ *     <li>{@link FieldInfo} - Wraps {@link java.lang.reflect.Field}
+ *     <li>{@link ConstructorInfo} - Wraps {@link 
java.lang.reflect.Constructor}
+ *     <li>{@link ParameterInfo} - Wraps {@link java.lang.reflect.Parameter}
+ *     <li>{@link PackageInfo} - Wraps {@link java.lang.Package}
+ * </ul>
+ */
+public interface Annotatable {
+
+       /**
+        * Returns the type of this annotatable object.
+        *
+        * @return The type of annotatable object this represents.
+        */
+       AnnotatableType getAnnotatableType();
+
+       /**
+        * Returns the class info associated with this annotatable element.
+        *
+        * <p>
+        * Returns the declaring class from whichever context this annotatable 
belongs to.
+        *
+        * @return The class info, or <jk>null</jk> if this is a package.
+        */
+       ClassInfo getClassInfo();
+
+       /**
+        * Returns a human-readable name for this annotatable element.
+        *
+        * <p>
+        * The name format depends on the type of annotatable:
+        * <ul>
+        *      <li>{@link AnnotatableType#CLASS CLASS} - Simple class name
+        *      <li>{@link AnnotatableType#METHOD METHOD} - Short method name 
(with parameter types)
+        *      <li>{@link AnnotatableType#FIELD FIELD} - Field name
+        *      <li>{@link AnnotatableType#CONSTRUCTOR CONSTRUCTOR} - Short 
constructor name (with parameter types)
+        *      <li>{@link AnnotatableType#PARAMETER PARAMETER} - Parameter name
+        *      <li>{@link AnnotatableType#PACKAGE PACKAGE} - Package name
+        * </ul>
+        *
+        * @return The annotatable name.
+        */
+       String getAnnotatableName();
+}
diff --git 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/AnnotatableType.java
 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/AnnotatableType.java
new file mode 100644
index 0000000000..5570ec8fd6
--- /dev/null
+++ 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/AnnotatableType.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juneau.common.reflect;
+
+/**
+ * Enum representing the type of reflective object.
+ *
+ * <p>
+ * Used to identify the specific type of reflective wrapper (ClassInfo, 
MethodInfo, FieldInfo, etc.)
+ * for runtime dispatch and polymorphic handling.
+ */
+public enum AnnotatableType {
+       /** Represents a {@link Class} wrapped in {@link ClassInfo}. */
+       CLASS,
+       /** Represents a {@link java.lang.reflect.Method} wrapped in {@link 
MethodInfo}. */
+       METHOD,
+       /** Represents a {@link java.lang.reflect.Field} wrapped in {@link 
FieldInfo}. */
+       FIELD,
+       /** Represents a {@link java.lang.Package} wrapped in {@link 
PackageInfo}. */
+       PACKAGE,
+       /** Represents a {@link java.lang.reflect.Constructor} wrapped in 
{@link ConstructorInfo}. */
+       CONSTRUCTOR,
+       /** Represents a {@link java.lang.reflect.Parameter} wrapped in {@link 
ParameterInfo}. */
+       PARAMETER
+}
diff --git 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/AnnotationInfo.java
 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/AnnotationInfo.java
index 25920d92e7..b7255f7669 100644
--- 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/AnnotationInfo.java
+++ 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/AnnotationInfo.java
@@ -16,6 +16,7 @@
  */
 package org.apache.juneau.common.reflect;
 
+import static org.apache.juneau.common.utils.AssertionUtils.*;
 import static org.apache.juneau.common.utils.ClassUtils.*;
 import static org.apache.juneau.common.utils.CollectionUtils.*;
 import static org.apache.juneau.common.utils.PredicateUtils.*;
@@ -23,7 +24,6 @@ import static org.apache.juneau.common.utils.ThrowableUtils.*;
 import static org.apache.juneau.common.utils.Utils.*;
 
 import java.lang.annotation.*;
-import java.lang.reflect.*;
 import java.util.*;
 import java.util.function.*;
 
@@ -40,110 +40,23 @@ import org.apache.juneau.common.annotation.*;
 public class AnnotationInfo<T extends Annotation> {
 
        /**
-        * Convenience constructor when annotation is found on a class.
+        * Convenience constructor for creating an annotation info object.
         *
         * @param <A> The annotation class.
-        * @param onClass The class where the annotation was found.
+        * @param on The annotatable object where the annotation was found 
(class, method, field, constructor, parameter, or package).
         * @param value The annotation found.
         * @return A new {@link AnnotationInfo} object.
         */
-       public static <A extends Annotation> AnnotationInfo<A> of(ClassInfo 
onClass, A value) {
-               return new AnnotationInfo<>(onClass, value);
+       public static <A extends Annotation> AnnotationInfo<A> of(Annotatable 
on, A value) {
+               return new AnnotationInfo<>(on, value);
        }
 
-       /**
-        * Convenience constructor when annotation is found on a method.
-        *
-        * @param <A> The annotation class.
-        * @param onMethod The method where the annotation was found.
-        * @param value The annotation found.
-        * @return A new {@link AnnotationInfo} object.
-        */
-       public static <A extends Annotation> AnnotationInfo<A> of(MethodInfo 
onMethod, A value) {
-               return new AnnotationInfo<>(onMethod, value);
-       }
-
-       /**
-        * Convenience constructor when annotation is found on a package.
-        *
-        * @param <A> The annotation class.
-        * @param onPackage The package where the annotation was found.
-        * @param value The annotation found.
-        * @return A new {@link AnnotationInfo} object.
-        */
-       public static <A extends Annotation> AnnotationInfo<A> of(Package 
onPackage, A value) {
-               return new AnnotationInfo<>(PackageInfo.of(onPackage), value);
-       }
-
-       /**
-        * Convenience constructor when annotation is found on a package.
-        *
-        * @param <A> The annotation class.
-        * @param onPackage The package where the annotation was found.
-        * @param value The annotation found.
-        * @return A new {@link AnnotationInfo} object.
-        */
-       public static <A extends Annotation> AnnotationInfo<A> of(PackageInfo 
onPackage, A value) {
-               return new AnnotationInfo<>(onPackage, value);
-       }
-
-       /**
-        * Convenience constructor when annotation is found on a field.
-        *
-        * @param <A> The annotation class.
-        * @param onField The field where the annotation was found.
-        * @param value The annotation found.
-        * @return A new {@link AnnotationInfo} object.
-        */
-       public static <A extends Annotation> AnnotationInfo<A> of(FieldInfo 
onField, A value) {
-               return new AnnotationInfo<>(onField, value);
-       }
-
-       /**
-        * Convenience constructor when annotation is found on a constructor.
-        *
-        * @param <A> The annotation class.
-        * @param onConstructor The constructor where the annotation was found.
-        * @param value The annotation found.
-        * @return A new {@link AnnotationInfo} object.
-        */
-       public static <A extends Annotation> AnnotationInfo<A> 
of(ConstructorInfo onConstructor, A value) {
-               return new AnnotationInfo<>(onConstructor, value);
-       }
-
-       /**
-        * Convenience constructor when annotation is found on a parameter.
-        *
-        * @param <A> The annotation class.
-        * @param onParam The parameter where the annotation was found.
-        * @param value The annotation found.
-        * @return A new {@link AnnotationInfo} object.
-        */
-       public static <A extends Annotation> AnnotationInfo<A> of(ParameterInfo 
onParam, A value) {
-               return new AnnotationInfo<>(onParam, value);
-       }
-
-       private static int getRank(Object a) {
-               var ci = ClassInfo.of(a);
-               var mi = ci.getPublicMethod(x -> x.hasName("rank") && 
x.hasNoParams() && x.hasReturnType(int.class));
-               if (nn(mi)) {
-                       return safe(() -> (int)mi.invoke(a));
-               }
-               return 0;
-       }
-
-       private final ClassInfo c;
-       private final MethodInfo m;
-       private final FieldInfo f;
-       private final ConstructorInfo ctor;
-       private final ParameterInfo param;
-       private final PackageInfo p;
 
+       private final Annotatable annotatable;
+       final int rank;
        private T a;  // Effectively final
 
-       private final Supplier<List<Method>> methods = memoize(() -> 
u(l(a.annotationType().getMethods())));
-
-       final int rank;
+       private final Supplier<List<MethodInfo>> methods = memoize(() -> 
stream(a.annotationType().getMethods()).map(m -> 
MethodInfo.of(ClassInfo.of(a.annotationType()), m)).toList());
 
        /**
         * Constructor for class annotations.
@@ -151,100 +64,10 @@ public class AnnotationInfo<T extends Annotation> {
         * @param c The class where the annotation was found.
         * @param a The annotation found.
         */
-       AnnotationInfo(ClassInfo c, T a) {
-               this.c = c;
-               this.m = null;
-               this.f = null;
-               this.ctor = null;
-               this.param = null;
-               this.p = null;
-               this.a = a;
-               this.rank = getRank(a);
-       }
-
-       /**
-        * Constructor for method annotations.
-        *
-        * @param m The method where the annotation was found.
-        * @param a The annotation found.
-        */
-       AnnotationInfo(MethodInfo m, T a) {
-               this.c = null;
-               this.m = m;
-               this.f = null;
-               this.ctor = null;
-               this.param = null;
-               this.p = null;
-               this.a = a;
-               this.rank = getRank(a);
-       }
-
-       /**
-        * Constructor for field annotations.
-        *
-        * @param f The field where the annotation was found.
-        * @param a The annotation found.
-        */
-       AnnotationInfo(FieldInfo f, T a) {
-               this.c = null;
-               this.m = null;
-               this.f = f;
-               this.ctor = null;
-               this.param = null;
-               this.p = null;
-               this.a = a;
-               this.rank = getRank(a);
-       }
-
-       /**
-        * Constructor for constructor annotations.
-        *
-        * @param ctor The constructor where the annotation was found.
-        * @param a The annotation found.
-        */
-       AnnotationInfo(ConstructorInfo ctor, T a) {
-               this.c = null;
-               this.m = null;
-               this.f = null;
-               this.ctor = ctor;
-               this.param = null;
-               this.p = null;
-               this.a = a;
-               this.rank = getRank(a);
-       }
-
-       /**
-        * Constructor for parameter annotations.
-        *
-        * @param param The parameter where the annotation was found.
-        * @param a The annotation found.
-        */
-       AnnotationInfo(ParameterInfo param, T a) {
-               this.c = null;
-               this.m = null;
-               this.f = null;
-               this.ctor = null;
-               this.param = param;
-               this.p = null;
-               this.a = a;
-               this.rank = getRank(a);
-       }
-
-       /**
-        * Constructor for package annotations.
-        *
-        * @param p The package where the annotation was found.
-        * @param a The annotation found.
-        */
-       AnnotationInfo(PackageInfo p, T a) {
-               this.c = null;
-               this.m = null;
-               this.f = null;
-               this.ctor = null;
-               this.param = null;
-               this.p = p;
-               this.a = a;
-               this.rank = getRank(a);
+       AnnotationInfo(Annotatable on, T a) {
+               this.annotatable = on;  // TODO - Shouldn't allow null.
+               this.a = assertArgNotNull("a", a);
+               this.rank = findRank(a);
        }
 
        /**
@@ -273,68 +96,11 @@ public class AnnotationInfo<T extends Annotation> {
        @SuppressWarnings("unchecked")
        public <V> AnnotationInfo<?> forEachValue(Class<V> type, String name, 
Predicate<V> test, Consumer<V> action) {
                methods.get().stream()
-                       .filter(m -> eq(m.getName(), name) && 
eq(m.getReturnType(), type))
+                       .filter(m -> eq(m.getName(), name) && 
eq(m.getReturnType().inner(), type))
                        .forEach(m -> safe(() -> consumeIf(test, action, 
(V)m.invoke(a))));
                return this;
        }
 
-       /**
-        * Returns the class that this annotation was found on.
-        *
-        * <p>
-        * Returns the declaring class from whichever context this annotation 
belongs to.
-        *
-        * @return The class that this annotation was found on, or 
<jk>null</jk> if it was found on a package.
-        */
-       public ClassInfo getClassInfo() {
-               if (nn(this.c))
-                       return this.c;
-               if (nn(this.m))
-                       return this.m.getDeclaringClass();
-               if (nn(this.f))
-                       return this.f.getDeclaringClass();
-               if (nn(this.ctor))
-                       return this.ctor.getDeclaringClass();
-               if (nn(this.param))
-                       return 
this.param.getDeclaringExecutable().getDeclaringClass();
-               return null;
-       }
-
-       /**
-        * Returns the class where the annotation was found.
-        *
-        * @return the class where the annotation was found, or <jk>null</jk> 
if it wasn't found on a method.
-        */
-       public ClassInfo getClassOn() { return c; }
-
-       /**
-        * Returns the method where the annotation was found.
-        *
-        * @return the method where the annotation was found, or <jk>null</jk> 
if it wasn't found on a method.
-        */
-       public MethodInfo getMethodOn() { return m; }
-
-       /**
-        * Returns the field where the annotation was found.
-        *
-        * @return the field where the annotation was found, or <jk>null</jk> 
if it wasn't found on a field.
-        */
-       public FieldInfo getFieldOn() { return f; }
-
-       /**
-        * Returns the constructor where the annotation was found.
-        *
-        * @return the constructor where the annotation was found, or 
<jk>null</jk> if it wasn't found on a constructor.
-        */
-       public ConstructorInfo getConstructorOn() { return ctor; }
-
-       /**
-        * Returns the parameter where the annotation was found.
-        *
-        * @return the parameter where the annotation was found, or 
<jk>null</jk> if it wasn't found on a parameter.
-        */
-       public ParameterInfo getParamOn() { return param; }
-
        /**
         * Returns the class name of the annotation.
         *
@@ -342,13 +108,6 @@ public class AnnotationInfo<T extends Annotation> {
         */
        public String getName() { return scn(a.annotationType()); }
 
-       /**
-        * Returns the package where the annotation was found.
-        *
-        * @return the package where the annotation was found, or <jk>null</jk> 
if it wasn't found on a package.
-        */
-       public PackageInfo getPackageOn() { return p; }
-
        /**
         * Returns a matching value on this annotation.
         *
@@ -361,7 +120,7 @@ public class AnnotationInfo<T extends Annotation> {
        @SuppressWarnings("unchecked")
        public <V> Optional<V> getValue(Class<V> type, String name, 
Predicate<V> test) {
                return methods.get().stream()
-                       .filter(m -> eq(m.getName(), name) && 
eq(m.getReturnType(), type))
+                       .filter(m -> eq(m.getName(), name) && 
eq(m.getReturnType().inner(), type))
                        .map(m -> safe(() -> (V)m.invoke(a)))
                        .filter(v -> test(test, v))
                        .findFirst();
@@ -427,18 +186,7 @@ public class AnnotationInfo<T extends Annotation> {
         */
        public LinkedHashMap<String, Object> toMap() {
                var jm = new LinkedHashMap<String, Object>();
-               if (nn(c))
-                       jm.put("class", c.getNameSimple());
-               if (nn(m))
-                       jm.put("method", m.getShortName());
-               if (nn(f))
-                       jm.put("field", f.getName());
-               if (nn(ctor))
-                       jm.put("constructor", ctor.getShortName());
-               if (nn(param))
-                       jm.put("parameter", param.getName());
-               if (nn(p))
-                       jm.put("package", p.getName());
+               jm.put(s(annotatable.getAnnotatableType()), 
annotatable.getAnnotatableName());
                var ja = new LinkedHashMap<String, Object>();
                var ca = ClassInfo.of(a.annotationType());
                ca.forEachDeclaredMethod(null, x -> {
@@ -719,6 +467,15 @@ public class AnnotationInfo<T extends Annotation> {
        // Private helper methods
        
//-----------------------------------------------------------------------------------------------------------------
 
+       private static int findRank(Object a) {
+               return ClassInfo.of(a).getMethods().stream()
+                       .filter(m -> m.hasName("rank") && m.hasNoParams() && 
m.hasReturnType(int.class))
+                       .findFirst()
+                       .map(m -> safe(() -> (int)m.invoke(a)))
+                       .orElse(0);
+       }
+
+       @SuppressWarnings("unchecked")
        private static void forEachDeclaredAnnotationInfo(ClassInfo ci, 
Predicate<AnnotationInfo<?>> filter, Consumer<AnnotationInfo<?>> action) {
                if (nn(ci))
                        for (var ai : ci.getDeclaredAnnotationInfos())
diff --git 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/AnnotationInfo.java.new
 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/AnnotationInfo.java.new
new file mode 100644
index 0000000000..411bd06c13
--- /dev/null
+++ 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/AnnotationInfo.java.new
@@ -0,0 +1,479 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juneau.common.reflect;
+
+import static org.apache.juneau.common.utils.AssertionUtils.*;
+import static org.apache.juneau.common.utils.ClassUtils.*;
+import static org.apache.juneau.common.utils.CollectionUtils.*;
+import static org.apache.juneau.common.utils.PredicateUtils.*;
+import static org.apache.juneau.common.utils.ThrowableUtils.*;
+import static org.apache.juneau.common.utils.Utils.*;
+
+import java.lang.annotation.*;
+import java.lang.reflect.*;
+import java.util.*;
+import java.util.function.*;
+import java.util.stream.*;
+
+import org.apache.juneau.common.annotation.*;
+
+/**
+ * Represents an annotation instance on a class and the class it was found on.
+ *
+ * <h5 class='section'>See Also:</h5><ul>
+ * </ul>
+ *
+ * @param <T> The annotation type.
+ */
+public class AnnotationInfo<T extends Annotation> {
+
+       /**
+        * Creates an {@link AnnotationInfo} for any annotatable object.
+        *
+        * <p>
+        * This unified factory method accepts any annotatable type (Class, 
Method, Field, Constructor, Parameter, Package)
+        * and creates an appropriate {@link AnnotationInfo} wrapper.
+        *
+        * @param <A> The annotation class.
+        * @param on The annotatable object where the annotation was found.
+        * @param value The annotation found.
+        * @return A new {@link AnnotationInfo} object, or {@code null} if 
{@code on} is null.
+        */
+       public static <A extends Annotation> AnnotationInfo<A> of(Annotatable 
on, A value) {
+               return new AnnotationInfo<>(on, value);
+       }
+
+       private final Annotatable annotatable;
+       private final ClassInfo classInfo;
+
+       private T a;  // Effectively final
+
+       private final Supplier<List<MethodInfo>> methods = memoize(() -> 
stream(a.annotationType().getMethods()).map(m -> 
MethodInfo.of(ClassInfo.of(a.annotationType()), m)).toList());
+
+       final int rank;
+       /**
+        * Constructor that accepts any annotatable object.
+        *
+        * @param on The annotatable object where the annotation was found.
+        * @param a The annotation found.
+        */
+       private AnnotationInfo(Annotatable on, T a) {
+               this.annotatable = on;  // TODO - Shouldn't allow null.
+               this.classInfo = annotatable.getClassInfo();
+               this.a = assertArgNotNull("a", a);
+               this.rank = findRank(a);
+       }
+
+       private static ClassInfo findClassInfo(Annotatable on) {
+               if (on instanceof ClassInfo ci)
+                       return ci;
+               if (on instanceof MethodInfo mi)
+                       return mi.getDeclaringClass();
+               if (on instanceof FieldInfo fi)
+                       return fi.getDeclaringClass();
+               if (on instanceof ConstructorInfo ci)
+                       return ci.getDeclaringClass();
+               if (on instanceof ParameterInfo pi)
+                       return pi.getDeclaringExecutable().getDeclaringClass();
+               return null;  // Package
+       }
+
+       private static String findAnnotatableName(Annotatable on) {
+               if (on == null)
+                       return null;
+               return switch (on.getAnnotatableType()) {
+                       case CLASS -> ((ClassInfo)on).getNameSimple();
+                       case METHOD -> ((MethodInfo)on).getShortName();
+                       case FIELD -> ((FieldInfo)on).getName();
+                       case CONSTRUCTOR -> 
((ConstructorInfo)on).getShortName();
+                       case PARAMETER -> ((ParameterInfo)on).getName();
+                       case PACKAGE -> ((PackageInfo)on).getName();
+               };
+       }
+
+       private static int findRank(Object a) {
+               return ClassInfo.of(a).getMethods().stream()
+                       .filter(m -> m.hasName("rank") && m.hasNoParameters() 
&& m.hasReturnType(int.class))
+                       .findFirst()
+                       .map(m -> safe(() -> (int)m.invoke(a)))
+                       .orElse(0);
+       }
+
+
+       /**
+        * Performs an action on this object if the specified predicate test 
passes.
+        *
+        * @param test A test to apply to determine if action should be 
executed.  Can be <jk>null</jk>.
+        * @param action An action to perform on this object.
+        * @return This object.
+        */
+       public AnnotationInfo<?> accept(Predicate<AnnotationInfo<?>> test, 
Consumer<AnnotationInfo<?>> action) {
+               if (matches(test))
+                       action.accept(this);
+               return this;
+       }
+
+       /**
+        * Performs an action on all matching values on this annotation.
+        *
+        * @param <V> The annotation field type.
+        * @param type The annotation field type.
+        * @param name The annotation field name.
+        * @param test A predicate to apply to the value to determine if action 
should be performed.  Can be <jk>null</jk>.
+        * @param action An action to perform on the value.
+        * @return This object.
+        */
+       @SuppressWarnings("unchecked")
+       public <V> AnnotationInfo<?> forEachValue(Class<V> type, String name, 
Predicate<V> test, Consumer<V> action) {
+               getMethods(type, name)
+                       .forEach(m -> safe(() -> consumeIf(test, action, 
(V)m.invoke(a))));
+               return this;
+       }
+
+       /**
+        * Returns a stream of methods matching the specified name and return 
type.
+        *
+        * <p>
+        * This is a convenience method for filtering annotation members by 
name and return type.
+        *
+        * @param <V> The return type to match.
+        * @param type The return type to filter by.
+        * @param name The method name to filter by.
+        * @return A stream of <c>MethodInfo</c> objects matching the specified 
criteria.
+        */
+       public <V> Stream<MethodInfo> getMethods(Class<V> type, String name) {
+               return getMethods().stream().filter(m -> m.hasName(name) && 
m.hasReturnType(type));
+       }
+
+       /**
+        * Returns the class that this annotation was found on.
+        *
+        * <p>
+        * Returns the declaring class from whichever context this annotation 
belongs to.
+        *
+        * @return The class that this annotation was found on, or 
<jk>null</jk> if it was found on a package.
+        */
+       public ClassInfo getClassInfo() {
+               return classInfo;
+       }
+
+       /**
+        * Returns the class name of the annotation.
+        *
+        * @return The simple class name of the annotation.
+        */
+       public String getName() { return scn(a.annotationType()); }
+
+       /**
+        * Returns all public methods defined on this annotation type.
+        *
+        * <p>
+        * These are the members of the annotation interface (e.g., 
<c>value()</c>, <c>name()</c>, etc.).
+        * The list is cached and unmodifiable.
+        *
+        * <h5 class='section'>Example:</h5>
+        * <p class='bjava'>
+        *      AnnotationInfo&lt;MyAnnotation&gt; <jv>ai</jv> = ...;
+        *      List&lt;MethodInfo&gt; <jv>methods</jv> = 
<jv>ai</jv>.getMethods();
+        *      <jc>// Returns methods like: value(), name(), description(), 
etc.</jc>
+        * </p>
+        *
+        * @return An unmodifiable list of <c>MethodInfo</c> objects for all 
public methods defined on this annotation type.
+        *      <br>Results are cached on first access.
+        */
+       public List<MethodInfo> getMethods() {
+               return methods.get();
+       }
+
+       /**
+        * Returns a matching value on this annotation.
+        *
+        * @param <V> The annotation field type.
+        * @param type The annotation field type.
+        * @param name The annotation field name.
+        * @param test A predicate to apply to the value to determine if value 
should be used.  Can be <jk>null</jk>.
+        * @return This object.
+        */
+       @SuppressWarnings("unchecked")
+       public <V> Optional<V> getValue(Class<V> type, String name) {
+               return getMethods(type, name)
+                       .map(m -> safe(() -> (V)m.invoke(a)))
+                       .findFirst();
+       }
+
+       /**
+        * Returns <jk>true</jk> if this annotation has the specified 
annotation defined on it.
+        *
+        * @param <A> The annotation class.
+        * @param type The annotation to test for.
+        * @return <jk>true</jk> if this annotation has the specified 
annotation defined on it.
+        */
+       public <A extends Annotation> boolean hasAnnotation(Class<A> type) {
+               return nn(this.a.annotationType().getAnnotation(type));
+       }
+
+       /**
+        * Returns the annotation found.
+        *
+        * @return The annotation found.
+        */
+       public T inner() {
+               return a;
+       }
+
+       /**
+        * Returns <jk>true</jk> if this annotation is in the specified {@link 
AnnotationGroup group}.
+        *
+        * @param <A> The annotation class.
+        * @param group The group annotation.
+        * @return <jk>true</jk> if this annotation is in the specified {@link 
AnnotationGroup group}.
+        */
+       public <A extends Annotation> boolean isInGroup(Class<A> group) {
+               var x = a.annotationType().getAnnotation(AnnotationGroup.class);
+               return (nn(x) && x.value().equals(group));
+       }
+
+       /**
+        * Returns <jk>true</jk> if this annotation is the specified type.
+        *
+        * @param <A> The annotation class.
+        * @param type The type to test against.
+        * @return <jk>true</jk> if this annotation is the specified type.
+        */
+       public <A extends Annotation> boolean isType(Class<A> type) {
+               return this.a.annotationType() == type;
+       }
+
+       /**
+        * Returns <jk>true</jk> if this object passes the specified predicate 
test.
+        *
+        * @param test The test to perform.
+        * @return <jk>true</jk> if this object passes the specified predicate 
test.
+        */
+       public boolean matches(Predicate<AnnotationInfo<?>> test) {
+               return test(test, this);
+       }
+
+       /**
+        * Converts this object to a readable map for debugging purposes.
+        *
+        * @return A new map showing the attributes of this object.
+        */
+       public LinkedHashMap<String, Object> toMap() {
+               var jm = new LinkedHashMap<String,Object>();
+               jm.put(s(annotatable.getAnnotatableType()), annotatableName);
+               var ja = map();
+               var ca = ClassInfo.of(a.annotationType());
+               ca.forEachDeclaredMethod(null, x -> {
+                       try {
+                               var v = x.invoke(a);
+                               var d = x.inner().getDefaultValue();
+                               if (ne(v, d)) {
+                                       if (! (isArray(v) && length(v) == 0 && 
length(d) == 0))
+                                               ja.put(x.getName(), v);
+                               }
+                       } catch (Exception e) {
+                               ja.put(x.getName(), lm(e));
+                       }
+               });
+               jm.put("@" + ca.getNameSimple(), ja);
+               return jm;
+       }
+
+       
//-----------------------------------------------------------------------------------------------------------------
+       // Annotation interface methods
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       /**
+        * Returns the annotation type of this annotation.
+        *
+        * <p>
+        * Same as calling {@link Annotation#annotationType()}.
+        *
+        * <h5 class='section'>Example:</h5>
+        * <p class='bjava'>
+        *      AnnotationInfo&lt;Deprecated&gt; <jv>ai</jv> = 
ClassInfo.<jsm>of</jsm>(MyClass.<jk>class</jk>).getAnnotation(Deprecated.<jk>class</jk>);
+        *      Class&lt;? <jk>extends</jk> Annotation&gt; <jv>type</jv> = 
<jv>ai</jv>.annotationType();  <jc>// Returns Deprecated.class</jc>
+        * </p>
+        *
+        * @return The annotation type of this annotation.
+        * @see Annotation#annotationType()
+        */
+       public Class<? extends Annotation> annotationType() {
+               return a.annotationType();
+       }
+
+       /**
+        * Returns the hash code of this annotation.
+        *
+        * <p>
+        * Same as calling {@link Annotation#hashCode()} on the wrapped 
annotation.
+        *
+        * <p>
+        * The hash code of an annotation is the sum of the hash codes of its 
members (including those with default values).
+        *
+        * @return The hash code of this annotation.
+        * @see Annotation#hashCode()
+        */
+       @Override /* Overridden from Object */
+       public int hashCode() {
+               return a.hashCode();
+       }
+
+       /**
+        * Returns true if the specified object represents an annotation that 
is logically equivalent to this one.
+        *
+        * <p>
+        * Same as calling {@link Annotation#equals(Object)} on the wrapped 
annotation.
+        *
+        * <p>
+        * Two annotations are considered equal if:
+        * <ul>
+        *      <li>They are of the same annotation type
+        *      <li>All their corresponding member values are equal
+        * </ul>
+        *
+        * @param o The reference object with which to compare.
+        * @return <jk>true</jk> if the specified object is equal to this 
annotation.
+        * @see Annotation#equals(Object)
+        */
+       @Override /* Overridden from Object */
+       public boolean equals(Object o) {
+               if (o instanceof AnnotationInfo o2)
+                       return a.equals(o2.a);
+               return a.equals(o);
+       }
+
+       /**
+        * Returns a string representation of this annotation.
+        *
+        * <p>
+        * Returns the map representation created by {@link #toMap()}.
+        *
+        * @return A string representation of this annotation.
+        */
+       @Override /* Overridden from Object */
+       public String toString() {
+               return toMap().toString();
+       }
+
+
+       
//-----------------------------------------------------------------------------------------------------------------
+       // Static methods for ClassInfo
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       /**
+        * Constructs an {@link AnnotationList} of all annotations found on the 
specified class.
+        *
+        * <p>
+        * Annotations are appended in the following orders:
+        * <ol>
+        *      <li>On the package of this class.
+        *      <li>On interfaces ordered parent-to-child.
+        *      <li>On parent classes ordered parent-to-child.
+        *      <li>On this class.
+        * </ol>
+        *
+        * @param classInfo The class to process.
+        * @return A new {@link AnnotationList} object on every call.
+        */
+       public static AnnotationList getAnnotationList(ClassInfo classInfo) {
+               return getAnnotationList(classInfo, x -> true);
+       }
+
+       /**
+        * Constructs an {@link AnnotationList} of all matching annotations on 
the specified class.
+        *
+        * <p>
+        * Annotations are appended in the following orders:
+        * <ol>
+        *      <li>On the package of this class.
+        *      <li>On interfaces ordered parent-to-child.
+        *      <li>On parent classes ordered parent-to-child.
+        *      <li>On this class.
+        * </ol>
+        *
+        * @param classInfo The class to process.
+        * @param filter A predicate to apply to the entries to determine if 
value should be used.  Can be <jk>null</jk>.
+        * @return A new {@link AnnotationList} object on every call.
+        */
+       public static AnnotationList getAnnotationList(ClassInfo classInfo, 
Predicate<AnnotationInfo<?>> filter) {
+               var l = new AnnotationList();
+               Utils.forEachAnnotationInfo(classInfo, filter, x -> l.add(x));
+               return l;
+       }
+
+       
//-----------------------------------------------------------------------------------------------------------------
+       // Static methods for MethodInfo
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       /**
+        * Constructs an {@link AnnotationList} of all annotations found on the 
specified method.
+        *
+        * <p>
+        * Annotations are appended in the following orders:
+        * <ol>
+        *      <li>On the package of this class.
+        *      <li>On interfaces ordered parent-to-child.
+        *      <li>On parent classes ordered parent-to-child.
+        *      <li>On this class.
+        *      <li>On this method and matching methods ordered parent-to-child.
+        * </ol>
+        *
+        * @param methodInfo The method to process.
+        * @return A new {@link AnnotationList} object on every call.
+        */
+       public static AnnotationList getAnnotationList(MethodInfo methodInfo) {
+               return getAnnotationList(methodInfo, x -> true);
+       }
+
+       /**
+        * Constructs an {@link AnnotationList} of all matching annotations 
found on the specified method.
+        *
+        * <p>
+        * Annotations are appended in the following orders:
+        * <ol>
+        *      <li>On the package of this class.
+        *      <li>On interfaces ordered parent-to-child.
+        *      <li>On parent classes ordered parent-to-child.
+        *      <li>On this class.
+        *      <li>On this method and matching methods ordered parent-to-child.
+        * </ol>
+        *
+        * @param methodInfo The method to process.
+        * @param filter A predicate to apply to the entries to determine if 
value should be added.  Can be <jk>null</jk>.
+        * @return A new {@link AnnotationList} object on every call.
+        */
+       public static AnnotationList getAnnotationList(MethodInfo methodInfo, 
Predicate<AnnotationInfo<?>> filter) {
+               var al = new AnnotationList();
+               Utils.forEachAnnotationInfo(methodInfo, filter, x -> al.add(x));
+               return al;
+       }
+
+       /**
+        * Same as {@link #getAnnotationList(MethodInfo, Predicate)} except 
only returns annotations defined on methods.
+        *
+        * @param methodInfo The method to process.
+        * @param filter A predicate to apply to the entries to determine if 
value should be added.  Can be <jk>null</jk>.
+        * @return A new {@link AnnotationList} object on every call.
+        */
+       public static AnnotationList getAnnotationListMethodOnly(MethodInfo 
methodInfo, Predicate<AnnotationInfo<?>> filter) {
+               var al = new AnnotationList();
+               Utils.forEachAnnotationInfoMethodOnly(methodInfo, filter, x -> 
al.add(x));
+               return al;
+       }
+}
\ No newline at end of file
diff --git 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ClassInfo.java
 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ClassInfo.java
index a9215f81c5..cbfce03389 100644
--- 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ClassInfo.java
+++ 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ClassInfo.java
@@ -66,7 +66,7 @@ import org.apache.juneau.common.collections.*;
  * </ul>
  */
 @SuppressWarnings({"unchecked","rawtypes"})
-public class ClassInfo {
+public class ClassInfo implements Annotatable {
 
        private static final Cache<Class,ClassInfo> CACHE = 
Cache.of(Class.class, ClassInfo.class).build();
 
@@ -2793,4 +2793,23 @@ public class ClassInfo {
                        return this;
                }
        }
+
+       
//-----------------------------------------------------------------------------------------------------------------
+       // Annotatable interface methods
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       @Override /* Annotatable */
+       public AnnotatableType getAnnotatableType() {
+               return AnnotatableType.CLASS;
+       }
+
+       @Override /* Annotatable */
+       public ClassInfo getClassInfo() {
+               return this;
+       }
+
+       @Override /* Annotatable */
+       public String getAnnotatableName() {
+               return getNameSimple();
+       }
 }
\ No newline at end of file
diff --git 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ConstructorInfo.java
 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ConstructorInfo.java
index f25c9f0822..227a087e52 100644
--- 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ConstructorInfo.java
+++ 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ConstructorInfo.java
@@ -32,7 +32,7 @@ import org.apache.juneau.common.utils.*;
  * <h5 class='section'>See Also:</h5><ul>
  * </ul>
  */
-public class ConstructorInfo extends ExecutableInfo implements 
Comparable<ConstructorInfo> {
+public class ConstructorInfo extends ExecutableInfo implements 
Comparable<ConstructorInfo>, Annotatable {
        /**
         * Convenience method for instantiating a {@link ConstructorInfo};
         *
@@ -259,7 +259,21 @@ public class ConstructorInfo extends ExecutableInfo 
implements Comparable<Constr
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
-       // High Priority Methods (direct Constructor API compatibility)
+       // Annotatable interface methods
        
//-----------------------------------------------------------------------------------------------------------------
 
+       @Override /* Annotatable */
+       public AnnotatableType getAnnotatableType() {
+               return AnnotatableType.CONSTRUCTOR;
+       }
+
+       @Override /* Annotatable */
+       public ClassInfo getClassInfo() {
+               return getDeclaringClass();
+       }
+
+       @Override /* Annotatable */
+       public String getAnnotatableName() {
+               return getShortName();
+       }
 }
\ No newline at end of file
diff --git 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ExecutableInfo.java
 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ExecutableInfo.java
index 1e7f167a22..d621fc5582 100644
--- 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ExecutableInfo.java
+++ 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ExecutableInfo.java
@@ -16,8 +16,6 @@
  */
 package org.apache.juneau.common.reflect;
 
-import static org.apache.juneau.common.reflect.ClassArrayFormat.*;
-import static org.apache.juneau.common.reflect.ClassNameFormat.*;
 import static org.apache.juneau.common.utils.CollectionUtils.*;
 import static org.apache.juneau.common.utils.PredicateUtils.*;
 import static org.apache.juneau.common.utils.StringUtils.*;
@@ -41,7 +39,7 @@ import java.util.function.*;
 public abstract class ExecutableInfo extends AccessibleInfo {
 
        final ClassInfo declaringClass;
-       final Executable e;
+       Executable e;  // Effectively final.
        final boolean isConstructor;
 
        private volatile ParameterInfo[] params;
diff --git 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/FieldInfo.java
 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/FieldInfo.java
index 644b9eaaf8..c9d5ead252 100644
--- 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/FieldInfo.java
+++ 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/FieldInfo.java
@@ -16,8 +16,6 @@
  */
 package org.apache.juneau.common.reflect;
 
-import static org.apache.juneau.common.reflect.ClassArrayFormat.*;
-import static org.apache.juneau.common.reflect.ClassNameFormat.*;
 import static org.apache.juneau.common.utils.PredicateUtils.*;
 import static org.apache.juneau.common.utils.ThrowableUtils.*;
 import static org.apache.juneau.common.utils.Utils.*;
@@ -38,7 +36,7 @@ import org.apache.juneau.common.collections.*;
  * <h5 class='section'>See Also:</h5><ul>
  * </ul>
  */
-public class FieldInfo extends AccessibleInfo implements Comparable<FieldInfo> 
{
+public class FieldInfo extends AccessibleInfo implements 
Comparable<FieldInfo>, Annotatable {
        /**
         * Convenience method for instantiating a {@link FieldInfo};
         *
@@ -630,4 +628,23 @@ public class FieldInfo extends AccessibleInfo implements 
Comparable<FieldInfo> {
        public String toString() {
                return cn(f.getDeclaringClass()) + "." + f.getName();
        }
+
+       
//-----------------------------------------------------------------------------------------------------------------
+       // Annotatable interface methods
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       @Override /* Annotatable */
+       public AnnotatableType getAnnotatableType() {
+               return AnnotatableType.FIELD;
+       }
+
+       @Override /* Annotatable */
+       public ClassInfo getClassInfo() {
+               return getDeclaringClass();
+       }
+
+       @Override /* Annotatable */
+       public String getAnnotatableName() {
+               return getName();
+       }
 }
\ No newline at end of file
diff --git 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/MethodInfo.java
 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/MethodInfo.java
index cc3ffbf081..362ffe3644 100644
--- 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/MethodInfo.java
+++ 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/MethodInfo.java
@@ -16,8 +16,6 @@
  */
 package org.apache.juneau.common.reflect;
 
-import static org.apache.juneau.common.reflect.ClassArrayFormat.*;
-import static org.apache.juneau.common.reflect.ClassNameFormat.*;
 import static org.apache.juneau.common.utils.CollectionUtils.*;
 import static org.apache.juneau.common.utils.PredicateUtils.*;
 import static org.apache.juneau.common.utils.Utils.*;
@@ -28,8 +26,6 @@ import java.lang.reflect.*;
 import java.util.*;
 import java.util.function.*;
 
-import static java.util.Arrays.*;
-
 import org.apache.juneau.common.collections.*;
 import org.apache.juneau.common.utils.*;
 
@@ -39,7 +35,7 @@ import org.apache.juneau.common.utils.*;
  * <h5 class='section'>See Also:</h5><ul>
  * </ul>
  */
-public class MethodInfo extends ExecutableInfo implements 
Comparable<MethodInfo> {
+public class MethodInfo extends ExecutableInfo implements 
Comparable<MethodInfo>, Annotatable {
        /**
         * Convenience method for instantiating a {@link MethodInfo};
         *
@@ -774,8 +770,27 @@ public class MethodInfo extends ExecutableInfo implements 
Comparable<MethodInfo>
 
        MethodInfo findMatchingOnClass(ClassInfo c) {
                for (var m2 : c.getDeclaredMethods())
-                       if (hasName(m2.getName()) && 
Arrays.equals(_getParameterTypes(), m2._getParameterTypes()))
-                               return m2;
+               if (hasName(m2.getName()) && 
Arrays.equals(_getParameterTypes(), m2._getParameterTypes()))
+                       return m2;
                return null;
        }
+
+       
//-----------------------------------------------------------------------------------------------------------------
+       // Annotatable interface methods
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       @Override /* Annotatable */
+       public AnnotatableType getAnnotatableType() {
+               return AnnotatableType.METHOD;
+       }
+
+       @Override /* Annotatable */
+       public ClassInfo getClassInfo() {
+               return getDeclaringClass();
+       }
+
+       @Override /* Annotatable */
+       public String getAnnotatableName() {
+               return getShortName();
+       }
 }
\ No newline at end of file
diff --git 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/PackageInfo.java
 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/PackageInfo.java
index b40de43eae..7b1aaaf71c 100644
--- 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/PackageInfo.java
+++ 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/PackageInfo.java
@@ -37,7 +37,7 @@ import org.apache.juneau.common.collections.*;
  * <h5 class='section'>See Also:</h5><ul>
  * </ul>
  */
-public class PackageInfo {
+public class PackageInfo implements Annotatable {
 
        
//-----------------------------------------------------------------------------------------------------------------
        // Static
@@ -84,7 +84,7 @@ public class PackageInfo {
        private Package p;  // Effectively final
 
        // All annotations on this package, wrapped in AnnotationInfo. Repeated 
annotations have been unwrapped and are present as individual instances. 
Lazy-initialized in getter.
-       private final Supplier<List<AnnotationInfo>> annotations = memoize(() 
-> opt(p).map(p -> stream(p.getAnnotations()).flatMap(a -> 
stream(splitRepeated(a))).map(a -> (AnnotationInfo)AnnotationInfo.of(this, 
a)).toList()).orElse(liste()));
+       private final Supplier<List<AnnotationInfo<Annotation>>> annotations = 
memoize(() -> opt(p).map(p -> stream(p.getAnnotations()).flatMap(a -> 
stream(splitRepeated(a))).map(a -> AnnotationInfo.of(this, 
a)).toList()).orElse(liste()));
 
        /**
         * Constructor.
@@ -290,7 +290,7 @@ public class PackageInfo {
         *
         * @return All annotations present on this package, or an empty list if 
there are none.
         */
-       public List<AnnotationInfo> getAnnotations() {
+       public List<AnnotationInfo<Annotation>> getAnnotations() {
                return annotations.get();
        }
 
@@ -364,5 +364,24 @@ public class PackageInfo {
        public String toString() {
                return p.toString();
        }
+
+       
//-----------------------------------------------------------------------------------------------------------------
+       // Annotatable interface methods
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       @Override /* Annotatable */
+       public AnnotatableType getAnnotatableType() {
+               return AnnotatableType.PACKAGE;
+       }
+
+       @Override /* Annotatable */
+       public ClassInfo getClassInfo() {
+               return null;  // Package has no declaring class
+       }
+
+       @Override /* Annotatable */
+       public String getAnnotatableName() {
+               return getName();
+       }
 }
 
diff --git 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ParameterInfo.java
 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ParameterInfo.java
index 62fc16a6df..ddb6a64688 100644
--- 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ParameterInfo.java
+++ 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ParameterInfo.java
@@ -23,7 +23,6 @@ import static org.apache.juneau.common.utils.Utils.*;
 import java.lang.annotation.*;
 import java.lang.reflect.*;
 import java.util.*;
-import java.util.concurrent.*;
 import java.util.function.*;
 
 import org.apache.juneau.common.collections.*;
@@ -34,7 +33,7 @@ import org.apache.juneau.common.collections.*;
  * <h5 class='section'>See Also:</h5><ul>
  * </ul>
  */
-public class ParameterInfo {
+public class ParameterInfo implements Annotatable {
 
        private final ExecutableInfo eInfo;
        private final Parameter p;
@@ -662,4 +661,23 @@ public class ParameterInfo {
                }
                return this;
        }
+
+       
//-----------------------------------------------------------------------------------------------------------------
+       // Annotatable interface methods
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       @Override /* Annotatable */
+       public AnnotatableType getAnnotatableType() {
+               return AnnotatableType.PARAMETER;
+       }
+
+       @Override /* Annotatable */
+       public ClassInfo getClassInfo() {
+               return getDeclaringExecutable().getDeclaringClass();
+       }
+
+       @Override /* Annotatable */
+       public String getAnnotatableName() {
+               return getName();
+       }
 }
\ No newline at end of file
diff --git 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/CollectionUtils.java
 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/CollectionUtils.java
index 230edb413e..66c6725e59 100644
--- 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/CollectionUtils.java
+++ 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/CollectionUtils.java
@@ -1769,6 +1769,21 @@ public class CollectionUtils {
                return Collections.emptyList();
        }
 
+       /**
+        * Shortcut for creating an empty list.
+        *
+        * <p>
+        * This is a convenience method that provides a more concise syntax 
than {@link Collections#emptyList()}.
+        * The "e" suffix indicates "empty".
+        *
+        * <h5 class='section'>Example:</h5>
+        * <p class='bjava'>
+        *      List&lt;String&gt; <jv>myList</jv> = <jsm>liste</jsm>();
+        * </p>
+        *
+        * @param <T> The element type.
+        * @return An empty unmodifiable list.
+        */
        public static <T> List<T> liste() {
                return Collections.emptyList();
        }
diff --git 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/DateUtils.java
 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/DateUtils.java
index 656554e62f..f9d8deaef2 100644
--- 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/DateUtils.java
+++ 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/DateUtils.java
@@ -22,7 +22,6 @@ import static org.apache.juneau.common.utils.ThrowableUtils.*;
 import static org.apache.juneau.common.utils.Utils.*;
 
 import java.lang.ref.*;
-import java.lang.reflect.*;
 import java.text.*;
 import java.time.*;
 import java.time.format.*;
diff --git 
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfUtils.java
 
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfUtils.java
index 5133dff4b1..b07934a36c 100644
--- 
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfUtils.java
+++ 
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfUtils.java
@@ -20,7 +20,6 @@ import static org.apache.juneau.common.utils.Utils.*;
 
 import java.util.*;
 
-import org.apache.juneau.*;
 import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.jena.annotation.*;
 import org.apache.juneau.xml.*;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/AnnotationWorkList.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/AnnotationWorkList.java
index cf25883a81..3880389d3e 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/AnnotationWorkList.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/AnnotationWorkList.java
@@ -24,7 +24,6 @@ import java.util.*;
 
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.common.reflect.*;
-import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.svl.*;
 
 /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java
index f143fa3889..834f50ab06 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java
@@ -32,7 +32,6 @@ import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
-import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.swap.*;
 
 /**
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 c31520d622..2970285776 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
@@ -33,7 +33,6 @@ import org.apache.juneau.annotation.*;
 import org.apache.juneau.common.collections.*;
 import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.common.reflect.Visibility;
-import org.apache.juneau.common.reflect.*;
 
 /**
  * Encapsulates all access to the properties of a bean class (like a souped-up 
{@link java.beans.BeanInfo}).
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
index 14517c6199..0c1d9468e2 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
@@ -36,7 +36,6 @@ import org.apache.juneau.common.utils.*;
 import org.apache.juneau.cp.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.parser.*;
-import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.swap.*;
 import org.apache.juneau.swaps.*;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java
index 622aa19d31..bafa93bcb8 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java
@@ -26,7 +26,6 @@ import org.apache.juneau.annotation.*;
 import org.apache.juneau.common.collections.*;
 import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.cp.*;
-import org.apache.juneau.common.reflect.*;
 
 /**
  * A lookup table for resolving bean types by name.
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
index 7e6c263677..3577104adc 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
@@ -38,7 +38,6 @@ import org.apache.juneau.collections.*;
 import org.apache.juneau.common.collections.*;
 import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.common.utils.*;
-import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.swap.*;
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
index e9715ce812..f89d09800b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
@@ -37,7 +37,6 @@ import org.apache.juneau.common.collections.*;
 import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.common.utils.*;
 import org.apache.juneau.cp.*;
-import org.apache.juneau.internal.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.swap.*;
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 048fc16e59..b3f3747b55 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
@@ -42,7 +42,6 @@ import org.apache.juneau.msgpack.annotation.*;
 import org.apache.juneau.oapi.annotation.*;
 import org.apache.juneau.parser.annotation.*;
 import org.apache.juneau.plaintext.annotation.*;
-import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.serializer.annotation.*;
 import org.apache.juneau.soap.annotation.*;
 import org.apache.juneau.svl.*;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigAnnotation.java
index 81f9a3f5e8..03dc279ac0 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigAnnotation.java
@@ -22,7 +22,6 @@ import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.common.reflect.*;
-import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.svl.*;
 
 /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreateMethodFinder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreateMethodFinder.java
index 4a6225c8de..4c390354a9 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreateMethodFinder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreateMethodFinder.java
@@ -24,7 +24,6 @@ import java.util.function.*;
 
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.common.reflect.*;
-import org.apache.juneau.common.reflect.*;
 
 /**
  * Utility class for creating beans through creator methods.
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreator.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreator.java
index 0ac3324e2c..1938c78ea9 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreator.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreator.java
@@ -26,7 +26,6 @@ import java.util.function.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.common.collections.*;
 import org.apache.juneau.common.reflect.*;
-import org.apache.juneau.common.reflect.*;
 
 /**
  * Utility class for creating beans through constructors, creator methods, and 
builders.
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java
index 94d7bb92a0..c939eae7af 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java
@@ -33,7 +33,6 @@ import java.util.stream.*;
 
 import org.apache.juneau.collections.*;
 import org.apache.juneau.common.utils.*;
-import org.apache.juneau.internal.*;
 import org.apache.juneau.marshaller.*;
 import org.apache.juneau.common.reflect.*;
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStoreEntry.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStoreEntry.java
index ba674e33b9..036f5206d3 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStoreEntry.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStoreEntry.java
@@ -25,7 +25,6 @@ import java.util.function.*;
 
 import org.apache.juneau.collections.*;
 import org.apache.juneau.common.utils.*;
-import org.apache.juneau.internal.*;
 
 /**
  * Represents a bean in a {@link BeanStore}.
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/ContactAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/ContactAnnotation.java
index 88360660b1..79688a2432 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/ContactAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/ContactAnnotation.java
@@ -18,7 +18,6 @@ package org.apache.juneau.http.annotation;
 
 import java.lang.annotation.*;
 
-import org.apache.juneau.annotation.*;
 import org.apache.juneau.common.annotation.*;
 
 /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HasFormDataAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HasFormDataAnnotation.java
index 6e611014d5..94d2704334 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HasFormDataAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HasFormDataAnnotation.java
@@ -18,7 +18,6 @@ package org.apache.juneau.http.annotation;
 
 import java.lang.annotation.*;
 
-import org.apache.juneau.annotation.*;
 import org.apache.juneau.common.annotation.*;
 
 /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HasQueryAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HasQueryAnnotation.java
index 5d2d945f70..6b5022b87d 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HasQueryAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HasQueryAnnotation.java
@@ -18,7 +18,6 @@ package org.apache.juneau.http.annotation;
 
 import java.lang.annotation.*;
 
-import org.apache.juneau.annotation.*;
 import org.apache.juneau.common.annotation.*;
 
 /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/LicenseAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/LicenseAnnotation.java
index 2120314b53..bdce3e40b1 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/LicenseAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/LicenseAnnotation.java
@@ -18,7 +18,6 @@ package org.apache.juneau.http.annotation;
 
 import java.lang.annotation.*;
 
-import org.apache.juneau.annotation.*;
 import org.apache.juneau.common.annotation.*;
 
 /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartParserSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartParserSession.java
index d96c49fcbd..e62a45d16d 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartParserSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartParserSession.java
@@ -18,7 +18,6 @@ package org.apache.juneau.httppart;
 
 import org.apache.juneau.*;
 import org.apache.juneau.parser.*;
-import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.reflect.*;
 
 /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartSerializer.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartSerializer.java
index cb4d286888..c9bbf571c7 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartSerializer.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartSerializer.java
@@ -18,7 +18,6 @@ package org.apache.juneau.httppart;
 
 import org.apache.juneau.*;
 import org.apache.juneau.common.collections.*;
-import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.utils.*;
 
 /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartSerializerSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartSerializerSession.java
index 6d5b4595a6..e50c4191a9 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartSerializerSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartSerializerSession.java
@@ -16,7 +16,6 @@
  */
 package org.apache.juneau.httppart;
 
-import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.reflect.*;
 
 /**
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 afce1ee11f..e18b8a1c25 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
@@ -33,7 +33,6 @@ import org.apache.juneau.collections.*;
 import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.cp.*;
 import org.apache.juneau.httppart.*;
-import org.apache.juneau.internal.*;
 import org.apache.juneau.objecttools.*;
 import org.apache.juneau.swap.*;
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerPipe.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerPipe.java
index 0594325a08..c5c7446380 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerPipe.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerPipe.java
@@ -23,11 +23,9 @@ import static org.apache.juneau.common.utils.Utils.*;
 import java.io.*;
 import java.nio.charset.*;
 
-import org.apache.juneau.*;
 import org.apache.juneau.common.io.*;
 import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.common.utils.*;
-import org.apache.juneau.internal.*;
 
 /**
  * A wrapper around an object that a serializer sends its output to.
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/BuilderSwap.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/BuilderSwap.java
index a936dbb59c..fe7ce66d33 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/BuilderSwap.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/BuilderSwap.java
@@ -24,7 +24,6 @@ import java.lang.reflect.*;
 import org.apache.juneau.*;
 import org.apache.juneau.common.collections.*;
 import org.apache.juneau.common.reflect.*;
-import org.apache.juneau.common.reflect.*;
 
 /**
  * Specialized transform for builder classes.
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/TemporalSwap.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/TemporalSwap.java
index d04b9b59ff..e8244c3ddd 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/TemporalSwap.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/TemporalSwap.java
@@ -28,7 +28,6 @@ import java.util.concurrent.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.common.reflect.*;
-import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.swap.*;
 
 /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerSession.java
index ea268ec9b0..d6008da0eb 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerSession.java
@@ -29,7 +29,6 @@ import java.util.function.*;
 import org.apache.juneau.*;
 import org.apache.juneau.common.collections.*;
 import org.apache.juneau.httppart.*;
-import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.svl.*;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlUtils.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlUtils.java
index fedb706ca7..a3af8bae34 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlUtils.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlUtils.java
@@ -25,11 +25,9 @@ import java.util.*;
 
 import javax.xml.stream.*;
 
-import org.apache.juneau.*;
 import org.apache.juneau.common.io.*;
 import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.common.utils.*;
-import org.apache.juneau.internal.*;
 import org.apache.juneau.xml.annotation.*;
 
 /**
diff --git 
a/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java
 
b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java
index 6fb182e2c1..e95270c180 100644
--- 
a/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java
+++ 
b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java
@@ -37,7 +37,6 @@ import org.apache.juneau.cp.*;
 import org.apache.juneau.microservice.*;
 import org.apache.juneau.microservice.console.*;
 import org.apache.juneau.parser.*;
-import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.servlet.*;
 import org.apache.juneau.svl.*;
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseContent.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseContent.java
index 7314ab7aef..fe845353ba 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseContent.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseContent.java
@@ -41,7 +41,6 @@ import org.apache.juneau.oapi.*;
 import org.apache.juneau.objecttools.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.parser.ParseException;
-import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.rest.client.assertion.*;
 
 /**
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseHeader.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseHeader.java
index 5c822cb1e6..b2f2f98883 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseHeader.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseHeader.java
@@ -34,7 +34,6 @@ import org.apache.juneau.http.header.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.oapi.*;
 import org.apache.juneau.parser.ParseException;
-import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.rest.client.assertion.*;
 
 /**
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 ca0222cdd6..5823047d95 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
@@ -89,7 +89,6 @@ import org.apache.juneau.objecttools.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.parser.ParseException;
 import org.apache.juneau.plaintext.*;
-import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.rest.client.assertion.*;
 import org.apache.juneau.rest.client.remote.*;
 import org.apache.juneau.serializer.*;
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/HeaderList.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/HeaderList.java
index 88ed30095f..8c23630441 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/HeaderList.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/HeaderList.java
@@ -28,7 +28,6 @@ import java.util.stream.*;
 
 import org.apache.http.*;
 import org.apache.http.util.*;
-import org.apache.juneau.collections.*;
 import org.apache.juneau.common.collections.*;
 import org.apache.juneau.common.utils.*;
 import org.apache.juneau.http.HttpHeaders;
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/PartList.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/PartList.java
index 22f963e6ac..7817ac5567 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/PartList.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/PartList.java
@@ -28,7 +28,6 @@ import java.util.stream.*;
 
 import org.apache.http.*;
 import org.apache.http.util.*;
-import org.apache.juneau.collections.*;
 import org.apache.juneau.common.collections.*;
 import org.apache.juneau.common.utils.*;
 import org.apache.juneau.http.annotation.*;
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RemoteDelete.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RemoteDelete.java
index c6685e8641..f3654d7d23 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RemoteDelete.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RemoteDelete.java
@@ -22,7 +22,6 @@ import static java.lang.annotation.RetentionPolicy.*;
 import java.io.*;
 import java.lang.annotation.*;
 
-import org.apache.juneau.annotation.*;
 import org.apache.juneau.common.annotation.*;
 import org.apache.juneau.http.annotation.*;
 
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RemoteGet.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RemoteGet.java
index 2c01085bbb..4d1736afbc 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RemoteGet.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RemoteGet.java
@@ -22,7 +22,6 @@ import static java.lang.annotation.RetentionPolicy.*;
 import java.io.*;
 import java.lang.annotation.*;
 
-import org.apache.juneau.annotation.*;
 import org.apache.juneau.common.annotation.*;
 import org.apache.juneau.http.annotation.*;
 
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RemoteOp.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RemoteOp.java
index 48da4958d0..a3c696d306 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RemoteOp.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RemoteOp.java
@@ -22,7 +22,6 @@ import static java.lang.annotation.RetentionPolicy.*;
 import java.io.*;
 import java.lang.annotation.*;
 
-import org.apache.juneau.annotation.*;
 import org.apache.juneau.common.annotation.*;
 import org.apache.juneau.http.annotation.*;
 
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RemotePatch.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RemotePatch.java
index ade5ef065b..5466ab296d 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RemotePatch.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RemotePatch.java
@@ -22,7 +22,6 @@ import static java.lang.annotation.RetentionPolicy.*;
 import java.io.*;
 import java.lang.annotation.*;
 
-import org.apache.juneau.annotation.*;
 import org.apache.juneau.common.annotation.*;
 import org.apache.juneau.http.annotation.*;
 
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RemotePost.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RemotePost.java
index 32d5d514e5..cf478c9705 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RemotePost.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RemotePost.java
@@ -22,7 +22,6 @@ import static java.lang.annotation.RetentionPolicy.*;
 import java.io.*;
 import java.lang.annotation.*;
 
-import org.apache.juneau.annotation.*;
 import org.apache.juneau.common.annotation.*;
 import org.apache.juneau.http.annotation.*;
 
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RemotePut.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RemotePut.java
index 0bf0e6aa27..2d38d850f7 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RemotePut.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RemotePut.java
@@ -22,7 +22,6 @@ import static java.lang.annotation.RetentionPolicy.*;
 import java.io.*;
 import java.lang.annotation.*;
 
-import org.apache.juneau.annotation.*;
 import org.apache.juneau.common.annotation.*;
 import org.apache.juneau.http.annotation.*;
 
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RrpcInterfaceMethodMeta.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RrpcInterfaceMethodMeta.java
index 23d1c902c9..627c9847c5 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RrpcInterfaceMethodMeta.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RrpcInterfaceMethodMeta.java
@@ -16,8 +16,6 @@
  */
 package org.apache.juneau.http.remote;
 
-import static org.apache.juneau.common.reflect.ClassArrayFormat.*;
-import static org.apache.juneau.common.reflect.ClassNameFormat.*;
 import static org.apache.juneau.common.utils.StringUtils.*;
 
 import java.lang.reflect.*;
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 48f6c9258f..ae21cc3c83 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
@@ -65,7 +65,6 @@ import org.apache.juneau.jsonschema.*;
 import org.apache.juneau.oapi.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.parser.ParseException;
-import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.arg.*;
 import org.apache.juneau.rest.debug.*;
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpSession.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpSession.java
index 9d43de2ea7..9920a45188 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpSession.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpSession.java
@@ -22,8 +22,6 @@ import org.apache.http.*;
 import org.apache.juneau.*;
 import org.apache.juneau.cp.*;
 import org.apache.juneau.http.response.*;
-import org.apache.juneau.rest.converter.*;
-import org.apache.juneau.rest.guard.*;
 import org.apache.juneau.rest.logger.*;
 
 /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/BasicDebugEnablement.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/BasicDebugEnablement.java
index 35607cab0f..92d400638d 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/BasicDebugEnablement.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/BasicDebugEnablement.java
@@ -19,8 +19,6 @@ package org.apache.juneau.rest.debug;
 import static org.apache.juneau.common.utils.StringUtils.*;
 import static org.apache.juneau.rest.annotation.RestOpAnnotation.*;
 
-import java.util.*;
-
 import org.apache.juneau.*;
 import org.apache.juneau.cp.*;
 import org.apache.juneau.common.reflect.*;
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/processor/SerializedPojoProcessor.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/processor/SerializedPojoProcessor.java
index 1a5ca816e7..c0c1beb687 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/processor/SerializedPojoProcessor.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/processor/SerializedPojoProcessor.java
@@ -20,8 +20,6 @@ import static org.apache.juneau.common.utils.StringUtils.*;
 import static org.apache.juneau.common.utils.Utils.*;
 
 import java.io.*;
-import java.util.*;
-
 import org.apache.juneau.*;
 import org.apache.juneau.http.header.*;
 import org.apache.juneau.http.response.*;
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/remote/RrpcServlet.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/remote/RrpcServlet.java
index e9cf36fb54..7a8f05fa21 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/remote/RrpcServlet.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/remote/RrpcServlet.java
@@ -37,7 +37,6 @@ import org.apache.juneau.http.header.*;
 import org.apache.juneau.http.remote.*;
 import org.apache.juneau.http.response.*;
 import org.apache.juneau.parser.*;
-import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.servlet.*;
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/ContentTypeMenuItem.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/ContentTypeMenuItem.java
index ce29e109f9..24da48f1e6 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/ContentTypeMenuItem.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/ContentTypeMenuItem.java
@@ -25,7 +25,6 @@ import org.apache.juneau.*;
 import org.apache.juneau.bean.html5.*;
 import org.apache.juneau.common.utils.*;
 import org.apache.juneau.rest.*;
-import org.apache.juneau.serializer.*;
 
 /**
  * Widget that returns back a list of hyperlinks for rendering the contents of 
a page in a variety of content types.
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/MenuItemWidget.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/MenuItemWidget.java
index d686ab0b50..4289a26dcc 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/MenuItemWidget.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/MenuItemWidget.java
@@ -25,7 +25,6 @@ import java.io.*;
 
 import org.apache.juneau.common.io.*;
 import org.apache.juneau.html.*;
-import org.apache.juneau.internal.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.serializer.*;
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/BasicRuntimeException_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/BasicRuntimeException_Test.java
index f5973aa9d5..57443cbca9 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/BasicRuntimeException_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/BasicRuntimeException_Test.java
@@ -19,7 +19,6 @@ package org.apache.juneau;
 import static org.junit.jupiter.api.Assertions.*;
 
 import org.apache.juneau.annotation.*;
-import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.objecttools.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.rest.client.remote.*;
diff --git a/juneau-utest/src/test/java/org/apache/juneau/BenchmarkRunner.java 
b/juneau-utest/src/test/java/org/apache/juneau/BenchmarkRunner.java
index 2a7601b041..5bf0055917 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/BenchmarkRunner.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/BenchmarkRunner.java
@@ -17,7 +17,6 @@
 package org.apache.juneau;
 
 import java.util.*;
-import java.util.Map.*;
 import java.util.concurrent.*;
 import java.util.function.*;
 
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 0e90465801..ad48f5b1fc 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
@@ -23,8 +23,6 @@ import static org.apache.juneau.junit.bct.BctAssertions.*;
 import java.lang.annotation.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.annotation.*;
-import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.common.annotation.*;
 import org.junit.jupiter.api.*;
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ClassInfo_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ClassInfo_Test.java
index ad446e933a..ffd2074590 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ClassInfo_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ClassInfo_Test.java
@@ -37,9 +37,7 @@ import java.util.stream.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
-import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.common.collections.*;
-import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.svl.*;
 import org.junit.jupiter.api.*;
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ConstructorInfoTest.java
 
b/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ConstructorInfoTest.java
index cd23644ade..c199e56b71 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ConstructorInfoTest.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ConstructorInfoTest.java
@@ -26,7 +26,6 @@ import java.util.function.*;
 import java.util.stream.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.common.reflect.*;
 import org.junit.jupiter.api.*;
 
 class ConstructorInfoTest extends TestBase {
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ExecutableInfo_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ExecutableInfo_Test.java
index 5634d4fa1c..da935e821a 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ExecutableInfo_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ExecutableInfo_Test.java
@@ -30,7 +30,6 @@ import java.util.function.*;
 import java.util.stream.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.common.reflect.*;
 import org.junit.jupiter.api.*;
 
 class ExecutableInfo_Test extends TestBase {
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/common/reflect/FieldInfo_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/common/reflect/FieldInfo_Test.java
index d5d856a417..53872e7032 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/common/reflect/FieldInfo_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/common/reflect/FieldInfo_Test.java
@@ -27,7 +27,6 @@ import java.lang.reflect.*;
 import java.util.function.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.common.reflect.*;
 import org.junit.jupiter.api.*;
 
 class FieldInfo_Test extends TestBase {
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/common/reflect/MethodInfo_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/common/reflect/MethodInfo_Test.java
index 3064cbd006..ad4bb84573 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/common/reflect/MethodInfo_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/common/reflect/MethodInfo_Test.java
@@ -30,7 +30,6 @@ import java.util.stream.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
-import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.svl.*;
 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 b5b644179e..1a8ab045d5 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
@@ -29,7 +29,6 @@ import java.util.stream.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
-import org.apache.juneau.common.reflect.*;
 import org.junit.jupiter.api.*;
 
 /**
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/cp/BeanStore_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/cp/BeanStore_Test.java
index ec1e398c3e..763bf006a5 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/cp/BeanStore_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/cp/BeanStore_Test.java
@@ -30,7 +30,6 @@ import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.common.reflect.*;
 import org.apache.juneau.common.utils.*;
-import org.apache.juneau.common.reflect.*;
 import org.junit.jupiter.api.*;
 
 class BeanStore_Test extends TestBase {
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Restx_ReqAttrs_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Restx_ReqAttrs_Test.java
index ca995d0d29..d0ed0cf153 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Restx_ReqAttrs_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Restx_ReqAttrs_Test.java
@@ -16,8 +16,6 @@
  */
 package org.apache.juneau.rest.annotation;
 
-import java.util.*;
-
 import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.http.annotation.*;
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Body_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Body_Test.java
index df27419c5a..5e04835f78 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Body_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Body_Test.java
@@ -27,7 +27,6 @@ import org.apache.http.*;
 import org.apache.juneau.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.rest.httppart.*;
 import org.apache.juneau.rest.mock.*;
 import org.apache.juneau.rest.servlet.*;
 import org.apache.juneau.testutils.pojos.*;
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/utils/StringBuilderWriterTest.java
 
b/juneau-utest/src/test/java/org/apache/juneau/utils/StringBuilderWriterTest.java
index cb995a16d0..f4da96960c 100755
--- 
a/juneau-utest/src/test/java/org/apache/juneau/utils/StringBuilderWriterTest.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/utils/StringBuilderWriterTest.java
@@ -20,7 +20,6 @@ import static org.junit.jupiter.api.Assertions.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.common.io.*;
-import org.apache.juneau.internal.*;
 import org.junit.jupiter.api.*;
 
 class StringBuilderWriterTest extends TestBase {

Reply via email to