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.