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 4b6259b  Context API refactoring.
4b6259b is described below

commit 4b6259bb7df52a44347b042eb68b0683660aa2fa
Author: JamesBognar <[email protected]>
AuthorDate: Sun Sep 26 11:51:02 2021 -0400

    Context API refactoring.
---
 .../main/java/org/apache/juneau/BeanContext.java   | 67 ++++++++--------------
 .../java/org/apache/juneau/BeanContextBuilder.java | 23 ++++----
 .../org/apache/juneau/BeanContextableBuilder.java  |  4 +-
 .../java/org/apache/juneau/BeanFilterBuilder.java  |  2 +-
 .../main/java/org/apache/juneau/BeanSession.java   |  2 +-
 .../java/org/apache/juneau/annotation/Bean.java    |  2 +-
 .../juneau/annotation/BeanConfigAnnotation.java    |  2 +-
 7 files changed, 43 insertions(+), 59 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 3d1336c..e7866bf 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
@@ -155,33 +155,9 @@ import org.apache.juneau.transform.*;
 @ConfigurableContext
 public class BeanContext extends Context {
 
-       static final String PREFIX = "BeanContext";
-
-       /**
-        * Configuration property:  Bean property namer.
-        *
-        * <p>
-        * The class to use for calculating bean property names..
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.BeanContext#BEAN_propertyNamer BEAN_propertyNamer}
-        *      <li><b>Name:</b>  <js>"BeanContext.propertyNamer.c"</js>
-        *      <li><b>Data type:</b>  <code>Class&lt;{@link 
org.apache.juneau.PropertyNamer}&gt;</code>
-        *      <li><b>Default:</b>  {@link 
org.apache.juneau.BasicPropertyNamer}
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.annotation.Bean#propertyNamer()}
-        *                      <li class='ja'>{@link 
org.apache.juneau.annotation.BeanConfig#propertyNamer()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.BeanContextBuilder#propertyNamer(Class)}
-        *              </ul>
-        * </ul>
-        */
-       public static final String BEAN_propertyNamer = PREFIX + 
".propertyNamer.c";
+       
//-----------------------------------------------------------------------------------------------------------------
+       // Static
+       
//-----------------------------------------------------------------------------------------------------------------
 
        /*
         * The default package pattern exclusion list.
@@ -222,6 +198,10 @@ public class BeanContext extends Context {
        /** Default reusable unmodifiable session.  Can be used to avoid 
overhead of creating a session (for creating BeanMaps for example).*/
        public  static final BeanSession DEFAULT_SESSION = new 
BeanSession(DEFAULT, DEFAULT.createDefaultBeanSessionArgs().unmodifiable());
 
+       
//-----------------------------------------------------------------------------------------------------------------
+       // Instance
+       
//-----------------------------------------------------------------------------------------------------------------
+
        final boolean
                beansRequireDefaultConstructor,
                beansRequireSerializable,
@@ -239,28 +219,26 @@ public class BeanContext extends Context {
                useEnumNames,
                sortProperties,
                findFluentSetters;
-
        final Visibility
                beanConstructorVisibility,
                beanClassVisibility,
                beanMethodVisibility,
                beanFieldVisibility;
-
-       final List<Class<?>> beanDictionary, swaps, notBeanClasses;
-       final List<String> notBeanPackages;
-       private final String[] notBeanPackageNames, notBeanPackagePrefixes;
-       private final BeanRegistry beanRegistry;
-       private final PropertyNamer propertyNamer;
        final String typePropertyName;
-
-       private final PojoSwap[] swapArray;
-       private final Class<?>[] notBeanClassesArray;
-
        final Locale locale;
        final TimeZone timeZone;
        final MediaType mediaType;
+       final Class<? extends PropertyNamer> propertyNamer;
+       final List<Class<?>> beanDictionary, swaps, notBeanClasses;
+       final List<String> notBeanPackages;
 
        final Map<Class,ClassMeta> cmCache;
+
+       private final String[] notBeanPackageNames, notBeanPackagePrefixes;
+       private final BeanRegistry beanRegistry;
+       private final PropertyNamer propertyNamerBean;
+       private final PojoSwap[] swapArray;
+       private final Class<?>[] notBeanClassesArray;
        private final ClassMeta<Object> cmObject;  // Reusable ClassMeta that 
represents general Objects.
        private final ClassMeta<String> cmString;  // Reusable ClassMeta that 
represents general Strings.
        private final ClassMeta<Class> cmClass;  // Reusable ClassMeta that 
represents general Classes.
@@ -309,8 +287,7 @@ public class BeanContext extends Context {
                swaps = 
ofNullable(builder.swaps).map(Collections::unmodifiableList).orElse(emptyList());
                notBeanClasses = 
ofNullable(builder.notBeanClasses).map(ArrayList::new).map(Collections::unmodifiableList).orElse(emptyList());
                notBeanPackages = 
ofNullable(builder.notBeanPackages).map(ArrayList::new).map(Collections::unmodifiableList).orElse(emptyList());
-
-               propertyNamer = cp.getInstance(BEAN_propertyNamer, 
PropertyNamer.class).orElseGet(BasicPropertyNamer::new);
+               propertyNamer = builder.propertyNamer != null ? 
builder.propertyNamer : BasicPropertyNamer.class;
 
                notBeanClassesArray = notBeanClasses.isEmpty() ? 
DEFAULT_NOTBEAN_CLASSES : Stream.of(notBeanClasses, 
asList(DEFAULT_NOTBEAN_CLASSES)).flatMap(Collection::stream).toArray(Class[]::new);
 
@@ -318,6 +295,12 @@ public class BeanContext extends Context {
                notBeanPackageNames = Stream.of(_notBeanPackages).filter(x -> ! 
x.endsWith(".*")).toArray(String[]::new);
                notBeanPackagePrefixes = Stream.of(_notBeanPackages).filter(x 
-> x.endsWith(".*")).map(x -> x.substring(0, 
x.length()-2)).toArray(String[]::new);
 
+               try {
+                       propertyNamerBean = propertyNamer.newInstance();
+               } catch (Exception e) {
+                       throw runtimeException(e);
+               }
+
                LinkedList<PojoSwap<?,?>> _swaps = new LinkedList<>();
                for (Object o : ofNullable(swaps).orElse(emptyList())) {
                        ClassInfo ci = ClassInfo.of((Class<?>)o);
@@ -1191,12 +1174,12 @@ public class BeanContext extends Context {
        /**
         * Bean property namer.
         *
-        * @see #BEAN_propertyNamer
+        * @see BeanContextBuilder#propertyNamer(Class)
         * @return
         *      The interface used to calculate bean property names.
         */
        public final PropertyNamer getPropertyNamer() {
-               return propertyNamer;
+               return propertyNamerBean;
        }
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
index ff63ea9..db0d4cc 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau;
 
-import static org.apache.juneau.BeanContext.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.Visibility.*;
 import static java.util.Arrays.*;
@@ -67,9 +66,6 @@ public class BeanContextBuilder extends ContextBuilder {
        
//-----------------------------------------------------------------------------------------------------------------
 
        Visibility beanClassVisibility, beanConstructorVisibility, 
beanMethodVisibility, beanFieldVisibility;
-       List<Class<?>> beanDictionary, swaps;
-       Set<Class<?>> notBeanClasses;
-       Set<String> notBeanPackages;
        boolean disableBeansRequireSomeProperties, beanMapPutReturnsOldValue, 
beansRequireDefaultConstructor, beansRequireSerializable,
                beansRequireSettersForGetters, disableIgnoreTransientFields, 
disableIgnoreUnknownNullBeanProperties, disableIgnoreMissingSetters,
                disableInterfaceProxies, findFluentSetters, 
ignoreInvocationExceptionsOnGetters, ignoreInvocationExceptionsOnSetters,
@@ -78,6 +74,10 @@ public class BeanContextBuilder extends ContextBuilder {
        MediaType mediaType;
        Locale locale;
        TimeZone timeZone;
+       Class<? extends PropertyNamer> propertyNamer;
+       List<Class<?>> beanDictionary, swaps;
+       Set<Class<?>> notBeanClasses;
+       Set<String> notBeanPackages;
 
        /**
         * Constructor.
@@ -114,6 +114,7 @@ public class BeanContextBuilder extends ContextBuilder {
                mediaType = env("BeanContext.mediaType", (MediaType)null);
                timeZone = env("BeanContext.timeZone", (TimeZone)null);
                locale = env("BeanContext.locale", Locale.getDefault());
+               propertyNamer = null;
        }
 
        /**
@@ -151,6 +152,7 @@ public class BeanContextBuilder extends ContextBuilder {
                mediaType = copyFrom.mediaType;
                timeZone = copyFrom.timeZone;
                locale = copyFrom.locale;
+               propertyNamer = copyFrom.propertyNamer;
        }
 
        /**
@@ -188,6 +190,7 @@ public class BeanContextBuilder extends ContextBuilder {
                mediaType = copyFrom.mediaType;
                timeZone = copyFrom.timeZone;
                locale = copyFrom.locale;
+               propertyNamer = copyFrom.propertyNamer;
        }
 
        @Override /* ContextBuilder */
@@ -230,7 +233,8 @@ public class BeanContextBuilder extends ContextBuilder {
                        typePropertyName,
                        mediaType,
                        timeZone,
-                       locale
+                       locale,
+                       propertyNamer
                );
                BeanContext bc = CACHE.get(key);
                if (bc == null) {
@@ -2584,10 +2588,6 @@ public class BeanContextBuilder extends ContextBuilder {
         *      String <jv>json</jv> = 
<jv>serializer</jv>.serialize(<jk>new</jk> MyBean());
         * </p>
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link BeanContext#BEAN_propertyNamer}
-        * </ul>
-        *
         * @param value
         *      The new value for this setting.
         *      <br>The default is {@link BasicPropertyNamer}.
@@ -2595,7 +2595,8 @@ public class BeanContextBuilder extends ContextBuilder {
         */
        @FluentSetter
        public BeanContextBuilder propertyNamer(Class<? extends PropertyNamer> 
value) {
-               return set(BEAN_propertyNamer, value);
+               propertyNamer = value;
+               return this;
        }
 
        /**
@@ -2624,7 +2625,7 @@ public class BeanContextBuilder extends ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link Bean#propertyNamer() Bean(propertyNamer)}
-        *      <li class='jf'>{@link BeanContext#BEAN_propertyNamer}
+        *      <li class='jm'>{@link BeanContextBuilder#propertyNamer(Class)}
         * </ul>
         *
         * @param on The class that the namer applies to.
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextableBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextableBuilder.java
index 928f069..7ce6dac 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextableBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextableBuilder.java
@@ -2300,7 +2300,7 @@ public abstract class BeanContextableBuilder extends 
ContextBuilder {
         * </p>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link BeanContext#BEAN_propertyNamer}
+        *      <li class='jm'>{@link BeanContextBuilder#propertyNamer(Class)}
         * </ul>
         *
         * @param value
@@ -2340,7 +2340,7 @@ public abstract class BeanContextableBuilder extends 
ContextBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link Bean#propertyNamer() Bean(propertyNamer)}
-        *      <li class='jf'>{@link BeanContext#BEAN_propertyNamer}
+        *      <li class='jm'>{@link BeanContextBuilder#propertyNamer(Class)}
         * </ul>
         *
         * @param on The class that the namer applies to.
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilterBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilterBuilder.java
index ff9c198..de169f0 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilterBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilterBuilder.java
@@ -391,7 +391,7 @@ public class BeanFilterBuilder {
         *
         * <ul class='seealso'>
         *      <li class='ja'>{@link Bean#propertyNamer()}
-        *      <li class='jf'>{@link BeanContext#BEAN_propertyNamer}
+        *      <li class='jm'>{@link BeanContextBuilder#propertyNamer(Class)}
         *      <li class='jc'>{@link PropertyNamer}
         * </ul>
         *
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 c2a1235..a62f027 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
@@ -1477,7 +1477,7 @@ public class BeanSession extends Session {
        /**
         * Configuration property:  Bean property namer.
         *
-        * @see BeanContext#BEAN_propertyNamer
+        * @see BeanContextBuilder#propertyNamer(Class)
         * @return
         *      The interface used to calculate bean property names.
         */
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Bean.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Bean.java
index 7a0309a..f2de4a2 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Bean.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Bean.java
@@ -320,7 +320,7 @@ public @interface Bean {
         * </p>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link BeanContext#BEAN_propertyNamer}
+        *      <li class='jm'>{@link BeanContextBuilder#propertyNamer(Class)}
         * </ul>
         */
        Class<? extends PropertyNamer> propertyNamer() default 
BasicPropertyNamer.class;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigAnnotation.java
index 1738db9..f6a6492 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigAnnotation.java
@@ -76,7 +76,7 @@ public class BeanConfigAnnotation {
                        classes(a.swaps_replace()).ifPresent(x -> { 
b.swaps().clear(); b.swaps(x);});
                        classes(a.notBeanClasses()).ifPresent(x -> 
b.notBeanClasses(x));
                        classes(a.notBeanClasses_replace()).ifPresent(x -> { 
b.notBeanClasses().clear(); b.notBeanClasses(x);});
-                       type(a.propertyNamer()).ifPresent(x -> 
b.set(BEAN_propertyNamer, x));
+                       type(a.propertyNamer()).ifPresent(x -> 
b.propertyNamer(x));
                        asList(a.interfaces()).stream().map(x -> 
BeanAnnotation.create(x).interfaceClass(x).build()).forEach(x -> 
b.annotations(x));
                        strings(a.notBeanPackages()).ifPresent(x -> 
b.notBeanPackages(x));
                        strings(a.notBeanPackages_replace()).ifPresent(x -> 
{b.notBeanPackages().clear(); b.notBeanPackages(x);});

Reply via email to