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 619e29c  ClassInfo refactoring.
619e29c is described below

commit 619e29c79c0bab2c410cf5331840830a95dddfe7
Author: JamesBognar <[email protected]>
AuthorDate: Sat Jan 29 16:36:49 2022 -0500

    ClassInfo refactoring.
---
 .../src/main/java/org/apache/juneau/Context.java   |   4 +-
 .../apache/juneau/cp/BeanCreateMethodFinder.java   |   2 +-
 .../java/org/apache/juneau/cp/BeanCreator.java     |   4 +-
 .../main/java/org/apache/juneau/cp/BeanStore.java  |   2 +-
 .../org/apache/juneau/reflect/AnnotationInfo.java  |   2 +-
 .../java/org/apache/juneau/reflect/ClassInfo.java  | 105 ++++++++-------------
 .../java/org/apache/juneau/reflect/Mutaters.java   |   2 +-
 .../java/org/apache/juneau/swaps/TemporalSwap.java |   2 +-
 .../apache/juneau/rest/HttpRuntimeException.java   |   4 +-
 .../java/org/apache/juneau/rest/RestContext.java   |  18 ++--
 10 files changed, 60 insertions(+), 85 deletions(-)

diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
index a4b9310..1f6b98f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
@@ -95,7 +95,7 @@ public abstract class Context implements AnnotationProvider {
                try {
                        MethodInfo mi = BUILDER_CREATE_METHODS.get(type);
                        if (mi == null) {
-                               ClassInfo c = ClassInfo.ofc(type);
+                               ClassInfo c = ClassInfo.of(type);
                                for (ConstructorInfo ci : 
c.getPublicConstructors()) {
                                        if (ci.matches(x -> x.hasNumParams(1) 
&& ! x.getParam(0).getParameterType().is(type))) {
                                                mi = c.getPublicMethod(
@@ -194,7 +194,7 @@ public abstract class Context implements AnnotationProvider 
{
                private ConstructorInfo getContextConstructor() {
                        ConstructorInfo cci = CONTEXT_CONSTRUCTORS.get(type);
                        if (cci == null) {
-                               cci = ClassInfo.ofc(type).getPublicConstructor(
+                               cci = ClassInfo.of(type).getPublicConstructor(
                                        x -> x.hasNumParams(1)
                                        && x.getParam(0).canAccept(this)
                                );
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreateMethodFinder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreateMethodFinder.java
index 2370a0e..a375441 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreateMethodFinder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreateMethodFinder.java
@@ -140,7 +140,7 @@ public class BeanCreateMethodFinder<T> {
         */
        public BeanCreateMethodFinder<T> find(String methodName, 
Class<?>...requiredParams) {
                if (method == null) {
-                       method = ClassInfo.ofc(resourceClass).getPublicMethod(
+                       method = ClassInfo.of(resourceClass).getPublicMethod(
                                x -> x.isNotDeprecated()
                                && x.hasReturnType(beanType)
                                && x.hasName(methodName)
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreator.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreator.java
index f4a7292..cca79ac 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreator.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreator.java
@@ -124,7 +124,7 @@ public class BeanCreator<T> {
         * @param store The bean store creating this creator.
         */
        protected BeanCreator(Class<T> type, BeanStore store) {
-               this.type = ClassInfo.ofc(type);
+               this.type = ClassInfo.of(type);
                this.store = BeanStore.of(store, store.outer.orElse(null));
        }
 
@@ -137,7 +137,7 @@ public class BeanCreator<T> {
        public BeanCreator<T> type(Class<?> value) {
                if (value != null && ! type.inner().isAssignableFrom(value))
                        throw new ExecutableException("Could not instantiate 
class of type {0} because it was not a subtype of the class: {1}.", type, 
value);
-               type = ClassInfo.ofc(value);
+               type = ClassInfo.of(value);
                return this;
        }
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java
index 550ca09..2c37c42 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java
@@ -155,7 +155,7 @@ public class BeanStore {
                        if (type == null || type == BeanStore.class)
                                return new BeanStore(this);
 
-                       ClassInfo c = ClassInfo.ofc(type);
+                       ClassInfo c = ClassInfo.of(type);
 
                        MethodInfo m = c.getDeclaredMethod(
                                x -> x.isPublic()
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/AnnotationInfo.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/AnnotationInfo.java
index c5a6152..9f62d05 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/AnnotationInfo.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/AnnotationInfo.java
@@ -58,7 +58,7 @@ public class AnnotationInfo<T extends Annotation> {
        }
 
        private static int getRank(Object a) {
-               ClassInfo ci = ClassInfo.ofc(a);
+               ClassInfo ci = ClassInfo.of(a);
                MethodInfo mi = ci.getPublicMethod(x -> x.hasName("rank") && 
x.hasNoParams() && x.hasReturnType(int.class));
                if (mi != null) {
                        try {
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
index 7723f16..1c4a04f 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
@@ -59,38 +59,14 @@ import org.apache.juneau.internal.*;
  */
 public final class ClassInfo {
 
-       /** Reusable ClassInfo for Object class. */
-       public static final ClassInfo OBJECT = ClassInfo.of(Object.class);
-
-       private final Type t;
-       final Class<?> c;
-       private final boolean isParameterizedType;
-       private Boolean isRepeatedAnnotation;
-       private ClassInfo[] interfaces, declaredInterfaces, parents, allParents;
-       private MethodInfo[] publicMethods, declaredMethods, allMethods, 
allMethodsParentFirst;
-       private MethodInfo repeatedAnnotationMethod;
-       private ConstructorInfo[] publicConstructors, declaredConstructors;
-       private FieldInfo[] publicFields, declaredFields, allFields;
-       private int dim = -1;
-       private ClassInfo componentType;
-
-       private static final Map<Class<?>,ClassInfo> CACHE = new 
ConcurrentHashMap<>();
-
        
//-----------------------------------------------------------------------------------------------------------------
-       // Instantiation
+       // Static
        
//-----------------------------------------------------------------------------------------------------------------
 
-       /**
-        * Constructor.
-        *
-        * @param c The class type.
-        * @param t The generic type (if parameterized type).
-        */
-       protected ClassInfo(Class<?> c, Type t) {
-               this.t = t;
-               this.c = c;
-               this.isParameterizedType = t == null ? false : (t instanceof 
ParameterizedType);
-       }
+       private static final Map<Class<?>,ClassInfo> CACHE = new 
ConcurrentHashMap<>();
+
+       /** Reusable ClassInfo for Object class. */
+       public static final ClassInfo OBJECT = ClassInfo.of(Object.class);
 
        /**
         * Returns a class info wrapper around the specified class type.
@@ -101,6 +77,8 @@ public final class ClassInfo {
        public static ClassInfo of(Type t) {
                if (t == null)
                        return null;
+               if (t instanceof Class)
+                       return of((Class<?>)t);
                return new ClassInfo(ClassUtils.toClass(t), t);
        }
 
@@ -113,21 +91,9 @@ public final class ClassInfo {
        public static ClassInfo of(Class<?> c) {
                if (c == null)
                        return null;
-               return new ClassInfo(c, c);
-       }
-
-       /**
-        * Same as {@link #of(Class)}} but caches the result for faster future 
lookup.
-        *
-        * @param c The class type.
-        * @return The constructed class info, or <jk>null</jk> if the type was 
<jk>null</jk>.
-        */
-       public static ClassInfo ofc(Class<?> c) {
-               if (c == null)
-                       return null;
                ClassInfo ci = CACHE.get(c);
                if (ci == null) {
-                       ci = ClassInfo.of(c);
+                       ci = new ClassInfo(c, c);
                        CACHE.put(c, ci);
                }
                return ci;
@@ -151,9 +117,7 @@ public final class ClassInfo {
         * @return The constructed class info, or <jk>null</jk> if the object 
was <jk>null</jk>.
         */
        public static ClassInfo of(Object o) {
-               if (o == null)
-                       return null;
-               return new ClassInfo(o.getClass(), o.getClass());
+               return of(o == null ? null : o.getClass());
        }
 
        /**
@@ -170,24 +134,6 @@ public final class ClassInfo {
        }
 
        /**
-        * Same as {@link #of(Object)}} but caches the result for faster future 
lookup.
-        *
-        * @param o The class instance.
-        * @return The constructed class info, or <jk>null</jk> if the type was 
<jk>null</jk>.
-        */
-       public static ClassInfo ofc(Object o) {
-               if (o == null)
-                       return null;
-               Class<?> c = o.getClass();
-               ClassInfo ci = CACHE.get(c);
-               if (ci == null) {
-                       ci = ClassInfo.of(o);
-                       CACHE.put(c, ci);
-               }
-               return ci;
-       }
-
-       /**
         * When this metadata is against a CGLIB proxy, this method finds the 
underlying "real" class.
         *
         * @param o The class instance.
@@ -208,6 +154,35 @@ public final class ClassInfo {
                return null;
        }
 
+       
//-----------------------------------------------------------------------------------------------------------------
+       // Instance
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       private final Type t;
+       final Class<?> c;
+       private final boolean isParameterizedType;
+       private Boolean isRepeatedAnnotation;
+       private ClassInfo[] interfaces, declaredInterfaces, parents, allParents;
+       private MethodInfo[] publicMethods, declaredMethods, allMethods, 
allMethodsParentFirst;
+       private MethodInfo repeatedAnnotationMethod;
+       private ConstructorInfo[] publicConstructors, declaredConstructors;
+       private FieldInfo[] publicFields, declaredFields, allFields;
+       private int dim = -1;
+       private ClassInfo componentType;
+
+
+       /**
+        * Constructor.
+        *
+        * @param c The class type.
+        * @param t The generic type (if parameterized type).
+        */
+       protected ClassInfo(Class<?> c, Type t) {
+               this.t = t;
+               this.c = c;
+               this.isParameterizedType = t == null ? false : (t instanceof 
ParameterizedType);
+       }
+
        /**
         * Returns the wrapped class as a {@link Type}.
         *
@@ -275,7 +250,7 @@ public final class ClassInfo {
         *      The parent class, or <jk>null</jk> if the class has no parent.
         */
        public ClassInfo getParent() {
-               return c == null ? null : ofc(c.getSuperclass());
+               return c == null ? null : of(c.getSuperclass());
        }
 
        /**
@@ -1101,7 +1076,7 @@ public final class ClassInfo {
         */
        private static Annotation[] splitRepeated(Annotation a) {
                try {
-                       ClassInfo ci = ClassInfo.ofc(a.annotationType());
+                       ClassInfo ci = ClassInfo.of(a.annotationType());
                        MethodInfo mi = ci.getRepeatedAnnotationMethod();
                        if (mi != null)
                                return mi.invoke(a);
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/Mutaters.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/Mutaters.java
index 6939922..553f525 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/Mutaters.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/Mutaters.java
@@ -157,7 +157,7 @@ public class Mutaters {
 
                if (ic == String.class) {
                        Class<?> oc2 = oci.hasPrimitiveWrapper() ? 
oci.getPrimitiveWrapper() : oc;
-                       ClassInfo oc2i = ClassInfo.ofc(oc2);
+                       ClassInfo oc2i = ClassInfo.of(oc2);
 
                        final MethodInfo createMethod = oc2i.getPublicMethod(
                                x -> x.isStatic()
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/TemporalSwap.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/TemporalSwap.java
index c57588a..4eced12 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/TemporalSwap.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/TemporalSwap.java
@@ -334,7 +334,7 @@ public class TemporalSwap extends StringSwap<Temporal> {
        private static Method findParseMethod(Class<? extends Temporal> c) 
throws ExecutableException {
                Method m = FROM_METHODS.get(c);
                if (m == null) {
-                       MethodInfo mi = ClassInfo.ofc(c).getPublicMethod(
+                       MethodInfo mi = ClassInfo.of(c).getPublicMethod(
                                x -> x.isStatic()
                                && x.isNotDeprecated()
                                && x.hasName("from")
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/HttpRuntimeException.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/HttpRuntimeException.java
index 384e10a..b55ee9a 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/HttpRuntimeException.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/HttpRuntimeException.java
@@ -87,7 +87,7 @@ public final class HttpRuntimeException extends 
BasicRuntimeException {
                if (t instanceof ParseException)
                        throw new BadRequest(t);
 
-               ClassInfo ci = ClassInfo.ofc(t);
+               ClassInfo ci = ClassInfo.of(t);
 
                // If it's any RuntimeException annotated with @Response, it 
can be rethrown.
                if (ci.isRuntimeException()) {
@@ -103,7 +103,7 @@ public final class HttpRuntimeException extends 
BasicRuntimeException {
 
                if (ec == null)
                        ec = InternalServerError.class;
-               ClassInfo eci = ClassInfo.ofc(ec);
+               ClassInfo eci = ClassInfo.of(ec);
 
                try {
                        ConstructorInfo cci = eci.getPublicConstructor(x -> 
x.hasParamTypes(Throwable.class, String.class, Object[].class));
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index f536171..f7c5948 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -172,7 +172,7 @@ public class RestContext extends Context {
        public static Builder create(Class<?> resourceClass, RestContext 
parentContext, ServletConfig servletConfig) throws ServletException {
 
                Value<Class<? extends Builder>> v = Value.of(Builder.class);
-               ClassInfo.ofc(resourceClass).getAnnotations(Rest.class, x -> 
x.builder() != Builder.Null.class, x -> v.set(x.builder()));
+               ClassInfo.of(resourceClass).getAnnotations(Rest.class, x -> 
x.builder() != Builder.Null.class, x -> v.set(x.builder()));
 
                if (v.get() == Builder.class)
                        return new Builder(resourceClass, parentContext, 
servletConfig);
@@ -4185,7 +4185,7 @@ public class RestContext extends Context {
 
                                RestContext cc = cb.init(so).build();
 
-                               MethodInfo mi = 
ClassInfo.ofc(o).getPublicMethod(
+                               MethodInfo mi = ClassInfo.of(o).getPublicMethod(
                                        x -> x.hasName("setContext")
                                        && x.hasParamTypes(RestContext.class)
                                );
@@ -6856,21 +6856,21 @@ public class RestContext extends Context {
         */
        public Throwable convertThrowable(Throwable t, Class<?> 
defaultThrowable) {
 
-               ClassInfo ci = ClassInfo.ofc(t);
+               ClassInfo ci = ClassInfo.of(t);
 
                if (ci.is(InvocationTargetException.class)) {
                        t = ((InvocationTargetException)t).getTargetException();
-                       ci = ClassInfo.ofc(t);
+                       ci = ClassInfo.of(t);
                }
 
                if (ci.is(HttpRuntimeException.class)) {
                        t = ((HttpRuntimeException)t).getInner();
-                       ci = ClassInfo.ofc(t);
+                       ci = ClassInfo.of(t);
                }
 
                if (ci.is(ExecutableException.class)) {
                        t = ((ExecutableException)t).getTargetException();
-                       ci = ClassInfo.ofc(t);
+                       ci = ClassInfo.of(t);
                }
 
                if (ci.hasAnnotation(Response.class))
@@ -6890,7 +6890,7 @@ public class RestContext extends Context {
                if (defaultThrowable == null)
                        return new InternalServerError(t);
 
-               ClassInfo eci = ClassInfo.ofc(defaultThrowable);
+               ClassInfo eci = ClassInfo.of(defaultThrowable);
 
                try {
                        ConstructorInfo cci = eci.getPublicConstructor(x -> 
x.hasParamTypes(Throwable.class, String.class, Object[].class));
@@ -6952,7 +6952,7 @@ public class RestContext extends Context {
 
                int code = 500;
 
-               ClassInfo ci = ClassInfo.ofc(e);
+               ClassInfo ci = ClassInfo.of(e);
                StatusCode r = ci.getLastAnnotation(StatusCode.class);
                if (r != null)
                        if (r.value().length > 0)
@@ -7069,7 +7069,7 @@ public class RestContext extends Context {
                if (initialized.get())
                        return this;
                Object resource = getResource();
-               MethodInfo mi = ClassInfo.ofc(getResource()).getPublicMethod(
+               MethodInfo mi = ClassInfo.of(getResource()).getPublicMethod(
                        x -> x.hasName("setContext")
                        && x.hasParamTypes(RestContext.class)
                );

Reply via email to