You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2019/09/06 16:32:57 UTC

[juneau] branch master updated: Remove unnecessary methods from ClassUtils.

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 872ba15  Remove unnecessary methods from ClassUtils.
872ba15 is described below

commit 872ba15031b97b0a5af7f4e09e058c5012fa0be8
Author: JamesBognar <ja...@apache.org>
AuthorDate: Fri Sep 6 12:32:41 2019 -0400

    Remove unnecessary methods from ClassUtils.
---
 .../src/test/java/org/apache/juneau/ValueTest.java |  5 +-
 .../juneau/httppart/HttpPartSchemaTest_Body.java   |  6 +-
 .../httppart/HttpPartSchemaTest_FormData.java      |  6 +-
 .../juneau/httppart/HttpPartSchemaTest_Header.java |  5 +-
 .../juneau/httppart/HttpPartSchemaTest_Path.java   |  5 +-
 .../juneau/httppart/HttpPartSchemaTest_Query.java  |  5 +-
 .../HttpPartSchemaTest_ResponseHeader.java         |  5 +-
 .../apache/juneau/reflection/MethodInfoTest.java   |  2 +-
 .../main/java/org/apache/juneau/BeanContext.java   | 14 ++--
 .../src/main/java/org/apache/juneau/BeanMeta.java  |  7 +-
 .../java/org/apache/juneau/BeanPropertyMeta.java   | 28 ++++----
 .../main/java/org/apache/juneau/BeanRegistry.java  |  2 +-
 .../src/main/java/org/apache/juneau/ClassMeta.java | 14 ++--
 .../main/java/org/apache/juneau/ContextCache.java  |  2 +-
 .../main/java/org/apache/juneau/PropertyStore.java |  7 +-
 .../src/main/java/org/apache/juneau/Session.java   |  3 +-
 .../src/main/java/org/apache/juneau/Value.java     |  6 +-
 .../juneau/httppart/HttpPartSchemaBuilder.java     |  5 +-
 .../juneau/httppart/bean/RequestBeanMeta.java      |  4 +-
 .../juneau/httppart/bean/ResponseBeanMeta.java     |  2 +-
 .../org/apache/juneau/internal/ArrayUtils.java     |  5 +-
 .../org/apache/juneau/internal/ClassUtils.java     | 78 ++--------------------
 .../java/org/apache/juneau/internal/HttpUtils.java |  4 +-
 .../java/org/apache/juneau/reflect/MethodInfo.java | 14 ++++
 .../java/org/apache/juneau/reflect/Mutaters.java   |  5 +-
 .../apache/juneau/remote/RemoteInterfaceMeta.java  |  4 +-
 .../juneau/serializer/SerializerSession.java       |  4 +-
 .../org/apache/juneau/svl/VarResolverContext.java  |  2 +-
 .../apache/juneau/transform/BeanFilterBuilder.java |  5 +-
 .../org/apache/juneau/transform/BuilderSwap.java   | 13 ++--
 .../transform/InterfaceBeanFilterBuilder.java      |  5 +-
 .../java/org/apache/juneau/transform/PojoSwap.java | 12 ++--
 .../org/apache/juneau/transform/SurrogateSwap.java |  4 +-
 .../java/org/apache/juneau/utils/MetadataMap.java  |  5 +-
 .../microservice/jetty/JettyMicroservice.java      |  6 +-
 .../juneau/rest/client/RestCallException.java      |  5 +-
 .../org/apache/juneau/rest/client/RestClient.java  |  5 +-
 .../rest/client/remote/RemoteMethodMeta.java       |  3 +-
 .../rest/client/remote/RemoteResourceMeta.java     |  4 +-
 .../apache/juneau/rest/BasicRestInfoProvider.java  |  9 ++-
 .../java/org/apache/juneau/rest/RestContext.java   |  3 +-
 .../org/apache/juneau/rest/RestContextBuilder.java |  5 +-
 .../juneau/rest/RestMethodContextBuilder.java      |  4 +-
 .../java/org/apache/juneau/rest/RestServlet.java   |  3 +-
 .../org/apache/juneau/rest/SwaggerGenerator.java   |  5 +-
 45 files changed, 129 insertions(+), 216 deletions(-)

diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/ValueTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/ValueTest.java
index 988742b..7c21027 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/ValueTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/ValueTest.java
@@ -13,11 +13,10 @@
 package org.apache.juneau;
 
 import static org.junit.Assert.*;
-import static org.apache.juneau.internal.ClassUtils.*;
-
 import java.lang.reflect.*;
 import java.util.*;
 
