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 8851206607 org.apache.juneau.common.reflect API improvements
8851206607 is described below

commit 88512066075f4014758126f2271a71e861dae3f0
Author: James Bognar <[email protected]>
AuthorDate: Tue Nov 18 12:15:49 2025 -0500

    org.apache.juneau.common.reflect API improvements
---
 .../apache/juneau/common/reflect/ClassInfo.java    | 50 ----------------------
 .../src/main/java/org/apache/juneau/ClassMeta.java |  5 ++-
 .../juneau/common/reflect/ClassInfo_Test.java      | 10 +++--
 3 files changed, 10 insertions(+), 55 deletions(-)

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 0696c322a4..1c1dc58705 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
@@ -2155,56 +2155,6 @@ public class ClassInfo extends ElementInfo implements 
Annotatable {
                return nn(inner) && v.isVisible(inner);
        }
 
-       /**
-        * Returns the last matching annotation on this class and 
superclasses/interfaces.
-        *
-        * <p>
-        * Annotations are searched in the following orders:
-        * <ol>
-        *      <li>On this class.
-        *      <li>On parent classes ordered child-to-parent.
-        *      <li>On interfaces ordered child-to-parent.
-        *      <li>On the package of this class.
-        * </ol>
-        *
-        * @param <A> The annotation type to look for.
-        * @param type The annotation to look for.
-        * @param filter A predicate to apply to the entries to determine if 
annotation should be returned.  Can be <jk>null</jk>.
-        * @return This object.
-        */
-       public <A extends Annotation> A lastAnnotation(Class<A> type, 
Predicate<A> filter) {
-               // Inline implementation using reflection directly instead of 
delegating to AnnotationProvider
-               if (!nn(type))
-                       return null;
-
-               // Search annotations using reflection (reverse order for 
"last")
-               var annotations = rstream(l(inner.getAnnotationsByType(type)));
-               var result = annotations.filter(a -> test(filter, 
a)).findFirst().orElse(null);
-               if (nn(result))
-                       return result;
-
-               // Search parents
-               var parents2 = parents.get();
-               for (var parent : parents2) {
-                       var parentAnnotations = 
rstream(l(parent.inner().getAnnotationsByType(type)));
-                       result = parentAnnotations.filter(a -> test(filter, 
a)).findFirst().orElse(null);
-                       if (nn(result))
-                               return result;
-               }
-
-               // Search interfaces
-               var interfaces2 = interfaces.get();
-               for (var iface : interfaces2) {
-                       var ifaceAnnotations = 
rstream(l(iface.inner().getAnnotationsByType(type)));
-                       result = ifaceAnnotations.filter(a -> test(filter, 
a)).findFirst().orElse(null);
-                       if (nn(result))
-                               return result;
-               }
-
-               // Search package
-               return getPackageAnnotation(type);
-       }
-
        /**
         * Shortcut for calling 
<c>Class.getDeclaredConstructor().newInstance()</c> on the underlying class.
         *
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 77c40f056b..f095966a28 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
@@ -1760,7 +1760,10 @@ public class ClassMeta<T> implements Type {
                A[] array = annotationArray(type);
                if (array == null) {
                        if (beanContext == null)
-                               return 
Optional.ofNullable(info.lastAnnotation(type, filter));
+                               return AnnotationProvider.INSTANCE.find(type, 
info.inner())
+                                       .map(AnnotationInfo::inner)
+                                       .filter(a -> test(filter, a))
+                                       .findFirst();  // AnnotationProvider 
returns child-to-parent, so first is "last"
                        return Optional.empty();
                }
                for (int i = array.length - 1; i >= 0; i--)
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 d01674f5fa..700c732a15 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
@@ -593,10 +593,12 @@ public class ClassInfo_Test extends TestBase {
        }
 
        @Test void lastAnnotation() {
-               assertEquals(7, g3.lastAnnotation(A.class, null).value());
-               assertEquals(7, g4.lastAnnotation(A.class, null).value());
-               assertEquals(3, g5.lastAnnotation(A.class, null).value());
-               assertEquals(5, g3.lastAnnotation(A.class, x -> x.value() == 
5).value());
+               // Use AnnotationProvider to get last annotation (first in 
child-to-parent order stream)
+               var ap = 
org.apache.juneau.common.reflect.AnnotationProvider.INSTANCE;
+               assertEquals(7, ap.find(A.class, g3.inner()).map(x -> 
x.inner()).findFirst().get().value());
+               assertEquals(7, ap.find(A.class, g4.inner()).map(x -> 
x.inner()).findFirst().get().value());
+               assertEquals(3, ap.find(A.class, g5.inner()).map(x -> 
x.inner()).findFirst().get().value());
+               assertEquals(5, ap.find(A.class, g3.inner()).map(x -> 
x.inner()).filter(x -> x.value() == 5).findFirst().get().value());
        }
 
        @Test void getPackageAnnotation() {

Reply via email to