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 0b31108bb3 Marshall module improvements
0b31108bb3 is described below
commit 0b31108bb39f6fb6b2769cb4c63e8f438b54177a
Author: James Bognar <[email protected]>
AuthorDate: Wed Dec 10 10:22:03 2025 -0500
Marshall module improvements
---
.../main/java/org/apache/juneau/BeanContext.java | 4 +-
.../src/main/java/org/apache/juneau/ClassMeta.java | 150 ++++++++++-----------
2 files changed, 72 insertions(+), 82 deletions(-)
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
index e5ec82be0b..39490a2d9a 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
@@ -4331,8 +4331,8 @@ public class BeanContext extends Context {
cm = new ClassMeta<>(type, this);
}
}
- if (waitForInit)
- cm.waitForInit();
+// if (waitForInit)
+// cm.waitForInit();
return cm;
}
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 6b38a47adf..097cfaad48 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
@@ -154,7 +154,6 @@ public class ClassMeta<T> extends ClassInfoTyped<T> {
private final OptionalSupplier<MethodInfo> fromStringMethod;
// Static fromString(String) or equivalent method
private final OptionalSupplier<ClassInfoTyped<? extends T>> implClass;
// The implementation class to use if this is an interface.
private final Supplier<KeyValueTypes> keyValueTypes;
// Key and value types for MAP types.
- private final SimpleReadWriteLock lock = new SimpleReadWriteLock(false);
private final OptionalSupplier<MarshalledFilter> marshalledFilter;
private final Supplier<Property<T,Object>> nameProperty;
// The method to set the name on an object (if it has one).
private final OptionalSupplier<ConstructorInfo> noArgConstructor;
// The no-arg constructor for this class (if it has one).
@@ -166,7 +165,7 @@ public class ClassMeta<T> extends ClassInfoTyped<T> {
private final Map<Class<?>,Mutater<T,?>> toMutaters = new
ConcurrentHashMap<>();
private final OptionalSupplier<BeanMeta.BeanMetaValue<T>> beanMeta;
- record KeyValueTypes(ClassMeta<?> keyType, ClassMeta<?> valueType) {
+ private record KeyValueTypes(ClassMeta<?> keyType, ClassMeta<?>
valueType) {
Optional<ClassMeta<?>> optKeyType() { return opt(keyType()); }
Optional<ClassMeta<?>> optValueType() { return
opt(valueType()); }
}
@@ -185,82 +184,80 @@ public class ClassMeta<T> extends ClassInfoTyped<T> {
this.beanContext = beanContext;
this.cat = new Categories();
- try (var lw = lock.write()) {
- // We always immediately add this class meta to the
bean context cache so that we can resolve recursive references.
- if (nn(beanContext) && nn(beanContext.cmCache) &&
isCacheable(innerClass))
- beanContext.cmCache.put(innerClass, this);
+ // We always immediately add this class meta to the bean
context cache so that we can resolve recursive references.
+ if (nn(beanContext) && nn(beanContext.cmCache) &&
isCacheable(innerClass))
+ beanContext.cmCache.put(innerClass, this);
- var ap = beanContext.getAnnotationProvider();
+ var ap = beanContext.getAnnotationProvider();
- if (isChildOf(Delegate.class)) {
- cat.set(DELEGATE);
+ if (isChildOf(Delegate.class)) {
+ cat.set(DELEGATE);
+ }
+ if (isEnum()) {
+ cat.set(ENUM);
+ } else if (isChildOf(CharSequence.class)) {
+ cat.set(CHARSEQ);
+ if (is(String.class)) {
+ cat.set(STR);
}
- if (isEnum()) {
- cat.set(ENUM);
- } else if (isChildOf(CharSequence.class)) {
- cat.set(CHARSEQ);
- if (is(String.class)) {
- cat.set(STR);
- }
- } else if (isChildOf(Number.class) || isAny(byte.class,
short.class, int.class, long.class, float.class, double.class)) {
- cat.set(NUMBER);
- if (isChildOfAny(Float.class, Double.class) ||
isAny(float.class, double.class)) {
- cat.set(DECIMAL);
- }
- } else if (isChildOf(Collection.class)) {
- cat.set(COLLECTION);
- if (isChildOf(Set.class)) {
- cat.set(SET);
- } else if (isChildOf(List.class)) {
- cat.set(LIST);
- }
- } else if (isChildOf(Map.class)) {
- cat.set(MAP);
- if (isChildOf(BeanMap.class)) {
- cat.set(BEANMAP);
- }
- } else if (isChildOfAny(Date.class, Calendar.class)) {
- if (isChildOf(Date.class)) {
- cat.set(DATE);
- } else if (isChildOf(Calendar.class)) {
- cat.set(CALENDAR);
- }
- } else if (isChildOf(Temporal.class)) {
- cat.set(TEMPORAL);
- } else if (inner().isArray()) {
- cat.set(ARRAY);
- } else if (isChildOfAny(URL.class, URI.class) ||
ap.has(Uri.class, this)) {
- cat.set(URI);
- } else if (isChildOf(Reader.class)) {
- cat.set(READER);
- } else if (isChildOf(InputStream.class)) {
- cat.set(INPUTSTREAM);
+ } else if (isChildOf(Number.class) || isAny(byte.class,
short.class, int.class, long.class, float.class, double.class)) {
+ cat.set(NUMBER);
+ if (isChildOfAny(Float.class, Double.class) ||
isAny(float.class, double.class)) {
+ cat.set(DECIMAL);
}
-
- beanMeta = memoize(()->findBeanMeta());
- builderSwap = memoize(()->findBuilderSwap());
- childSwapMap =
Cache.<Class<?>,ObjectSwap<?,?>>create().supplier(x -> findSwap(x)).build();
- childSwaps = memoize(()->findChildSwaps());
- childUnswapMap =
Cache.<Class<?>,ObjectSwap<?,?>>create().supplier(x -> findUnswap(x)).build();
- beanDictionaryName =
memoize(()->findBeanDictionaryName());
- elementType = memoize(()->findElementType());
- enumValues = memoize(()->findEnumValues());
- example = memoize(()->findExample());
- exampleField = memoize(()->findExampleField());
- exampleMethod = memoize(()->findExampleMethod());
- fromStringMethod = memoize(()->findFromStringMethod());
- implClass = memoize(()->findImplClass());
- keyValueTypes = memoize(()->findKeyValueTypes());
- marshalledFilter = memoize(()->findMarshalledFilter());
- nameProperty = memoize(()->findNameProperty());
- noArgConstructor = memoize(()->findNoArgConstructor());
- parentProperty = memoize(()->findParentProperty());
- stringConstructor =
memoize(()->findStringConstructor());
- swaps = memoize(()->findSwaps());
-
- this.args = null;
- this.stringMutater = Mutaters.get(String.class,
inner());
+ } else if (isChildOf(Collection.class)) {
+ cat.set(COLLECTION);
+ if (isChildOf(Set.class)) {
+ cat.set(SET);
+ } else if (isChildOf(List.class)) {
+ cat.set(LIST);
+ }
+ } else if (isChildOf(Map.class)) {
+ cat.set(MAP);
+ if (isChildOf(BeanMap.class)) {
+ cat.set(BEANMAP);
+ }
+ } else if (isChildOfAny(Date.class, Calendar.class)) {
+ if (isChildOf(Date.class)) {
+ cat.set(DATE);
+ } else if (isChildOf(Calendar.class)) {
+ cat.set(CALENDAR);
+ }
+ } else if (isChildOf(Temporal.class)) {
+ cat.set(TEMPORAL);
+ } else if (inner().isArray()) {
+ cat.set(ARRAY);
+ } else if (isChildOfAny(URL.class, URI.class) ||
ap.has(Uri.class, this)) {
+ cat.set(URI);
+ } else if (isChildOf(Reader.class)) {
+ cat.set(READER);
+ } else if (isChildOf(InputStream.class)) {
+ cat.set(INPUTSTREAM);
}
+
+ beanMeta = memoize(()->findBeanMeta());
+ builderSwap = memoize(()->findBuilderSwap());
+ childSwapMap =
Cache.<Class<?>,ObjectSwap<?,?>>create().supplier(x -> findSwap(x)).build();
+ childSwaps = memoize(()->findChildSwaps());
+ childUnswapMap =
Cache.<Class<?>,ObjectSwap<?,?>>create().supplier(x -> findUnswap(x)).build();
+ beanDictionaryName = memoize(()->findBeanDictionaryName());
+ elementType = memoize(()->findElementType());
+ enumValues = memoize(()->findEnumValues());
+ example = memoize(()->findExample());
+ exampleField = memoize(()->findExampleField());
+ exampleMethod = memoize(()->findExampleMethod());
+ fromStringMethod = memoize(()->findFromStringMethod());
+ implClass = memoize(()->findImplClass());
+ keyValueTypes = memoize(()->findKeyValueTypes());
+ marshalledFilter = memoize(()->findMarshalledFilter());
+ nameProperty = memoize(()->findNameProperty());
+ noArgConstructor = memoize(()->findNoArgConstructor());
+ parentProperty = memoize(()->findParentProperty());
+ stringConstructor = memoize(()->findStringConstructor());
+ swaps = memoize(()->findSwaps());
+
+ this.args = null;
+ this.stringMutater = Mutaters.get(String.class, inner());
}
protected ObjectSwap<?,?> findSwap(Class<?> c) {
@@ -1767,11 +1764,4 @@ public class ClassMeta<T> extends ClassInfoTyped<T> {
}
return sb.append(n);
}
-
- /**
- * Causes thread to wait until constructor has exited.
- */
- void waitForInit() {
- try (var x = lock.read()) {}
- }
}
\ No newline at end of file