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

commit b4e96dac953379680d3f5c1111c849059fd992c9
Author: James Bognar <[email protected]>
AuthorDate: Sun Dec 7 19:30:47 2025 -0500

    Marshall module improvements
---
 .../main/java/org/apache/juneau/BeanSession.java   |  4 +++
 .../src/main/java/org/apache/juneau/ClassMeta.java | 30 ----------------------
 .../org/apache/juneau/html/HtmlParserSession.java  |  2 +-
 .../apache/juneau/html/HtmlSerializerSession.java  |  4 +--
 .../juneau/httppart/bean/RequestBeanMeta.java      |  3 ++-
 .../jsonschema/JsonSchemaGeneratorSession.java     |  2 +-
 6 files changed, 10 insertions(+), 35 deletions(-)

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 1e553f5a81..9033dfc322 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
@@ -300,6 +300,10 @@ public class BeanSession extends ContextSession {
                return ctx._class();
        }
 
+       public AnnotationProvider getAnnotationProvider() {
+               return ctx.getAnnotationProvider();
+       }
+
        /**
         * Logs a warning message.
         *
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 9333e93279..7085150203 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
@@ -140,7 +140,6 @@ public class ClassMeta<T> extends ClassInfoTyped<T> {
        }
 
        private final Map<Class<?>,Annotation[]> annotationArrayMap = new 
ConcurrentHashMap<>();
-       private final Map<Class<?>,Optional<?>> annotationLastMap = new 
ConcurrentHashMap<>();
        private final ClassMeta<?>[] args;                                      
                                        // Arg types if this is an array of 
args.
        private final BeanContext beanContext;                                  
                                        // The bean context that created this 
object.
        private final Supplier<BeanFilter> beanFilter;
@@ -681,25 +680,6 @@ public class ClassMeta<T> extends ClassInfoTyped<T> {
         */
        public ClassMeta<?> getKeyType() { return keyType; }
 
-       /**
-        * Shortcut for calling <c>getInnerClass().getAnnotation(a)</c>.
-        *
-        * @param <A> The annotation type to look for.
-        * @param a The annotation to retrieve.
-        * @return The specified annotation, or <jk>null</jk> if the class does 
not have the specified annotation.
-        */
-       @SuppressWarnings("unchecked")
-       public <A extends Annotation> A getLastAnnotation(Class<A> a) {
-               var o = annotationLastMap.get(a);
-               if (o == null) {
-                       if (beanContext == null)
-                               return AP.find(a, 
this).stream().findFirst().map(AnnotationInfo::inner).orElse(null);
-                       o = beanContext.getAnnotationProvider().find(a, 
this).stream().findFirst().map(AnnotationInfo::inner);
-                       annotationLastMap.put(a, o);
-               }
-               return (A)o.orElse(null);
-       }
-
        /**
         * Returns the method or field annotated with {@link NameProperty 
@NameProperty}.
         *
@@ -881,16 +861,6 @@ public class ClassMeta<T> extends ClassInfoTyped<T> {
         */
        public ClassMeta<?> getValueType() { return valueType; }
 
-       /**
-        * Shortcut for calling <code>getInnerClass().getAnnotation(a) != 
<jk>null</jk></code>.
-        *
-        * @param a The annotation to check for.
-        * @return <jk>true</jk> if the inner class has the annotation.
-        */
-       public boolean hasAnnotation2(Class<? extends Annotation> a) {
-               return nn(getLastAnnotation(a));
-       }
-
        /**
         * Returns <jk>true</jk> if this class has a transform associated with 
it that allows it to be created from an InputStream.
         *
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 56f381efa1..51348799c0 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.hasAnnotation2(HtmlLink.class)) {
+               if (nn(beanType) && getAnnotationProvider().has(HtmlLink.class, 
beanType)) {
                        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 e1a67acdc4..d05dca7f2e 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.hasAnnotation2(HtmlLink.class))
+               if (cm1 == null || ! cm1.isMapOrBean() || 
getAnnotationProvider().has(HtmlLink.class, cm1))
                        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.hasAnnotation2(HtmlLink.class)) {
+                               if (getAnnotationProvider().has(HtmlLink.class, 
aType)) {
                                        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/httppart/bean/RequestBeanMeta.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanMeta.java
index 0d1249ebc7..8452e84c2a 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanMeta.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanMeta.java
@@ -55,7 +55,8 @@ public class RequestBeanMeta {
 
                Builder apply(Class<?> c) {
                        this.cm = BeanContext.DEFAULT.getClassMeta(c);
-                       apply(cm.getLastAnnotation(Request.class));
+                       var ap = cm.getBeanContext().getAnnotationProvider();
+                       apply(ap.find(Request.class, 
cm).stream().findFirst().map(x -> x.inner()).orElse(null));
                        cm.getPublicMethods().stream().forEach(x -> {
                                var n = x.getSimpleName();
                                if (x.hasAnnotation(Header.class)) {
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 ab127d0deb..0b28eb59f2 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.hasAnnotation2(Schema.class))
+               if (nn(objectSwapCM) && 
getAnnotationProvider().has(Schema.class, objectSwapCM))
                        jscm = getJsonSchemaClassMeta(objectSwapCM);
                if (jscm == null)
                        jscm = getJsonSchemaClassMeta(sType);

Reply via email to