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 0e3029e506 Marshall module improvements
0e3029e506 is described below

commit 0e3029e5061a1ed322bbb48713213780cbf8adf6
Author: James Bognar <[email protected]>
AuthorDate: Thu Dec 4 13:36:41 2025 -0800

    Marshall module improvements
---
 .../apache/juneau/commons/reflect/ClassInfo.java   |  2 +-
 .../src/main/java/org/apache/juneau/ClassMeta.java | 24 +++++++++++++++++++---
 .../org/apache/juneau/html/HtmlParserSession.java  |  2 +-
 .../apache/juneau/html/HtmlSerializerSession.java  |  4 ++--
 .../jsonschema/JsonSchemaGeneratorSession.java     |  2 +-
 .../juneau/objecttools/ObjectIntrospector.java     |  2 +-
 .../org/apache/juneau/objecttools/ObjectRest.java  |  2 +-
 7 files changed, 28 insertions(+), 10 deletions(-)

diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ClassInfo.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ClassInfo.java
index 0bbf17bdac..18a0b299b3 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ClassInfo.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ClassInfo.java
@@ -65,7 +65,7 @@ import org.apache.juneau.commons.collections.*;
  *
  */
 @SuppressWarnings({ "unchecked", "rawtypes" })
-public class ClassInfo extends ElementInfo implements Annotatable {
+public class ClassInfo extends ElementInfo implements Annotatable, Type {
 
        private static final Cache<Class,ClassInfoTyped> CACHE = 
Cache.of(Class.class, ClassInfoTyped.class).build();
 
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 17ccb326cc..78c5526ae1 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
@@ -64,7 +64,7 @@ import org.apache.juneau.swap.*;
  * @param <T> The class type of the wrapped class.
  */
 @Bean(properties = 
"innerClass,classCategory,elementType,keyType,valueType,notABeanReason,initException,beanMeta")
-public class ClassMeta<T> implements Type {
+public class ClassMeta<T> extends ClassInfoTyped<T> {
 
        private static final AnnotationProvider AP = 
AnnotationProvider.INSTANCE;
 
@@ -605,6 +605,7 @@ public class ClassMeta<T> implements Type {
         */
        @SuppressWarnings("unchecked")
        ClassMeta(Class<T> innerClass, BeanContext beanContext, 
ObjectSwap<T,?>[] swaps, ObjectSwap<?,?>[] childSwaps) {
+               super(innerClass);
                this.innerClass = innerClass;
                this.info = info(innerClass);
                this.beanContext = beanContext;
@@ -663,6 +664,7 @@ public class ClassMeta<T> implements Type {
         */
        @SuppressWarnings("unchecked")
        ClassMeta(ClassMeta<?>[] args) {
+               super((Class<T>)Object[].class);
                this.innerClass = (Class<T>)Object[].class;
                this.info = info(innerClass);
                this.args = args;
@@ -708,6 +710,7 @@ public class ClassMeta<T> implements Type {
         * Used for creating Map and Collection class metas that shouldn't be 
cached.
         */
        ClassMeta(ClassMeta<T> mainType, ClassMeta<?> keyType, ClassMeta<?> 
valueType, ClassMeta<?> elementType) {
+               super(mainType.innerClass);
                this.innerClass = mainType.innerClass;
                this.info = mainType.info;
                this.implClass = mainType.implClass;
@@ -818,6 +821,7 @@ public class ClassMeta<T> implements Type {
         * @param o The object to cast.
         * @return The cast object.
         */
+       @Override
        public T cast(Object o) {
                return this.innerClass.cast(o);
        }
@@ -1101,6 +1105,7 @@ public class ClassMeta<T> implements Type {
         *
         * @return The  name of the inner class.
         */
+       @Override
        public String getName() { return innerClass.getName(); }
 
        /**
@@ -1147,6 +1152,7 @@ public class ClassMeta<T> implements Type {
         *
         * @return The default value, or <jk>null</jk> if this class type is 
not a primitive.
         */
+       @Override
        @SuppressWarnings("unchecked")
        public T getPrimitiveDefault() { return (T)primitiveDefault; }
 
@@ -1183,7 +1189,7 @@ public class ClassMeta<T> implements Type {
         *
         * @return The public methods on this class.
         */
-       public Map<String,Method> getPublicMethods() { return publicMethods; }
+       public Map<String,Method> getPublicMethods2() { return publicMethods; }
 
        /**
         * Returns the transform for this class for creating instances from a 
Reader.
@@ -1283,7 +1289,7 @@ public class ClassMeta<T> implements Type {
         * @param a The annotation to check for.
         * @return <jk>true</jk> if the inner class has the annotation.
         */
-       public boolean hasAnnotation(Class<? extends Annotation> a) {
+       public boolean hasAnnotation2(Class<? extends Annotation> a) {
                return nn(getLastAnnotation(a));
        }
 
@@ -1365,6 +1371,7 @@ public class ClassMeta<T> implements Type {
         * @param value The value to check against.
         * @return <jk>true</jk> if the specified class is an exact match for 
this metadata.
         */
+       @Override
        public boolean is(Class<?> value) {
                return eq(innerClass, value);
        }
@@ -1374,6 +1381,7 @@ public class ClassMeta<T> implements Type {
         *
         * @return <jk>true</jk> if this class is abstract.
         */
+       @Override
        public boolean isAbstract() { return isAbstract; }
 
        /**
@@ -1388,6 +1396,7 @@ public class ClassMeta<T> implements Type {
         *
         * @return <jk>true</jk> if this class is an array.
         */
+       @Override
        public boolean isArray() { return cc == ARRAY; }
 
        /**
@@ -1455,6 +1464,7 @@ public class ClassMeta<T> implements Type {
         * @param c The class to test against.
         * @return <jk>true</jk> if this metadata represents the specified type.
         */
+       @Override
        public boolean isChildOf(Class<?> c) {
                return info.isChildOf(c);
        }
@@ -1464,6 +1474,7 @@ public class ClassMeta<T> implements Type {
         *
         * @return <jk>true</jk> if this class is {@link Class}.
         */
+       @Override
        public boolean isClass() { return cc == ClassCategory.CLASS; }
 
        /**
@@ -1478,6 +1489,7 @@ public class ClassMeta<T> implements Type {
         *
         * @return <jk>true</jk> if this class is a subclass of {@link 
Collection} or is an array.
         */
+       @Override
        public boolean isCollectionOrArray() { return cc == COLLECTION || cc == 
ARRAY; }
 
        /**
@@ -1535,6 +1547,7 @@ public class ClassMeta<T> implements Type {
         *
         * @return <jk>true</jk> if this class is an {@link Enum}.
         */
+       @Override
        public boolean isEnum() { return cc == ENUM; }
 
        /**
@@ -1560,6 +1573,7 @@ public class ClassMeta<T> implements Type {
         * @param o The object to check.
         * @return <jk>true</jk> if the specified object is an instance of this 
class.
         */
+       @Override
        public boolean isInstance(Object o) {
                if (nn(o))
                        return info.isParentOf(o.getClass()) || (isPrimitive() 
&& info.getPrimitiveWrapper() == o.getClass());
@@ -1616,6 +1630,7 @@ public class ClassMeta<T> implements Type {
         *
         * @return <jk>true</jk> if this class is an inner class.
         */
+       @Override
        public boolean isMemberClass() { return isMemberClass; }
 
        /**
@@ -1673,6 +1688,7 @@ public class ClassMeta<T> implements Type {
         *
         * @return <jk>true</jk> if this class is a primitive.
         */
+       @Override
        public boolean isPrimitive() { return innerClass.isPrimitive(); }
 
        /**
@@ -1722,6 +1738,7 @@ public class ClassMeta<T> implements Type {
         *
         * @return <jk>true</jk> if this class is {@link Void} or <jk>void</jk>.
         */
+       @Override
        public boolean isVoid() { return cc == VOID; }
 
        /**
@@ -1789,6 +1806,7 @@ public class ClassMeta<T> implements Type {
         * @return A new instance of the object, or <jk>null</jk> if there is 
no no-arg constructor on the object.
         * @throws ExecutableException Exception occurred on invoked 
constructor/method/field.
         */
+       @Override
        @SuppressWarnings("unchecked")
        public T newInstance() throws ExecutableException {
                if (isArray())
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
index 27f1ef6c0d..cbd28d67ac 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
@@ -255,7 +255,7 @@ public class HtmlParserSession extends XmlParserSession {
        private <T> T parseAnchor(XmlReader r, ClassMeta<T> beanType) throws 
IOException, ParseException, XMLStreamException {
                String href = r.getAttributeValue(null, "href");
                String name = getElementText(r);
-               if (nn(beanType) && beanType.hasAnnotation(HtmlLink.class)) {
+               if (nn(beanType) && beanType.hasAnnotation2(HtmlLink.class)) {
                        var uriProperty = Value.<String>empty();
                        var nameProperty = Value.<String>empty();
                        beanType.forEachAnnotation(HtmlLink.class, x -> 
isNotEmpty(x.uriProperty()), x -> uriProperty.set(x.uriProperty()));
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
index 241b611d86..9c6ba9d842 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
@@ -356,7 +356,7 @@ public class HtmlSerializerSession extends 
XmlSerializerSession {
                if (nn(swap))
                        cm1 = swap.getSwapClassMeta(this);
 
-               if (cm1 == null || ! cm1.isMapOrBean() || 
cm1.hasAnnotation(HtmlLink.class))
+               if (cm1 == null || ! cm1.isMapOrBean() || 
cm1.hasAnnotation2(HtmlLink.class))
                        return null;
 
                HtmlClassMeta cHtml = getHtmlClassMeta(cm1);
@@ -933,7 +933,7 @@ public class HtmlSerializerSession extends 
XmlSerializerSession {
 
                        } else if (sType.isBean()) {
                                BeanMap m = toBeanMap(o);
-                               if (aType.hasAnnotation(HtmlLink.class)) {
+                               if (aType.hasAnnotation2(HtmlLink.class)) {
                                        var uriProperty = Value.<String>empty();
                                        var nameProperty = 
Value.<String>empty();
                                        aType.forEachAnnotation(HtmlLink.class, 
x -> isNotEmpty(x.uriProperty()), x -> uriProperty.set(x.uriProperty()));
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorSession.java
index 6548bfc0a8..d4d2d68fa9 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorSession.java
@@ -341,7 +341,7 @@ public class JsonSchemaGeneratorSession extends 
BeanTraverseSession {
 
                var jscm = (JsonSchemaClassMeta)null;
                var objectSwapCM = objectSwap == null ? null : 
getClassMeta(objectSwap.getClass());
-               if (nn(objectSwapCM) && 
objectSwapCM.hasAnnotation(Schema.class))
+               if (nn(objectSwapCM) && 
objectSwapCM.hasAnnotation2(Schema.class))
                        jscm = getJsonSchemaClassMeta(objectSwapCM);
                if (jscm == null)
                        jscm = getJsonSchemaClassMeta(sType);
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectIntrospector.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectIntrospector.java
index a761943700..0ea52370cd 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectIntrospector.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectIntrospector.java
@@ -239,7 +239,7 @@ public class ObjectIntrospector {
        public Object invokeMethod(String method, String args) throws 
NoSuchMethodException, IllegalArgumentException, InvocationTargetException, 
IllegalAccessException, ParseException, IOException {
                if (object == null)
                        return null;
-               Method m = 
parser.getBeanContext().getClassMeta(object.getClass()).getPublicMethods().get(method);
+               Method m = 
parser.getBeanContext().getClassMeta(object.getClass()).getPublicMethods2().get(method);
                if (m == null)
                        throw new NoSuchMethodException(method);
                return invokeMethod(m, args == null ? null : new 
StringReader(args));
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectRest.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectRest.java
index f4f724e850..42315263c5 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectRest.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectRest.java
@@ -595,7 +595,7 @@ public class ObjectRest {
                var o = get(url);
                if (o == null)
                        return null;
-               return 
session.getClassMeta(o.getClass()).getPublicMethods().keySet();
+               return 
session.getClassMeta(o.getClass()).getPublicMethods2().keySet();
        }
 
        /**

Reply via email to