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() {