+import org.apache.juneau.reflect.*;
 import org.junit.*;
 
 /**
@@ -60,6 +59,6 @@ public class ValueTest {
 	@Test
 	public void testOnParameterType() throws Exception {
 		Type t = Value.getParameterType(C.class.getMethod("m1", Value.class), 0);
-		assertEquals("List<Integer>", getClassInfo(t).getShortName());
+		assertEquals("List<Integer>", ClassInfo.of(t).getShortName());
 	}
 }
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Body.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Body.java
index 223daed..9aa6d4a 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Body.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Body.java
@@ -16,8 +16,6 @@ import static org.junit.Assert.*;
 
 import static org.apache.juneau.testutils.TestUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static org.apache.juneau.internal.ClassUtils.*;
-
 import org.apache.juneau.*;
 import org.apache.juneau.http.annotation.*;
 import org.apache.juneau.jsonschema.annotation.Items;
@@ -74,7 +72,7 @@ public class HttpPartSchemaTest_Body {
 
 	@Test
 	public void a03_basic_onParameter() throws Exception {
-		ParamInfo mpi = getMethodInfo(A03.class.getMethod("a", String.class)).getParam(0);
+		ParamInfo mpi = MethodInfo.of(A03.class.getMethod("a", String.class)).getParam(0);
 		HttpPartSchema s = HttpPartSchema.create().apply(Body.class, mpi).noValidate().build();
 		assertTrue(s.isRequired());
 	}
@@ -95,7 +93,7 @@ public class HttpPartSchemaTest_Body {
 
 	@Test
 	public void a04_basic_onParameterAndClass() throws Exception {
-		ParamInfo mpi = getMethodInfo(A04.class.getMethod("a", A02.class)).getParam(0);
+		ParamInfo mpi = MethodInfo.of(A04.class.getMethod("a", A02.class)).getParam(0);
 		HttpPartSchema s = HttpPartSchema.create().apply(Body.class, mpi).noValidate().build();
 		assertTrue(s.isRequired());
 	}
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_FormData.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_FormData.java
index 6c0c14a..853864c 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_FormData.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_FormData.java
@@ -16,8 +16,6 @@ import static org.junit.Assert.*;
 
 import static org.apache.juneau.testutils.TestUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static org.apache.juneau.internal.ClassUtils.*;
-
 import org.apache.juneau.*;
 import org.apache.juneau.http.annotation.*;
 import org.apache.juneau.jsonschema.annotation.Items;
@@ -136,7 +134,7 @@ public class HttpPartSchemaTest_FormData {
 
 	@Test
 	public void a03_basic_onParameter() throws Exception {
-		ParamInfo mpi = getMethodInfo(A03.class.getMethod("a", String.class)).getParam(0);
+		ParamInfo mpi = MethodInfo.of(A03.class.getMethod("a", String.class)).getParam(0);
 		HttpPartSchema s = HttpPartSchema.create().apply(FormData.class, mpi).noValidate().build();
 		assertEquals("x", s.getName());
 		assertEquals(HttpPartSchema.Type.NUMBER, s.getType());
@@ -193,7 +191,7 @@ public class HttpPartSchemaTest_FormData {
 
 	@Test
 	public void a04_basic_onParameterAndClass() throws Exception {
-		ParamInfo mpi = getMethodInfo(A04.class.getMethod("a", A01.class)).getParam(0);
+		ParamInfo mpi = MethodInfo.of(A04.class.getMethod("a", A01.class)).getParam(0);
 		HttpPartSchema s = HttpPartSchema.create().apply(FormData.class, mpi).noValidate().build();
 		assertEquals("y", s.getName());
 		assertEquals(HttpPartSchema.Type.INTEGER, s.getType());
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Header.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Header.java
index a8a40d9..0a04701 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Header.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Header.java
@@ -15,7 +15,6 @@ package org.apache.juneau.httppart;
 import static org.junit.Assert.*;
 import static org.junit.Assert.assertEquals;
 import static org.apache.juneau.testutils.TestUtils.*;
-import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import org.apache.juneau.*;
@@ -136,7 +135,7 @@ public class HttpPartSchemaTest_Header {
 
 	@Test
 	public void a03_basic_onParameter() throws Exception {
-		ParamInfo mpi = getMethodInfo(A03.class.getMethod("a", String.class)).getParam(0);
+		ParamInfo mpi = MethodInfo.of(A03.class.getMethod("a", String.class)).getParam(0);
 		HttpPartSchema s = HttpPartSchema.create().apply(Header.class, mpi).noValidate().build();
 		assertEquals("x", s.getName());
 		assertEquals(HttpPartSchema.Type.NUMBER, s.getType());
@@ -193,7 +192,7 @@ public class HttpPartSchemaTest_Header {
 
 	@Test
 	public void a04_basic_onParameterAndClass() throws Exception {
-		ParamInfo mpi = getMethodInfo(A04.class.getMethod("a", A01.class)).getParam(0);
+		ParamInfo mpi = MethodInfo.of(A04.class.getMethod("a", A01.class)).getParam(0);
 		HttpPartSchema s = HttpPartSchema.create().apply(Header.class, mpi).noValidate().build();
 		assertEquals("y", s.getName());
 		assertEquals(HttpPartSchema.Type.INTEGER, s.getType());
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Path.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Path.java
index 67fc14a..04baf09 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Path.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Path.java
@@ -15,7 +15,6 @@ package org.apache.juneau.httppart;
 import static org.junit.Assert.*;
 import static org.junit.Assert.assertEquals;
 import static org.apache.juneau.testutils.TestUtils.*;
-import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import org.apache.juneau.*;
@@ -118,7 +117,7 @@ public class HttpPartSchemaTest_Path {
 
 	@Test
 	public void a03_basic_onParameter() throws Exception {
-		ParamInfo mpi = getMethodInfo(A03.class.getMethod("a", String.class)).getParam(0);
+		ParamInfo mpi = MethodInfo.of(A03.class.getMethod("a", String.class)).getParam(0);
 		HttpPartSchema s = HttpPartSchema.create().apply(Path.class, mpi).noValidate().build();
 		assertEquals("x", s.getName());
 		assertEquals(HttpPartSchema.Type.NUMBER, s.getType());
@@ -163,7 +162,7 @@ public class HttpPartSchemaTest_Path {
 
 	@Test
 	public void a04_basic_onParameterAndClass() throws Exception {
-		ParamInfo mpi = getMethodInfo(A04.class.getMethod("a", A01.class)).getParam(0);
+		ParamInfo mpi = MethodInfo.of(A04.class.getMethod("a", A01.class)).getParam(0);
 		HttpPartSchema s = HttpPartSchema.create().apply(Path.class, mpi).noValidate().build();
 		assertEquals("y", s.getName());
 		assertEquals(HttpPartSchema.Type.INTEGER, s.getType());
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Query.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Query.java
index 8c5e750..a7a0d75 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Query.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_Query.java
@@ -15,7 +15,6 @@ package org.apache.juneau.httppart;
 import static org.junit.Assert.*;
 import static org.junit.Assert.assertEquals;
 import static org.apache.juneau.testutils.TestUtils.*;
-import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import org.apache.juneau.*;
@@ -136,7 +135,7 @@ public class HttpPartSchemaTest_Query {
 
 	@Test
 	public void a03_basic_onParameter() throws Exception {
-		ParamInfo mpi = getMethodInfo(A03.class.getMethod("a", String.class)).getParam(0);
+		ParamInfo mpi = MethodInfo.of(A03.class.getMethod("a", String.class)).getParam(0);
 		HttpPartSchema s = HttpPartSchema.create().apply(Query.class, mpi).noValidate().build();
 		assertEquals("x", s.getName());
 		assertEquals(HttpPartSchema.Type.NUMBER, s.getType());
@@ -193,7 +192,7 @@ public class HttpPartSchemaTest_Query {
 
 	@Test
 	public void a04_basic_onParameterAndClass() throws Exception {
-		ParamInfo mpi = getMethodInfo(A04.class.getMethod("a", A01.class)).getParam(0);
+		ParamInfo mpi = MethodInfo.of(A04.class.getMethod("a", A01.class)).getParam(0);
 		HttpPartSchema s = HttpPartSchema.create().apply(Query.class, mpi).noValidate().build();
 		assertEquals("y", s.getName());
 		assertEquals(HttpPartSchema.Type.INTEGER, s.getType());
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_ResponseHeader.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_ResponseHeader.java
index 4c6c1bc..6095cc4 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_ResponseHeader.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/HttpPartSchemaTest_ResponseHeader.java
@@ -12,7 +12,6 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.httppart;
 
-import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.testutils.TestUtils.*;
 import static org.junit.Assert.*;
@@ -130,7 +129,7 @@ public class HttpPartSchemaTest_ResponseHeader {
 
 	@Test
 	public void a03_basic_onParameter() throws Exception {
-		ParamInfo mpi = getMethodInfo(A03.class.getMethod("a", String.class)).getParam(0);
+		ParamInfo mpi = MethodInfo.of(A03.class.getMethod("a", String.class)).getParam(0);
 		HttpPartSchema s = HttpPartSchema.create().apply(ResponseHeader.class, mpi).noValidate().build();
 		assertEquals("x", s.getName());
 		assertEquals(HttpPartSchema.Type.NUMBER, s.getType());
@@ -183,7 +182,7 @@ public class HttpPartSchemaTest_ResponseHeader {
 
 	@Test
 	public void a04_basic_onParameterAndClass() throws Exception {
-		ParamInfo mpi = getMethodInfo(A04.class.getMethod("a", A01.class)).getParam(0);
+		ParamInfo mpi = MethodInfo.of(A04.class.getMethod("a", A01.class)).getParam(0);
 		HttpPartSchema s = HttpPartSchema.create().apply(ResponseHeader.class, mpi).noValidate().build();
 		assertEquals("y", s.getName());
 		assertEquals(HttpPartSchema.Type.INTEGER, s.getType());
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/reflection/MethodInfoTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/reflection/MethodInfoTest.java
index c37097c..7341438 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/reflection/MethodInfoTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/reflection/MethodInfoTest.java
@@ -132,7 +132,7 @@ public class MethodInfoTest {
 	@Test
 	public void of_null() {
 		check(null, MethodInfo.of(null));
-		check(null, MethodInfo.of(null, null, null));
+		check(null, MethodInfo.of((ClassInfo)null, null, null));
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
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 8899cad..641d820 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
@@ -2010,7 +2010,7 @@ public class BeanContext extends Context {
 
 		LinkedList<BeanFilter> lbf = new LinkedList<>();
 		for (Class<?> c : getClassListProperty(BEAN_beanFilters)) {
-			ClassInfo ci = getClassInfo(c);
+			ClassInfo ci = ClassInfo.of(c);
 			if (ci.isChildOf(BeanFilter.class))
 				lbf.add(castOrCreate(BeanFilter.class, c));
 			else if (ci.isChildOf(BeanFilterBuilder.class))
@@ -2023,7 +2023,7 @@ public class BeanContext extends Context {
 		LinkedList<PojoSwap<?,?>> lpf = new LinkedList<>();
 		for (Object o : getListProperty(BEAN_pojoSwaps, Object.class)) {
 			if (o instanceof Class) {
-				ClassInfo ci = getClassInfo((Class<?>)o);
+				ClassInfo ci = ClassInfo.of((Class<?>)o);
 				if (ci.isChildOf(PojoSwap.class))
 					lpf.add(castOrCreate(PojoSwap.class, ci.inner()));
 				else if (ci.isChildOf(Surrogate.class))
@@ -2040,7 +2040,7 @@ public class BeanContext extends Context {
 
 		Map<String,ClassInfo> icm = new LinkedHashMap<>();
 		for (Map.Entry<String,Class<?>> e : getClassMapProperty(BEAN_implClasses).entrySet())
-			icm.put(e.getKey(), getClassInfo(e.getValue()));
+			icm.put(e.getKey(), ClassInfo.of(e.getValue()));
 		implClasses = unmodifiableMap(icm);
 
 		Map<String,String[]> m2 = new HashMap<>();
@@ -2192,7 +2192,7 @@ public class BeanContext extends Context {
 				if (p.getName().startsWith(p2))
 					return true;
 		}
-		ClassInfo ci = getClassInfo(c);
+		ClassInfo ci = ClassInfo.of(c);
 		for (Class exclude : notBeanClasses)
 			if (ci.isChildOf(exclude))
 				return true;
@@ -2657,7 +2657,7 @@ public class BeanContext extends Context {
 	private final <T> BeanFilter findBeanFilter(Class<T> c) {
 		if (c != null)
 			for (BeanFilter f : beanFilters)
-				if (getClassInfo(f.getBeanClass()).isParentOf(c))
+				if (ClassInfo.of(f.getBeanClass()).isParentOf(c))
 					return f;
 		return null;
 	}
@@ -2716,7 +2716,7 @@ public class BeanContext extends Context {
 		if (includeProperties.isEmpty())
 			return null;
 		String[] s = null;
-		ClassInfo ci = getClassInfo(c);
+		ClassInfo ci = ClassInfo.of(c);
 		for (ClassInfo c2 : ci.getAllParents()) {
 			s = includeProperties.get(c2.getFullName());
 			if (s != null)
@@ -2738,7 +2738,7 @@ public class BeanContext extends Context {
 		if (excludeProperties.isEmpty())
 			return null;
 		String[] s = null;
-		ClassInfo ci = getClassInfo(c);
+		ClassInfo ci = ClassInfo.of(c);
 		for (ClassInfo c2 : ci.getAllParents()) {
 			s = excludeProperties.get(c2.getFullName());
 			if (s != null)
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 341328c..12b42b8 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
@@ -12,7 +12,6 @@
 // ***************************************************************************************************************************
 package org.apache.juneau;
 
-import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.reflect.ReflectFlags.*;
@@ -554,9 +553,9 @@ public class BeanMeta<T> {
 			this.methodType = type;
 			this.method = method;
 			if (type == MethodType.SETTER)
-				this.type = getClassInfo(method.getParameterTypes()[0]);
+				this.type = ClassInfo.of(method.getParameterTypes()[0]);
 			else
-				this.type = getClassInfo(method.getReturnType());
+				this.type = ClassInfo.of(method.getReturnType());
 		}
 
 		/*
@@ -767,7 +766,7 @@ public class BeanMeta<T> {
 
 	private static void findClasses(Class<?> c, LinkedList<ClassInfo> l, Class<?> stopClass) {
 		while (c != null && stopClass != c) {
-			l.addFirst(getClassInfo(c));
+			l.addFirst(ClassInfo.of(c));
 			for (Class<?> ci : c.getInterfaces())
 				findClasses(ci, l, stopClass);
 			c = c.getSuperclass();
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
index e8b366b..99cfd3d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
@@ -196,7 +196,7 @@ public final class BeanPropertyMeta {
 			}
 
 			if (getter != null) {
-				BeanProperty p = getMethodInfo(getter).getAnnotation(BeanProperty.class);
+				BeanProperty p = MethodInfo.of(getter).getAnnotation(BeanProperty.class);
 				if (rawTypeMeta == null)
 					rawTypeMeta = f.resolveClassMeta(p, getter.getGenericReturnType(), typeVarImpls);
 				isUri |= (rawTypeMeta.isUri() || getter.isAnnotationPresent(org.apache.juneau.annotation.URI.class));
@@ -212,7 +212,7 @@ public final class BeanPropertyMeta {
 			}
 
 			if (setter != null) {
-				BeanProperty p = getMethodInfo(setter).getAnnotation(BeanProperty.class);
+				BeanProperty p = MethodInfo.of(setter).getAnnotation(BeanProperty.class);
 				if (rawTypeMeta == null)
 					rawTypeMeta = f.resolveClassMeta(p, setter.getGenericParameterTypes()[0], typeVarImpls);
 				isUri |= (rawTypeMeta.isUri() || setter.isAnnotationPresent(org.apache.juneau.annotation.URI.class));
@@ -270,7 +270,7 @@ public final class BeanPropertyMeta {
 			}
 			if (field != null) {
 				if (isDyna) {
-					if (! getClassInfo(field.getType()).isChildOf(Map.class))
+					if (! ClassInfo.of(field.getType()).isChildOf(Map.class))
 						return false;
 				} else {
 					if (! ci.isChildOf(field.getType()))
@@ -313,7 +313,7 @@ public final class BeanPropertyMeta {
 				c = s.impl();
 			if (c == Null.class)
 				return null;
-			ClassInfo ci = getClassInfo(c);
+			ClassInfo ci = ClassInfo.of(c);
 			if (ci.isChildOf(PojoSwap.class)) {
 				PojoSwap ps = castOrCreate(PojoSwap.class, c);
 				if (ps.forMediaTypes() != null)
@@ -373,11 +373,11 @@ public final class BeanPropertyMeta {
 		this.field = b.field;
 		this.innerField = b.innerField;
 		this.getter = b.getter;
-		this.getterInfo = getMethodInfo(b.getter);
+		this.getterInfo = MethodInfo.of(b.getter);
 		this.setter = b.setter;
-		this.setterInfo = getMethodInfo(b.setter);
+		this.setterInfo = MethodInfo.of(b.setter);
 		this.extraKeys = b.extraKeys;
-		this.extraKeysInfo = getMethodInfo(b.extraKeys);
+		this.extraKeysInfo = MethodInfo.of(b.extraKeys);
 		this.isUri = b.isUri;
 		this.beanMeta = b.beanMeta;
 		this.beanContext = b.beanContext;
@@ -1067,19 +1067,19 @@ public final class BeanPropertyMeta {
 		List<A> l = new LinkedList<>();
 		if (field != null) {
 			addIfNotNull(l, field.getAnnotation(a));
-			getClassInfo(field.getType()).appendAnnotations(l, a);
+			ClassInfo.of(field.getType()).appendAnnotations(l, a);
 		}
 		if (getter != null) {
-			addIfNotNull(l, getMethodInfo(getter).getAnnotation(a));
-			getClassInfo(getter.getReturnType()).appendAnnotations(l, a);
+			addIfNotNull(l, MethodInfo.of(getter).getAnnotation(a));
+			ClassInfo.of(getter.getReturnType()).appendAnnotations(l, a);
 		}
 		if (setter != null) {
-			addIfNotNull(l, getMethodInfo(setter).getAnnotation(a));
-			getClassInfo(setter.getReturnType()).appendAnnotations(l, a);
+			addIfNotNull(l, MethodInfo.of(setter).getAnnotation(a));
+			ClassInfo.of(setter.getReturnType()).appendAnnotations(l, a);
 		}
 		if (extraKeys != null) {
-			addIfNotNull(l, getMethodInfo(extraKeys).getAnnotation(a));
-			getClassInfo(extraKeys.getReturnType()).appendAnnotations(l, a);
+			addIfNotNull(l, MethodInfo.of(extraKeys).getAnnotation(a));
+			ClassInfo.of(extraKeys.getReturnType()).appendAnnotations(l, a);
 		}
 
 		getBeanMeta().getClassMeta().getInfo().appendAnnotations(l, a);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java
index bd161af..37cb982 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java
@@ -64,7 +64,7 @@ public class BeanRegistry {
 	private void addClass(Class<?> c) {
 		try {
 			if (c != null) {
-				ClassInfo ci = getClassInfo(c);
+				ClassInfo ci = ClassInfo.of(c);
 				if (ci.isChildOf(Collection.class)) {
 					@SuppressWarnings("rawtypes")
 					Collection cc = castOrCreate(Collection.class, c);
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 f893ac8..c242b78 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
@@ -141,7 +141,7 @@ public final class ClassMeta<T> implements Type {
 	@SuppressWarnings({ "rawtypes", "unchecked" })
 	ClassMeta(Class<T> innerClass, BeanContext beanContext, Class<? extends T> implClass, BeanFilter beanFilter, PojoSwap<T,?>[] pojoSwaps, PojoSwap<?,?>[] childPojoSwaps, Object example) {
 		this.innerClass = innerClass;
-		this.info = getClassInfo(innerClass);
+		this.info = ClassInfo.of(innerClass);
 		this.beanContext = beanContext;
 		this.extMeta = new MetadataMap();
 		String notABeanReason = null;
@@ -256,7 +256,7 @@ public final class ClassMeta<T> implements Type {
 	@SuppressWarnings("unchecked")
 	ClassMeta(ClassMeta<?>[] args) {
 		this.innerClass = (Class<T>) Object[].class;
-		this.info = getClassInfo(innerClass);
+		this.info = ClassInfo.of(innerClass);
 		this.extMeta = new MetadataMap();
 		this.args = args;
 		this.implClass = null;
@@ -344,7 +344,7 @@ public final class ClassMeta<T> implements Type {
 			this.beanContext = beanContext;
 
 			this.implClass = implClass;
-			ClassInfo ici = getClassInfo(implClass);
+			ClassInfo ici = ClassInfo.of(implClass);
 			this.childPojoSwaps = childPojoSwaps;
 			if (childPojoSwaps == null) {
 				this.childSwapMap = null;
@@ -355,7 +355,7 @@ public final class ClassMeta<T> implements Type {
 			}
 
 			Class<T> c = innerClass;
-			ci = getClassInfo(c);
+			ci = ClassInfo.of(c);
 
 			if (c.isPrimitive()) {
 				if (c == Boolean.TYPE)
@@ -704,7 +704,7 @@ public final class ClassMeta<T> implements Type {
 			Class<?> c = s.value();
 			if (c == Null.class)
 				c = s.impl();
-			ClassInfo ci = getClassInfo(c);
+			ClassInfo ci = ClassInfo.of(c);
 
 			if (ci.isChildOf(PojoSwap.class)) {
 				PojoSwap ps = castOrCreate(PojoSwap.class, c);
@@ -894,7 +894,7 @@ public final class ClassMeta<T> implements Type {
 	 */
 	@SuppressWarnings({"unchecked"})
 	protected static <T> Constructor<? extends T> findNoArgConstructor(Class<?> c, Visibility v) {
-		ClassInfo ci = getClassInfo(c);
+		ClassInfo ci = ClassInfo.of(c);
 		if (ci.isAbstract())
 			return null;
 		boolean isMemberClass = ci.isMemberClass() && ci.isNotStatic();
@@ -960,7 +960,7 @@ public final class ClassMeta<T> implements Type {
 				}
 			}
 			if (exampleMethod != null)
