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)
);