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

commit 18f46f1d00b106cd0ba50788a9ca8df0cdccf875
Author: James Bognar <[email protected]>
AuthorDate: Sun Dec 7 16:43:34 2025 -0500

    Marshall module improvements
---
 .../src/main/java/org/apache/juneau/BeanMeta.java  | 64 +++++++++++-----------
 1 file changed, 32 insertions(+), 32 deletions(-)

diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
index 0cb1f5180c..a750243f65 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
@@ -155,7 +155,7 @@ public class BeanMeta<T> {
                String[] constructorArgs = {};
                PropertyNamer propertyNamer;
                BeanRegistry beanRegistry;
-               String dictionaryName, typePropertyName;
+               String typePropertyName;
                boolean sortProperties, fluentSetters;
 
                Builder(ClassMeta<T> classMeta, BeanContext ctx, BeanFilter 
beanFilter, String[] pNames, ConstructorInfo implClassConstructor) {
@@ -167,27 +167,6 @@ public class BeanMeta<T> {
                        this.implClassConstructor = implClassConstructor;
                }
 
-               private String findDictionaryName(ClassMeta<?> cm) {
-                       var br = cm.getBeanRegistry();
-                       if (nn(br)) {
-                               String s = br.getTypeName(this.classMeta);
-                               if (nn(s))
-                                       return s;
-                       }
-                       var pcm = cm.inner().getSuperclass();
-                       if (nn(pcm)) {
-                               var s = 
findDictionaryName(ctx.getClassMeta(pcm));
-                               if (nn(s))
-                                       return s;
-                       }
-                       for (var icm : cm.inner().getInterfaces()) {
-                               var s = 
findDictionaryName(ctx.getClassMeta(icm));
-                               if (nn(s))
-                                       return s;
-                       }
-                       return null;
-               }
-
                /*
                 * Returns the property name of the specified field if it's a 
valid property.
                 * Returns null if the field isn't a valid property.
@@ -469,11 +448,6 @@ public class BeanMeta<T> {
 
                                properties = sortProperties ? sortedMap() : 
map();
 
-                               if (nn(beanFilter) && 
nn(beanFilter.getTypeName()))
-                                       dictionaryName = 
beanFilter.getTypeName();
-                               if (dictionaryName == null)
-                                       dictionaryName = 
findDictionaryName(this.classMeta);
-
                                normalProps.forEach((k, v) -> {
                                        var pMeta = v.build();
                                        if (pMeta.isDyna())
@@ -878,7 +852,7 @@ public class BeanMeta<T> {
 
        final BeanPropertyMeta dynaProperty;                   // "extras" 
property.
 
-       private final String dictionaryName;                   // The 
@Bean(typeName) annotation defined on this bean class.
+       private final Supplier<String> dictionaryName2;                   // 
The @Bean(typeName) annotation defined on this bean class.
 
        final String notABeanReason;                           // Readable 
string explaining why this class wasn't a bean.
 
@@ -888,6 +862,32 @@ public class BeanMeta<T> {
 
        final boolean fluentSetters;
 
+       private String findDictionaryName() {
+               if (nn(beanFilter) && nn(beanFilter.getTypeName()))
+                       return beanFilter.getTypeName();
+
+               var br = getBeanRegistry();
+               if (nn(br)) {
+                       String s = br.getTypeName(this.classMeta);
+                       if (nn(s))
+                               return s;
+               }
+
+               return classMeta
+                       .getParentsAndInterfaces()
+                       .stream()
+                       .skip(1)
+                       .map(x -> ctx.getClassMeta(x))
+                       .map(x -> x.getBeanRegistry())
+                       .filter(Objects::nonNull)
+                       .map(x -> x.getTypeName(this.classMeta))
+                       .filter(Objects::nonNull)
+                       .findFirst()
+                       .orElse(null);
+       }
+
+
+
        /**
         * Constructor.
         *
@@ -898,15 +898,14 @@ public class BeanMeta<T> {
         * @param implClassConstructor The constructor to use if one cannot be 
found.  Can be <jk>null</jk>.
         */
        protected BeanMeta(ClassMeta<T> classMeta, BeanFilter beanFilter, 
String[] pNames, ConstructorInfo implClassConstructor) {
+
+               Builder<T> b = new Builder<>(classMeta, 
classMeta.getBeanContext(), beanFilter, pNames, implClassConstructor);
                this.classMeta = classMeta;
                this.ctx = classMeta.getBeanContext();
                this.c = classMeta.inner();
-
-               Builder<T> b = new Builder<>(classMeta, ctx, beanFilter, 
pNames, implClassConstructor);
                notABeanReason = b.init(this);
 
                this.beanFilter = beanFilter;
-               dictionaryName = b.dictionaryName;
                properties = u(b.properties);
                propertyArray = properties == null ? EMPTY_PROPERTIES : 
array(properties.values(), BeanPropertyMeta.class);
                hiddenProperties = u(b.hiddenProperties);
@@ -924,6 +923,7 @@ public class BeanMeta<T> {
 
                if (sortProperties)
                        Arrays.sort(propertyArray);
+               dictionaryName2 = memoize(()->findDictionaryName());
        }
 
        @Override /* Overridden from Object */
@@ -970,7 +970,7 @@ public class BeanMeta<T> {
         *
         * @return The dictionary name for this bean, or <jk>null</jk> if it 
has no dictionary name defined.
         */
-       public final String getDictionaryName() { return dictionaryName; }
+       public final String getDictionaryName() { return dictionaryName2.get(); 
}
 
        /**
         * Returns the type property name for this bean.

Reply via email to