-				return (T)getMethodInfo(exampleMethod).invokeFuzzy(null, session);
+				return (T)MethodInfo.of(exampleMethod).invokeFuzzy(null, session);
 			if (exampleField != null)
 				return (T)exampleField.get(null);
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextCache.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextCache.java
index 31ab308..e7455cb 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextCache.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextCache.java
@@ -146,7 +146,7 @@ public class ContextCache {
 		String[] prefixes = prefixCache.get(c);
 		if (prefixes == null) {
 			Set<String> ps = new HashSet<>();
-			for (ClassInfo c2 : getClassInfo(c).getAllParents()) {
+			for (ClassInfo c2 : ClassInfo.of(c).getAllParents()) {
 				ConfigurableContext cc = c2.getAnnotation(ConfigurableContext.class);
 				if (cc != null) {
 					if (cc.nocache()) {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyStore.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyStore.java
index e3c745b..d0f31c4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyStore.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyStore.java
@@ -22,6 +22,7 @@ import java.util.*;
 import org.apache.juneau.PropertyStoreBuilder.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.json.*;
+import org.apache.juneau.reflect.*;
 
 
 /**
@@ -778,7 +779,7 @@ public final class PropertyStore {
 		 * @throws ConfigException If value could not be converted.
 		 */
 		public <T> T as(Class<T> c) {
-			Class<?> c2 = getClassInfo(c).getPrimitiveWrapper();
+			Class<?> c2 = ClassInfo.of(c).getPrimitiveWrapper();
 			if (c2 != null)
 				c = (Class<T>)c2;
 			if (c.isInstance(value))
@@ -987,9 +988,9 @@ public final class PropertyStore {
 	//-------------------------------------------------------------------------------------------------------------------
 
 	static <T> T instantiate(ResourceResolver resolver, Object outer, Class<T> c, Object value, Object...args) {
-		if (getClassInfo(c).isParentOf(value.getClass()))
+		if (ClassInfo.of(c).isParentOf(value.getClass()))
 			return (T)value;
-		if (getClassInfo(value.getClass()).isChildOf(Class.class))
+		if (ClassInfo.of(value.getClass()).isChildOf(Class.class))
 			return resolver.resolve(outer, (Class<T>)value, args);
 		return null;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Session.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Session.java
index a63bb53..9dc18ac 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Session.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Session.java
@@ -21,6 +21,7 @@ import java.util.*;
 
 import org.apache.juneau.internal.*;
 import org.apache.juneau.json.*;
+import org.apache.juneau.reflect.*;
 
 /**
  * A one-time-use non-thread-safe object that's meant to be used once and then thrown away.
@@ -88,7 +89,7 @@ public abstract class Session {
 		Object o = properties.get(key);
 		if (o == null)
 			return def;
-		type = (Class<T>)getClassInfo(type).getWrapperIfPrimitive();
+		type = (Class<T>)ClassInfo.of(type).getWrapperIfPrimitive();
 		T t = properties.get(key, type);
 		return t == null ? def : t;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Value.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Value.java
index 2e8b43b..37f3b2a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Value.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Value.java
@@ -12,10 +12,10 @@
 // ***************************************************************************************************************************
 package org.apache.juneau;
 
-import static org.apache.juneau.internal.ClassUtils.*;
-
 import java.lang.reflect.*;
 
+import org.apache.juneau.reflect.*;
+
 /**
  * Represents a simple settable value.
  *
@@ -65,7 +65,7 @@ public class Value<T> {
 		} else if (t instanceof Class) {
 			Class<?> c = (Class<?>)t;
 			if (Value.class.isAssignableFrom(c)) {
-				return getClassInfo(c).getParameterType(0, Value.class);
+				return ClassInfo.of(c).getParameterType(0, Value.class);
 			}
 		}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchemaBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchemaBuilder.java
index 013b4a5..dac8c66 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchemaBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchemaBuilder.java
@@ -13,8 +13,6 @@
 package org.apache.juneau.httppart;
 
 import static org.apache.juneau.internal.StringUtils.*;
-import static org.apache.juneau.internal.ClassUtils.*;
-
 import java.lang.annotation.*;
 import java.lang.reflect.*;
 import java.util.*;
@@ -83,8 +81,7 @@ public class HttpPartSchemaBuilder {
 
 	HttpPartSchemaBuilder apply(Class<? extends Annotation> c, java.lang.reflect.Type t) {
 		if (t instanceof Class<?>) {
-			Class<?> tc = (Class<?>)t;
-			ClassInfo ci = getClassInfo(tc);
+			ClassInfo ci = ClassInfo.of((Class<?>)t);
 			for (Annotation a : ci.getAnnotationsParentFirst(c))
 				apply(a);
 		} else if (Value.isType(t)) {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanMeta.java
index 2318c7f..c4426ee 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanMeta.java
@@ -54,7 +54,7 @@ public class RequestBeanMeta {
 	 * @return Metadata about the class, or <jk>null</jk> if class not annotated with {@link Request}.
 	 */
 	public static RequestBeanMeta create(Class<?> c, PropertyStore ps) {
-		ClassInfo ci = getClassInfo(c);
+		ClassInfo ci = ClassInfo.of(c);
 		if (! ci.hasAnnotation(Request.class))
 			return null;
 		return new RequestBeanMeta.Builder(ps).apply(c).build();
@@ -95,7 +95,7 @@ public class RequestBeanMeta {
 		}
 
 		Builder apply(Class<?> c) {
-			ClassInfo ci = getClassInfo(c);
+			ClassInfo ci = ClassInfo.of(c);
 			apply(ci.getAnnotation(Request.class));
 			this.cm = BeanContext.DEFAULT.getClassMeta(c);
 			for (MethodInfo m : cm.getInfo().getAllMethods()) {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanMeta.java
index 2f23850..7291ec2 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanMeta.java
@@ -47,7 +47,7 @@ public class ResponseBeanMeta {
 	 * @return Metadata about the class, or <jk>null</jk> if class not annotated with {@link Response}.
 	 */
 	public static ResponseBeanMeta create(Type t, PropertyStore ps) {
-		ClassInfo ci = getClassInfo(t).resolved();
+		ClassInfo ci = ClassInfo.of(t).resolved();
 		if (! ci.hasAnnotation(Response.class))
 			return null;
 		Builder b = new Builder(ps);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ArrayUtils.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ArrayUtils.java
index a36bfb6..7ce707b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ArrayUtils.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ArrayUtils.java
@@ -13,12 +13,13 @@
 package org.apache.juneau.internal;
 
 import static org.apache.juneau.internal.StringUtils.*;
-import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 
 import java.lang.reflect.*;
 import java.util.*;
 
+import org.apache.juneau.reflect.*;
+
 /**
  * Quick and dirty utilities for working with arrays.
  */
@@ -392,7 +393,7 @@ public final class ArrayUtils {
 		if (! c.isArray())
 			throw new IllegalArgumentException("Cannot pass non-array objects to toPrimitiveArray()");
 		int l = Array.getLength(o);
-		Class<?> tc = getClassInfo(c.getComponentType()).getPrimitiveForWrapper();
+		Class<?> tc = ClassInfo.of(c.getComponentType()).getPrimitiveForWrapper();
 		if (tc == null)
 			throw new IllegalArgumentException("Array type is not a primitive wrapper array.");
 		Object a = Array.newInstance(tc, l);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ClassUtils.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ClassUtils.java
index c1f7005..2a9f123 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ClassUtils.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ClassUtils.java
@@ -25,70 +25,6 @@ import org.apache.juneau.utils.*;
 public final class ClassUtils {
 
 	/**
-	 * Shortcut for calling {@link ClassInfo#of(Type)}.
-	 *
-	 * @param t The class being wrapped.
-	 * @return The wrapped class.
-	 */
-	public static ClassInfo getClassInfo(Type t) {
-		return ClassInfo.of(t);
-	}
-
-	/**
-	 * Shortcut for calling {@link ClassInfo#of(Object)}.
-	 *
-	 * @param o The object whose class being wrapped.
-	 * @return The wrapped class.
-	 */
-	public static ClassInfo getClassInfo(Object o) {
-		return ClassInfo.of(o);
-	}
-
-	/**
-	 * Shortcut for calling {@link MethodInfo#of(Method)}.
-	 *
-	 * @param m The method being wrapped.
-	 * @return The wrapped method.
-	 */
-	public static MethodInfo getMethodInfo(Method m) {
-		return MethodInfo.of(m);
-	}
-
-	/**
-	 * Shortcut for calling {@link MethodInfo#of(ClassInfo, Method, Method)}.
-	 *
-	 * @param c
-	 * 	The class containing the method.
-	 * 	<br>Note that this isn't necessarily the declaring class, but could be a subclass
-	 * 	of the declaring class.
-	 * @param m The method being wrapped.
-	 * @return The wrapped method.
-	 */
-	public static MethodInfo getMethodInfo(Class<?> c, Method m) {
-		return MethodInfo.of(ClassInfo.of(c), m, m);
-	}
-
-	/**
-	 * Shortcut for calling {@link FieldInfo#of(Field)}.
-	 *
-	 * @param f The field being wrapped.
-	 * @return The wrapped field.
-	 */
-	public static FieldInfo getFieldInfo(Field f) {
-		return FieldInfo.of(f);
-	}
-
-	/**
-	 * Shortcut for calling {@link ConstructorInfo#of(Constructor)}.
-	 *
-	 * @param c The constructor being wrapped.
-	 * @return The wrapped constructor.
-	 */
-	public static ConstructorInfo getConstructorInfo(Constructor<?> c) {
-		return ConstructorInfo.of(c);
-	}
-
-	/**
 	 * Given the specified list of objects, return readable names for the class types of the objects.
 	 *
 	 * @param o The objects.
@@ -111,7 +47,7 @@ public final class ClassUtils {
 	public static boolean argsMatch(Class<?>[] paramTypes, Class<?>[] argTypes) {
 		if (paramTypes.length == argTypes.length) {
 			for (int i = 0; i < paramTypes.length; i++)
-				if (! getClassInfo(paramTypes[i]).isParentOf(argTypes[i]))
+				if (! ClassInfo.of(paramTypes[i]).isParentOf(argTypes[i]))
 					return false;
 			return true;
 		}
@@ -145,9 +81,9 @@ public final class ClassUtils {
 	public static int fuzzyArgsMatch(Class<?>[] paramTypes, Class<?>... argTypes) {
 		int matches = 0;
 		outer: for (Class<?> p : paramTypes) {
-			ClassInfo pi = getClassInfo(p).getWrapperInfoIfPrimitive();
+			ClassInfo pi = ClassInfo.of(p).getWrapperInfoIfPrimitive();
 			for (Class<?> a : argTypes) {
-				ClassInfo ai = getClassInfo(a).getWrapperInfoIfPrimitive();
+				ClassInfo ai = ClassInfo.of(a).getWrapperInfoIfPrimitive();
 				if (pi.isParentOf(ai.inner())) {
 					matches++;
 					continue outer;
@@ -168,7 +104,7 @@ public final class ClassUtils {
 	public static int fuzzyArgsMatch(Class<?>[] paramTypes, ClassInfo... argTypes) {
 		int matches = 0;
 		outer: for (Class<?> p : paramTypes) {
-			ClassInfo pi = getClassInfo(p).getWrapperInfoIfPrimitive();
+			ClassInfo pi = ClassInfo.of(p).getWrapperInfoIfPrimitive();
 			for (ClassInfo a : argTypes) {
 				ClassInfo ai = a.getWrapperInfoIfPrimitive();
 				if (pi.isParentOf(ai.inner())) {
@@ -284,7 +220,7 @@ public final class ClassUtils {
 			return null;
 		if (c2 instanceof Class) {
 			try {
-				ClassInfo c3 = getClassInfo((Class<?>)c2);
+				ClassInfo c3 = ClassInfo.of((Class<?>)c2);
 				if (c3.isInterface() || c3.isAbstract())
 					return null;
 
@@ -312,7 +248,7 @@ public final class ClassUtils {
 			} catch (Exception e) {
 				throw new FormattedRuntimeException(e, "Could not instantiate class {0}", c.getName());
 			}
-		} else if (getClassInfo(c).isParentOf(c2.getClass())) {
+		} else if (ClassInfo.of(c).isParentOf(c2.getClass())) {
 			return (T)c2;
 		} else {
 			throw new FormattedRuntimeException("Object of type {0} found but was expecting {1}.", c2.getClass(), c.getClass());
@@ -334,7 +270,7 @@ public final class ClassUtils {
 	public static Object[] getMatchingArgs(Class<?>[] paramTypes, Object... args) {
 		Object[] params = new Object[paramTypes.length];
 		for (int i = 0; i < paramTypes.length; i++) {
-			ClassInfo pt = getClassInfo(paramTypes[i]).getWrapperInfoIfPrimitive();
+			ClassInfo pt = ClassInfo.of(paramTypes[i]).getWrapperInfoIfPrimitive();
 			for (int j = 0; j < args.length; j++) {
 				if (args[j] != null && pt.isParentOf(args[j].getClass())) {
 					params[i] = args[j];
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/HttpUtils.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/HttpUtils.java
index babbdae..81333db 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/HttpUtils.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/HttpUtils.java
@@ -13,8 +13,6 @@
 package org.apache.juneau.internal;
 
 import static org.apache.juneau.internal.StringUtils.*;
-import static org.apache.juneau.internal.ClassUtils.*;
-
 import java.lang.reflect.*;
 
 import org.apache.juneau.reflect.*;
@@ -85,7 +83,7 @@ public class HttpUtils {
 			return "";
 		sb.append('(');
 		for (int i = 0; i < pt.length; i++) {
-			ClassInfo pti = getClassInfo(pt[i]);
+			ClassInfo pti = ClassInfo.of(pt[i]);
 			if (i > 0)
 				sb.append(',');
 			if (full)
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/MethodInfo.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/MethodInfo.java
index 2d189cb..b7b910e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/MethodInfo.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/MethodInfo.java
@@ -67,6 +67,20 @@ public final class MethodInfo extends ExecutableInfo implements Comparable<Metho
 	/**
 	 * Convenience method for instantiating a {@link MethodInfo};
 	 *
+	 * @param declaringClass The class that declares this method.
+	 * @param m The method being wrapped.
+	 * @param rm The "real" method if the method above is defined against a CGLIB proxy.
+	 * @return A new {@link MethodInfo} object, or <jk>null</jk> if the method was null;
+	 */
+	public static MethodInfo of(Class<?> declaringClass, Method m, Method rm) {
+		if (m == null)
+			return null;
+		return new MethodInfo(ClassInfo.of(declaringClass), m, rm);
+	}
+
+	/**
+	 * Convenience method for instantiating a {@link MethodInfo};
+	 *
 	 * @param m The method being wrapped.
 	 * @return A new {@link MethodInfo} object, or <jk>null</jk> if the method was null;
 	 */
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 fd95726..c45e52b 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
@@ -12,7 +12,6 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.reflect;
 
-import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.reflect.ReflectFlags.*;
 
 import java.util.concurrent.*;
@@ -146,7 +145,7 @@ public class Mutaters {
 			};
 		}
 
-		ClassInfo ici = getClassInfo(ic), oci = getClassInfo(oc);
+		ClassInfo ici = ClassInfo.of(ic), oci = ClassInfo.of(oc);
 
 		for (ClassInfo pic : ici.getAllParents()) {
 			Mutater t = m.get(pic.inner());
@@ -156,7 +155,7 @@ public class Mutaters {
 
 		if (ic == String.class) {
 			Class<?> oc2 = oci.hasPrimitiveWrapper() ? oci.getPrimitiveWrapper() : oc;
-			ClassInfo oc2i = getClassInfo(oc2);
+			ClassInfo oc2i = ClassInfo.of(oc2);
 
 			final MethodInfo createMethod = oc2i.getStaticCreateMethod(ic, "forName");
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remote/RemoteInterfaceMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remote/RemoteInterfaceMeta.java
index 80ca3ed..43fa8e9 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remote/RemoteInterfaceMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remote/RemoteInterfaceMeta.java
@@ -14,8 +14,6 @@ package org.apache.juneau.remote;
 
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static org.apache.juneau.internal.ClassUtils.*;
-
 import java.lang.reflect.*;
 import java.util.*;
 
@@ -51,7 +49,7 @@ public class RemoteInterfaceMeta {
 	public RemoteInterfaceMeta(Class<?> c, String uri) {
 		this.c = c;
 		String path = "";
-		ClassInfo ci = getClassInfo(c);
+		ClassInfo ci = ClassInfo.of(c);
 		List<RemoteInterface> rr = ci.getAnnotationsParentFirst(RemoteInterface.class);
 		for (RemoteInterface r : rr)
 			if (! r.path().isEmpty())
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
index 4377894..2991a09 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
@@ -340,14 +340,14 @@ public abstract class SerializerSession extends BeanTraverseSession {
 				if (((Object[])value).length == 0)
 					return true;
 			}
-			if (cm.isCollection() || (cm.isObject() && getClassInfo(value).isChildOf(Collection.class))) {
+			if (cm.isCollection() || (cm.isObject() && ClassInfo.of(value).isChildOf(Collection.class))) {
 				if (((Collection<?>)value).isEmpty())
 					return true;
 			}
 		}
 
 		if (isTrimEmptyMaps()) {
-			if (cm.isMap() || (cm.isObject() && getClassInfo(value).isChildOf(Map.class))) {
+			if (cm.isMap() || (cm.isObject() && ClassInfo.of(value).isChildOf(Map.class))) {
 				if (((Map<?,?>)value).isEmpty())
 					return true;
 			}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverContext.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverContext.java
index 9f5eab8..f8cb05a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverContext.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverContext.java
@@ -48,7 +48,7 @@ public class VarResolverContext {
 
 		Map<String,Var> m = new ConcurrentSkipListMap<>();
 		for (Class<?> c : vars) {
-			ClassInfo ci = getClassInfo(c);
+			ClassInfo ci = ClassInfo.of(c);
 			if (! ci.isChildOf(Var.class))
 				throw new VarResolverException("Invalid variable class.  Must extend from Var");
 			Var v = castOrCreate(Var.class, c);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/BeanFilterBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/BeanFilterBuilder.java
index 4d9d488..fd54c04 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/BeanFilterBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/BeanFilterBuilder.java
@@ -12,13 +12,12 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.transform;
 
-import static org.apache.juneau.internal.ClassUtils.*;
-
 import java.beans.*;
 import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
+import org.apache.juneau.reflect.*;
 
 /**
  * Builder class for {@link BeanFilter} objects.
@@ -73,7 +72,7 @@ public class BeanFilterBuilder<T> {
 	 * Bean class is determined through reflection of the parameter type.
 	 */
 	protected BeanFilterBuilder() {
-		beanClass = getClassInfo(this.getClass()).getParameterType(0, BeanFilterBuilder.class);
+		beanClass = ClassInfo.of(this.getClass()).getParameterType(0, BeanFilterBuilder.class);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/BuilderSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/BuilderSwap.java
index b83ec48..35c0674 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/BuilderSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/BuilderSwap.java
@@ -12,8 +12,6 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.transform;
 
-import static org.apache.juneau.internal.ClassUtils.*;
-
 import java.lang.reflect.*;
 
 import org.apache.juneau.*;
@@ -142,12 +140,11 @@ public class BuilderSwap<T,B> {
 	 */
 	@SuppressWarnings("rawtypes")
 	public static BuilderSwap<?,?> findSwapFromBuilderClass(Class<?> builderClass, Visibility cVis, Visibility mVis) {
-		ClassInfo bci = getClassInfo(builderClass);
+		ClassInfo bci = ClassInfo.of(builderClass);
 		if (bci.isNotPublic())
 			return null;
 
-//		Class<?> pojoClass = getClassInfo(Builder.class).getParameterType(0, builderClass);
-		Class<?> pojoClass = getClassInfo(builderClass).getParameterType(0, Builder.class);
+		Class<?> pojoClass = ClassInfo.of(builderClass).getParameterType(0, Builder.class);
 
 		MethodInfo createPojoMethod, createBuilderMethod;
 		ConstructorInfo pojoConstructor;
@@ -160,7 +157,7 @@ public class BuilderSwap<T,B> {
 		if (pojoClass == null)
 			return null;
 
-		ClassInfo pci = getClassInfo(pojoClass);
+		ClassInfo pci = ClassInfo.of(pojoClass);
 
 		pojoConstructor = pci.getConstructor(cVis, builderClass);
 		if (pojoConstructor == null)
@@ -195,7 +192,7 @@ public class BuilderSwap<T,B> {
 		if (b != null && b.value() != Null.class)
 			builderClass = b.value();
 
-		ClassInfo pci = getClassInfo(pojoClass);
+		ClassInfo pci = ClassInfo.of(pojoClass);
 
 		builderCreateMethod = pci.getBuilderCreateMethod();
 
@@ -217,7 +214,7 @@ public class BuilderSwap<T,B> {
 		if (builderClass == null)
 			return null;
 
-		ClassInfo bci = getClassInfo(builderClass);
+		ClassInfo bci = ClassInfo.of(builderClass);
 		builderConstructor = bci.getNoArgConstructor(cVis);
 		if (builderConstructor == null && builderCreateMethod == null)
 			return null;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java
index c86278a..78c7db0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java
@@ -13,12 +13,11 @@
 package org.apache.juneau.transform;
 
 import static org.apache.juneau.internal.StringUtils.*;
-import static org.apache.juneau.internal.ClassUtils.*;
-
 import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
+import org.apache.juneau.reflect.*;
 
 /**
  * Simple bean filter that simply identifies a class to be used as an interface class for all child classes.
@@ -54,7 +53,7 @@ public class InterfaceBeanFilterBuilder<T> extends BeanFilterBuilder<T> {
 
 	private void init(Class<?> interfaceClass) {
 		interfaceClass(interfaceClass);
-		List<Bean> annotations = getClassInfo(interfaceClass).getAnnotations(Bean.class);
+		List<Bean> annotations = ClassInfo.of(interfaceClass).getAnnotations(Bean.class);
 
 		ListIterator<Bean> li = annotations.listIterator(annotations.size());
 		while (li.hasPrevious()) {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/PojoSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/PojoSwap.java
index 0ebd06f..2d2d332 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/PojoSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/PojoSwap.java
@@ -12,8 +12,6 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.transform;
 
-import static org.apache.juneau.internal.ClassUtils.*;
-
 import java.util.*;
 
 import org.apache.juneau.*;
@@ -126,11 +124,11 @@ public abstract class PojoSwap<T,S> {
 	 * Constructor.
 	 */
 	protected PojoSwap() {
-		ClassInfo ci = getClassInfo(this.getClass());
+		ClassInfo ci = ClassInfo.of(this.getClass());
 		normalClass = (Class<T>)ci.getParameterType(0, PojoSwap.class);
 		swapClass = ci.getParameterType(1, PojoSwap.class);
-		normalClassInfo = getClassInfo(normalClass);
-		swapClassInfo = getClassInfo(swapClass);
+		normalClassInfo = ClassInfo.of(normalClass);
+		swapClassInfo = ClassInfo.of(swapClass);
 		forMediaTypes = forMediaTypes();
 		template = withTemplate();
 	}
@@ -144,8 +142,8 @@ public abstract class PojoSwap<T,S> {
 	protected PojoSwap(Class<T> normalClass, Class<?> swapClass) {
 		this.normalClass = normalClass;
 		this.swapClass = swapClass;
-		normalClassInfo = getClassInfo(normalClass);
-		swapClassInfo = getClassInfo(swapClass);
+		normalClassInfo = ClassInfo.of(normalClass);
+		swapClassInfo = ClassInfo.of(swapClass);
 		this.forMediaTypes = forMediaTypes();
 		this.template = withTemplate();
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/SurrogateSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/SurrogateSwap.java
index 638f3ff..53290f6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/SurrogateSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/SurrogateSwap.java
@@ -12,8 +12,6 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.transform;
 
-import static org.apache.juneau.internal.ClassUtils.*;
-
 import java.lang.reflect.*;
 import java.util.*;
 
@@ -60,7 +58,7 @@ public class SurrogateSwap<T,F> extends PojoSwap<T,F> {
 	@SuppressWarnings({"unchecked", "rawtypes"})
 	public static List<SurrogateSwap<?,?>> findPojoSwaps(Class<?> c) {
 		List<SurrogateSwap<?,?>> l = new LinkedList<>();
-		ClassInfo ci = getClassInfo(c);
+		ClassInfo ci = ClassInfo.of(c);
 		for (ConstructorInfo cc : ci.getPublicConstructors()) {
 			if (cc.getAnnotation(BeanIgnore.class) == null && cc.hasNumParams(1) && cc.isPublic()) {
 				Class<?> pt = cc.getRawParamType(0);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/MetadataMap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/MetadataMap.java
index 7cc5543..207a36e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/MetadataMap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/MetadataMap.java
@@ -12,11 +12,10 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.utils;
 
-import static org.apache.juneau.internal.ClassUtils.*;
-
 import java.lang.reflect.*;
 
 import org.apache.juneau.*;
+import org.apache.juneau.reflect.*;
 
 /**
  * Utility class for quick lookup of class metadata instances.
@@ -59,7 +58,7 @@ public class MetadataMap {
 			try {
 				for (Constructor<?> con : c.getConstructors()) {
 					Class<?>[] pt = con.getParameterTypes();
-					if (pt.length == 1 && getClassInfo(pt[0]).isParentOf(constructorArg.getClass())) {
+					if (pt.length == 1 && ClassInfo.of(pt[0]).isParentOf(constructorArg.getClass())) {
 						o = con.newInstance(constructorArg);
 						break;
 					}
diff --git a/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java
index 76f8f48..178af16 100644
--- a/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java
+++ b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java
@@ -14,8 +14,6 @@ package org.apache.juneau.microservice.jetty;
 
 import static org.apache.juneau.internal.SystemUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static org.apache.juneau.internal.ClassUtils.*;
-
 import java.io.*;
 import java.net.*;
 import java.util.*;
@@ -347,7 +345,7 @@ public class JettyMicroservice extends Microservice {
 
 		for (String s : cf.getStringArray("Jetty/servlets", new String[0])) {
 			try {
-				ClassInfo c = getClassInfo(Class.forName(s));
+				ClassInfo c = ClassInfo.of(Class.forName(s));
 				if (c.isChildOf(RestServlet.class)) {
 					RestServlet rs = (RestServlet)c.newInstance();
 					addServlet(rs, rs.getPath());
@@ -361,7 +359,7 @@ public class JettyMicroservice extends Microservice {
 
 		for (Map.Entry<String,Object> e : cf.getObjectMap("Jetty/servletMap", ObjectMap.EMPTY_MAP).entrySet()) {
 			try {
-				ClassInfo c = getClassInfo(Class.forName(e.getValue().toString()));
+				ClassInfo c = ClassInfo.of(Class.forName(e.getValue().toString()));
 				if (c.isChildOf(Servlet.class)) {
 					Servlet rs = (Servlet)c.newInstance();
 					addServlet(rs, e.getKey());
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestCallException.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestCallException.java
index ff75a76..3fe7203 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestCallException.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestCallException.java
@@ -13,7 +13,6 @@
 package org.apache.juneau.rest.client;
 
 import static java.lang.String.*;
-import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.internal.IOUtils.*;
 import static org.apache.juneau.internal.StringUtils.format;
@@ -157,7 +156,7 @@ public final class RestCallException extends IOException {
 				if (t.getName().endsWith(serverExceptionName))
 					doThrow(t, serverExceptionMessage);
 			try {
-				ClassInfo t = getClassInfo(cl.loadClass(serverExceptionName));
+				ClassInfo t = ClassInfo.of(cl.loadClass(serverExceptionName));
 				if (t.isChildOf(RuntimeException.class) || t.isChildOf(Error.class))
 					doThrow(t.inner(), serverExceptionMessage);
 			} catch (ClassNotFoundException e2) { /* Ignore */ }
@@ -166,7 +165,7 @@ public final class RestCallException extends IOException {
 
 	private void doThrow(Class<?> t, String msg) throws Throwable {
 		ConstructorInfo c = null;
-		ClassInfo ci = getClassInfo(t);
+		ClassInfo ci = ClassInfo.of(t);
 		if (msg != null) {
 			c = ci.getPublicConstructor(String.class);
 			if (c != null)
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
index f2f041d..5ce0e18 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
@@ -39,6 +39,7 @@ import org.apache.juneau.internal.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.oapi.*;
 import org.apache.juneau.parser.*;
+import org.apache.juneau.reflect.*;
 import org.apache.juneau.remote.*;
 import org.apache.juneau.rest.client.remote.*;
 import org.apache.juneau.serializer.*;
@@ -1191,7 +1192,7 @@ public class RestClient extends BeanContext implements Closeable {
 							} else {
 								Object v = rc.getResponseBody(rmr.getReturnType());
 								if (v == null && method.getReturnType().isPrimitive())
-									v = getClassInfo(method.getReturnType()).getPrimitiveDefault();
+									v = ClassInfo.of(method.getReturnType()).getPrimitiveDefault();
 								return v;
 							}
 
@@ -1310,7 +1311,7 @@ public class RestClient extends BeanContext implements Closeable {
 
 							Object v = rc.getResponse(method.getGenericReturnType());
 							if (v == null && method.getReturnType().isPrimitive())
-								v = getClassInfo(method.getReturnType()).getPrimitiveDefault();
+								v = ClassInfo.of(method.getReturnType()).getPrimitiveDefault();
 							return v;
 
 						} catch (RestCallException e) {
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteMethodMeta.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteMethodMeta.java
index 4cbe314..728110a 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteMethodMeta.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteMethodMeta.java
@@ -13,7 +13,6 @@
 package org.apache.juneau.rest.client.remote;
 
 import static org.apache.juneau.internal.StringUtils.*;
-import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.httppart.HttpPartType.*;
 
 import java.lang.reflect.*;
@@ -87,7 +86,7 @@ public class RemoteMethodMeta {
 
 		Builder(String parentPath, Method m, boolean useMethodSignatures, String defaultMethod) {
 
-			MethodInfo mi = getMethodInfo(m);
+			MethodInfo mi = MethodInfo.of(m);
 
 			RemoteMethod rm = mi.getAnnotation(RemoteMethod.class);
 
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteResourceMeta.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteResourceMeta.java
index a29bec0..821fcf2 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteResourceMeta.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteResourceMeta.java
@@ -14,8 +14,6 @@ package org.apache.juneau.rest.client.remote;
 
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static org.apache.juneau.internal.ClassUtils.*;
-
 import java.lang.reflect.*;
 import java.util.*;
 
@@ -45,7 +43,7 @@ public class RemoteResourceMeta {
 	public RemoteResourceMeta(Class<?> c) {
 		String path = "";
 
-		ClassInfo ci = getClassInfo(c);
+		ClassInfo ci = ClassInfo.of(c);
 		for (RemoteResource r : ci.getAnnotationsParentFirst(RemoteResource.class))
 			if (! r.path().isEmpty())
 				path = trimSlashes(r.path());
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java
index 0dd93e1..48c8c76 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java
@@ -12,7 +12,6 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest;
 
-import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.rest.util.RestUtils.*;
 
@@ -67,7 +66,7 @@ public class BasicRestInfoProvider implements RestInfoProvider {
 			description;
 
 		Builder(RestContext context) {
-			ClassInfo ci = getClassInfo(context.getResource().getClass());
+			ClassInfo ci = ClassInfo.of(context.getResource().getClass());
 			for (RestResource r : ci.getAnnotationsParentFirst(RestResource.class)) {
 				if (! r.siteName().isEmpty())
 					siteName = r.siteName();
@@ -165,7 +164,7 @@ public class BasicRestInfoProvider implements RestInfoProvider {
 	public String getMethodSummary(Method method, RestRequest req) throws Exception {
 		VarResolverSession vr = req.getVarResolverSession();
 
-		String s = getMethodInfo(method).getAnnotation(RestMethod.class).summary();
+		String s = MethodInfo.of(method).getAnnotation(RestMethod.class).summary();
 		if (s.isEmpty()) {
 			Operation o = getSwaggerOperation(method, req);
 			if (o != null)
@@ -221,7 +220,7 @@ public class BasicRestInfoProvider implements RestInfoProvider {
 	public String getMethodDescription(Method method, RestRequest req) throws Exception {
 		VarResolverSession vr = req.getVarResolverSession();
 
-		String s = joinnl(getMethodInfo(method).getAnnotation(RestMethod.class).description());
+		String s = joinnl(MethodInfo.of(method).getAnnotation(RestMethod.class).description());
 		if (s.isEmpty()) {
 			Operation o = getSwaggerOperation(method, req);
 			if (o != null)
@@ -399,7 +398,7 @@ public class BasicRestInfoProvider implements RestInfoProvider {
 		if (s != null) {
 			Map<String,OperationMap> sp = s.getPaths();
 			if (sp != null) {
-				Map<String,Operation> spp = sp.get(fixMethodPath(getMethodInfo(method).getAnnotation(RestMethod.class).path()));
+				Map<String,Operation> spp = sp.get(fixMethodPath(MethodInfo.of(method).getAnnotation(RestMethod.class).path()));
 				if (spp != null)
 					return spp.get(req.getMethod());
 			}
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 c944acd..7291510 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
@@ -16,7 +16,6 @@ import static javax.servlet.http.HttpServletResponse.*;
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.IOUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.rest.util.RestUtils.*;
 import static org.apache.juneau.rest.HttpRuntimeException.*;
 import static org.apache.juneau.FormattedIllegalArgumentException.*;
@@ -3601,7 +3600,7 @@ public final class RestContext extends BeanContext {
 			VarResolverSession vrs = this.varResolver.createSession();
 			config = builder.config.resolving(vrs);
 
-			ClassInfo rci = getClassInfo(resource);
+			ClassInfo rci = ClassInfo.of(resource);
 
 			PropertyStore ps = getPropertyStore();
 
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
index 0f9a668..2174dc3 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
@@ -12,7 +12,6 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest;
 
-import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.parser.Parser.*;
 import static org.apache.juneau.rest.RestContext.*;
@@ -113,7 +112,7 @@ public class RestContextBuilder extends BeanContextBuilder implements ServletCon
 		this.parentContext = parentContext;
 		this.properties = new RestContextProperties();
 
-		ClassInfo rci = getClassInfo(resourceClass);
+		ClassInfo rci = ClassInfo.of(resourceClass);
 
 		// Default values.
 		logger(BasicRestLogger.class);
@@ -201,7 +200,7 @@ public class RestContextBuilder extends BeanContextBuilder implements ServletCon
 	 */
 	RestContextBuilder init(Object resource) throws ServletException {
 		this.resource = resource;
-		ClassInfo rci = getClassInfo(resourceClass);
+		ClassInfo rci = ClassInfo.of(resourceClass);
 
 		Map<String,MethodInfo> map = new LinkedHashMap<>();
 		for (MethodInfo m : rci.getAllMethodsParentFirst()) {
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContextBuilder.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContextBuilder.java
index 83fb1df..3e4c0d7 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContextBuilder.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContextBuilder.java
@@ -12,8 +12,6 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest;
 
-import static org.apache.juneau.internal.ClassUtils.*;
-
 import org.apache.juneau.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.rest.annotation.*;
@@ -35,7 +33,7 @@ public class RestMethodContextBuilder extends BeanContextBuilder {
 		this.method = method;
 
 		String sig = method.getDeclaringClass().getName() + '.' + method.getName();
-		MethodInfo mi = getMethodInfo(servlet.getClass(), method);
+		MethodInfo mi = MethodInfo.of(servlet.getClass(), method, method);
 
 		try {
 
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
index 00dbec6..f06096c 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
@@ -15,7 +15,6 @@ package org.apache.juneau.rest;
 import static java.util.logging.Level.*;
 import static javax.servlet.http.HttpServletResponse.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.rest.HttpRuntimeException.*;
 
 import java.io.*;
@@ -115,7 +114,7 @@ public abstract class RestServlet extends HttpServlet {
 	public synchronized String getPath() {
 		if (context != null)
 			return context.getPath();
-		ClassInfo ci = getClassInfo(getClass());
+		ClassInfo ci = ClassInfo.of(getClass());
 		for (RestResource rr : ci.getAnnotations(RestResource.class))
 			if (! rr.path().isEmpty())
 				return trimSlashes(rr.path());
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerGenerator.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerGenerator.java
index 1a36c6f..dcb945a 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerGenerator.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerGenerator.java
@@ -12,7 +12,6 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest;
 
-import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.rest.RestParamType.*;
 import static org.apache.juneau.rest.util.AnnotationUtils.*;
@@ -100,7 +99,7 @@ final class SwaggerGenerator {
 	 */
 	public Swagger getSwagger() throws Exception {
 
-		ClassInfo rci = getClassInfo(resource.getClass());
+		ClassInfo rci = ClassInfo.of(resource.getClass());
 
 		rci.getSimpleName();
 
@@ -224,7 +223,7 @@ final class SwaggerGenerator {
 			BeanSession bs = sm.createBeanSession();
 
 			Method m = sm.method;
-			MethodInfo mi = getMethodInfo(m);
+			MethodInfo mi = MethodInfo.of(m);
 			RestMethod rm = mi.getAnnotation(RestMethod.class);
 			String mn = m.getName();