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 4d78f833b9 Marshall module improvements
4d78f833b9 is described below
commit 4d78f833b91483b213510a9cd7296e38443376b1
Author: James Bognar <[email protected]>
AuthorDate: Fri Dec 12 11:30:56 2025 -0500
Marshall module improvements
---
.../java/org/apache/juneau/BeanPropertyMeta.java | 67 +---------------------
1 file changed, 3 insertions(+), 64 deletions(-)
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 d8515c608d..a07d7ce34e 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
@@ -756,13 +756,12 @@ public class BeanPropertyMeta implements
Comparable<BeanPropertyMeta> {
* @param a The class to find annotations for.
* @return A list of annotations ordered in parent-to-child order.
Never <jk>null</jk>.
*/
- @SuppressWarnings("null")
public <A extends Annotation> List<A>
getAllAnnotationsParentFirst(Class<A> a) {
var l = new LinkedList<A>();
var ap = bc.getAnnotationProvider();
var fi = field;
var gi = getter;
- var si = setter == null ? null : info(setter);
+ var si = setter;
if (a == null)
return l;
rstream(ap.find(a, getBeanMeta().getClassMeta())).forEach(x ->
l.add(x.inner()));
@@ -771,27 +770,15 @@ public class BeanPropertyMeta implements
Comparable<BeanPropertyMeta> {
rstream(ap.find(a, field.getFieldType())).forEach(x ->
l.add(x.inner()));
}
if (nn(gi)) {
- // Walk up the inheritance hierarchy for the getter
method
- forEachParentMethod(getter.inner(), parentGetter -> {
- ap.find(a, info(parentGetter), SELF,
MATCHING_METHODS, RETURN_TYPE, PACKAGE).forEach(x -> l.add(x.inner()));
- });
ap.find(a, gi, SELF, MATCHING_METHODS, RETURN_TYPE,
PACKAGE).forEach(x -> l.add(x.inner()));
rstream(ap.find(a, gi.getReturnType())).forEach(x ->
l.add(x.inner()));
}
if (nn(setter)) {
- // Walk up the inheritance hierarchy for the setter
method
- forEachParentMethod(setter.inner(), parentSetter -> {
- ap.find(a, info(parentSetter), SELF,
MATCHING_METHODS, RETURN_TYPE, PACKAGE).forEach(x -> l.add(x.inner()));
- });
ap.find(a, si, SELF, MATCHING_METHODS, RETURN_TYPE,
PACKAGE).forEach(x -> l.add(x.inner()));
rstream(ap.find(a, setter.getReturnType())).forEach(x
-> l.add(x.inner()));
}
if (nn(extraKeys)) {
var eki = extraKeys;
- // Walk up the inheritance hierarchy for the extraKeys
method
- forEachParentMethod(extraKeys.inner(), parentExtraKeys
-> {
- ap.find(a, info(parentExtraKeys), SELF,
MATCHING_METHODS, RETURN_TYPE, PACKAGE).forEach(x -> l.add(x.inner()));
- });
ap.find(a, eki, SELF, MATCHING_METHODS, RETURN_TYPE,
PACKAGE).forEach(x -> l.add(x.inner()));
rstream(ap.find(a,
extraKeys.getReturnType())).forEach(x -> l.add(x.inner()));
}
@@ -1024,54 +1011,6 @@ public class BeanPropertyMeta implements
Comparable<BeanPropertyMeta> {
return o;
}
- /**
- * Walks up the class hierarchy to find parent methods that match the
signature of the given method.
- * Executes the consumer for each parent method found, starting from
the topmost parent down to
- * the immediate parent (but not including the method itself).
- *
- * @param method The method to find parents for.
- * @param consumer The action to perform for each parent method.
- */
- private static void forEachParentMethod(Method method, Consumer<Method>
consumer) {
- // TODO - Convert to use MethodInfo parameters
- if (method == null)
- return;
-
- var methodName = method.getName();
- var paramTypes = method.getParameterTypes();
- var declaringClass = method.getDeclaringClass();
-
- // Collect parent methods in a list (we'll reverse it to get
parent-to-child order)
- var parentMethods = new LinkedList<Method>();
-
- // Walk up the class hierarchy
- var currentClass = declaringClass.getSuperclass();
- while (nn(currentClass) && currentClass != Object.class) {
- try {
- var parentMethod =
currentClass.getDeclaredMethod(methodName, paramTypes);
- parentMethods.add(parentMethod);
- } catch (@SuppressWarnings("unused")
NoSuchMethodException e) {
- // No matching method in this parent class,
continue up the hierarchy
- }
- currentClass = currentClass.getSuperclass();
- }
-
- // Also check interfaces
- for (var iface : declaringClass.getInterfaces()) {
- try {
- var ifaceMethod =
iface.getDeclaredMethod(methodName, paramTypes);
- parentMethods.add(ifaceMethod);
- } catch (@SuppressWarnings("unused")
NoSuchMethodException e) {
- // No matching method in this interface
- }
- }
-
- // Process in reverse order (parent-to-child) to match the
"ParentFirst" semantics
- for (var i = parentMethods.size() - 1; i >= 0; i--) {
- consumer.accept(parentMethods.get(i));
- }
- }
-
private Object getInner(BeanMap<?> m, String pName) {
try {
@@ -1098,7 +1037,7 @@ public class BeanPropertyMeta implements
Comparable<BeanPropertyMeta> {
}
}
- private Object invokeGetter(Object bean, String pName) throws
IllegalArgumentException, IllegalAccessException, InvocationTargetException {
+ private Object invokeGetter(Object bean, String pName) throws
IllegalArgumentException {
if (isDyna) {
var m = (Map)null;
if (nn(getter)) {
@@ -1118,7 +1057,7 @@ public class BeanPropertyMeta implements
Comparable<BeanPropertyMeta> {
throw bex(beanMeta.getClassMeta(), "Getter or public field not
defined on property ''{0}''", name);
}
- private Object invokeSetter(Object bean, String pName, Object val)
throws IllegalArgumentException, IllegalAccessException,
InvocationTargetException {
+ private Object invokeSetter(Object bean, String pName, Object val)
throws IllegalArgumentException {
if (isDyna) {
if (nn(setter))
return setter.invoke(bean, pName, val);