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 bf01514d0b org.apache.juneau.common.reflect API improvements
bf01514d0b is described below
commit bf01514d0b93022b6a0e3360759fc20801d94b73
Author: James Bognar <[email protected]>
AuthorDate: Mon Nov 17 12:21:20 2025 -0500
org.apache.juneau.common.reflect API improvements
---
.../apache/juneau/common/reflect/ClassInfo.java | 56 +++++++++++++++-------
.../org/apache/juneau/common/utils/ClassUtils.java | 2 +-
.../org/apache/juneau/internal/ClassUtils2.java | 2 +-
.../org/apache/juneau/swap/AutoNumberSwap.java | 4 +-
.../juneau/common/reflect/ClassInfo_Test.java | 28 +++++------
5 files changed, 57 insertions(+), 35 deletions(-)
diff --git
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ClassInfo.java
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ClassInfo.java
index 223e7405f8..9aa9217cea 100644
---
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ClassInfo.java
+++
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ClassInfo.java
@@ -281,7 +281,7 @@ public class ClassInfo extends ElementInfo implements
Annotatable {
if (inner.isInstance(child))
return true;
if (this.isPrimitive() || child.getClass().isPrimitive()) {
- return
this.getWrapperIfPrimitive().isAssignableFrom(of(child).getWrapperIfPrimitive());
+ return
this.getWrapperIfPrimitive().isParentOf(of(child).getWrapperIfPrimitive());
}
return false;
}
@@ -1685,23 +1685,25 @@ public class ClassInfo extends ElementInfo implements
Annotatable {
}
/**
- * If this class is a primitive (e.g.
<code><jk>int</jk>.<jk>class</jk></code>) returns it's wrapper class
- * (e.g. <code>Integer.<jk>class</jk></code>).
+ * Returns the wrapper class if this is a primitive, otherwise returns
this class.
*
- * @return The wrapper class if it's primitive, or the same class if
class is not a primitive.
- */
- public Class<?> getWrapperIfPrimitive() {
- if (nn(inner) && ! inner.isPrimitive())
- return inner;
- return pmap1.get(inner);
- }
-
- /**
- * Same as {@link #getWrapperIfPrimitive()} but wraps it in a {@link
ClassInfo}.
+ * <p>
+ * If this class is a primitive (e.g. {@code int.class}), returns its
wrapper class
+ * (e.g. {@code Integer.class}) wrapped in a {@link ClassInfo}.
+ * Otherwise, returns this {@link ClassInfo} instance.
*
- * @return The wrapper class if it's primitive, or the same class if
class is not a primitive.
+ * <h5 class='section'>Example:</h5>
+ * <p class='bjava'>
+ * ClassInfo <jv>intClass</jv> =
ClassInfo.<jsm>of</jsm>(<jk>int</jk>.<jk>class</jk>);
+ * ClassInfo <jv>wrapper</jv> =
<jv>intClass</jv>.getWrapperIfPrimitive(); <jc>// Returns ClassInfo for
Integer.class</jc>
+ *
+ * ClassInfo <jv>stringClass</jv> =
ClassInfo.<jsm>of</jsm>(String.<jk>class</jk>);
+ * ClassInfo <jv>same</jv> =
<jv>stringClass</jv>.getWrapperIfPrimitive(); <jc>// Returns same
ClassInfo</jc>
+ * </p>
+ *
+ * @return The wrapper {@link ClassInfo} if this is a primitive, or
this {@link ClassInfo} if not a primitive.
*/
- public ClassInfo getWrapperInfoIfPrimitive() {
+ public ClassInfo getWrapperIfPrimitive() {
if (inner == null || ! inner.isPrimitive())
return this;
return of(pmap1.get(inner));
@@ -2059,6 +2061,26 @@ public class ClassInfo extends ElementInfo implements
Annotatable {
return false;
}
+ /**
+ * Returns <jk>true</jk> if this class is a parent or the same as
<c>child</c>.
+ *
+ * <p>
+ * Same as {@link #isParentOf(Class)} but takes in a {@link ClassInfo}.
+ *
+ * <h5 class='section'>Example:</h5>
+ * <p class='bjava'>
+ * ClassInfo <jv>parent</jv> =
ClassInfo.<jsm>of</jsm>(List.<jk>class</jk>);
+ * ClassInfo <jv>child</jv> =
ClassInfo.<jsm>of</jsm>(ArrayList.<jk>class</jk>);
+ * <jk>boolean</jk> <jv>b</jv> =
<jv>parent</jv>.isParentOf(<jv>child</jv>); <jc>// true</jc>
+ * </p>
+ *
+ * @param child The child class.
+ * @return <jk>true</jk> if this class is a parent or the same as
<c>child</c>.
+ */
+ public boolean isParentOf(ClassInfo child) {
+ return nn(inner) && nn(child) &&
inner.isAssignableFrom(child.inner());
+ }
+
/**
* Returns <jk>true</jk> if this class is a parent or the same as
<c>child</c>.
*
@@ -2086,7 +2108,7 @@ public class ClassInfo extends ElementInfo implements
Annotatable {
if (inner.isAssignableFrom(child))
return true;
if (this.isPrimitive() || child.isPrimitive()) {
- return
this.getWrapperIfPrimitive().isAssignableFrom(of(child).getWrapperIfPrimitive());
+ return
this.getWrapperIfPrimitive().isParentOf(of(child).getWrapperIfPrimitive());
}
return false;
}
@@ -2103,7 +2125,7 @@ public class ClassInfo extends ElementInfo implements
Annotatable {
if (inner.isAssignableFrom(child.inner()))
return true;
if (this.isPrimitive() || child.isPrimitive()) {
- return
this.getWrapperIfPrimitive().isAssignableFrom(child.getWrapperIfPrimitive());
+ return
this.getWrapperIfPrimitive().isParentOf(child.getWrapperIfPrimitive());
}
return false;
}
diff --git
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/ClassUtils.java
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/ClassUtils.java
index 310a15e5ef..be6b50dd2c 100644
---
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/ClassUtils.java
+++
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/ClassUtils.java
@@ -290,7 +290,7 @@ public class ClassUtils {
return args;
var params = new Object[paramTypes.length];
for (var i = 0; i < paramTypes.length; i++) {
- var pt =
ClassInfo.of(paramTypes[i]).getWrapperInfoIfPrimitive();
+ var pt =
ClassInfo.of(paramTypes[i]).getWrapperIfPrimitive();
for (var arg : args) {
if (nn(arg) && pt.isParentOf(arg.getClass())) {
params[i] = arg;
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ClassUtils2.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ClassUtils2.java
index 54cfe5079e..77565f1c9f 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ClassUtils2.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ClassUtils2.java
@@ -53,7 +53,7 @@ public class ClassUtils2 {
return args;
Object[] params = new Object[paramTypes.length];
for (int i = 0; i < paramTypes.length; i++) {
- var pt =
ClassInfo.of(paramTypes[i]).getWrapperInfoIfPrimitive();
+ var pt =
ClassInfo.of(paramTypes[i]).getWrapperIfPrimitive();
for (var arg : args) {
if (nn(arg) && pt.isParentOf(arg.getClass())) {
params[i] = arg;
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoNumberSwap.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoNumberSwap.java
index 86d7cde769..fdc1206db7 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoNumberSwap.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/AutoNumberSwap.java
@@ -212,11 +212,11 @@ public class AutoNumberSwap<T> extends
ObjectSwap<T,Number> {
if (nn(unswapMethod)) {
for (var pi : unswapMethod.getParameters())
if (!
pi.getParameterType().is(BeanSession.class))
- unswapType =
pi.getParameterType().getWrapperIfPrimitive();
+ unswapType =
pi.getParameterType().getWrapperIfPrimitive().inner();
} else if (nn(unswapConstructor)) {
for (var pi : unswapConstructor.getParameters())
if (!
pi.getParameterType().is(BeanSession.class))
- unswapType =
pi.getParameterType().getWrapperIfPrimitive();
+ unswapType =
pi.getParameterType().getWrapperIfPrimitive().inner();
}
this.unswapType = unswapType;
}
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ClassInfo_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ClassInfo_Test.java
index 58cffefe33..effef821a8 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ClassInfo_Test.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/common/reflect/ClassInfo_Test.java
@@ -1036,27 +1036,27 @@ public class ClassInfo_Test extends TestBase {
@Test void getWrapperIfPrimitive() {
for (int i = 0; i < primitives.size(); i++)
-
assertEquals(of(primitives.get(i)).getWrapperIfPrimitive(),
primitiveWrappers.get(i));
- assertEquals(of(String.class).getWrapperIfPrimitive(),
String.class);
+
assertEquals(of(primitives.get(i)).getWrapperIfPrimitive().inner(),
primitiveWrappers.get(i));
+ assertEquals(of(String.class).getWrapperIfPrimitive().inner(),
String.class);
}
@Test void getWrapperIfPrimitive_onType() {
- assertEquals("class
org.apache.juneau.common.reflect.ClassInfo_Test$A1",
aTypeInfo.getWrapperIfPrimitive().toString());
- assertEquals("interface java.util.Map",
pTypeInfo.getWrapperIfPrimitive().toString());
- assertEquals("interface java.util.Map",
pTypeDimensionalInfo.getWrapperIfPrimitive().toString());
- assertEquals("class java.util.AbstractMap",
pTypeGenericInfo.getWrapperIfPrimitive().toString());
- assertEquals(null, pTypeGenericArgInfo.getWrapperIfPrimitive());
+ assertEquals("class
org.apache.juneau.common.reflect.ClassInfo_Test$A1",
aTypeInfo.getWrapperIfPrimitive().inner().toString());
+ assertEquals("interface java.util.Map",
pTypeInfo.getWrapperIfPrimitive().inner().toString());
+ assertEquals("interface java.util.Map",
pTypeDimensionalInfo.getWrapperIfPrimitive().inner().toString());
+ assertEquals("class java.util.AbstractMap",
pTypeGenericInfo.getWrapperIfPrimitive().inner().toString());
+ assertEquals(null,
pTypeGenericArgInfo.getWrapperIfPrimitive().inner());
}
- @Test void getWrapperInfoIfPrimitive() {
+ @Test void getWrapperIfPrimitive_asClassInfo() {
for (int i = 0; i < primitives.size(); i++)
-
assertEquals(of(primitives.get(i)).getWrapperInfoIfPrimitive().inner(),
primitiveWrappers.get(i));
-
assertEquals(of(String.class).getWrapperInfoIfPrimitive().inner(),
String.class);
+
assertEquals(of(primitives.get(i)).getWrapperIfPrimitive().inner(),
primitiveWrappers.get(i));
+ assertEquals(of(String.class).getWrapperIfPrimitive().inner(),
String.class);
}
- @Test void getWrapperInfoIfPrimitive_onType() {
- assertEquals(aTypeInfo.getWrapperInfoIfPrimitive().innerType(),
aType);
- check("V", pTypeGenericArgInfo.getWrapperInfoIfPrimitive());
+ @Test void getWrapperIfPrimitive_asClassInfo_onType() {
+ assertEquals(aTypeInfo.getWrapperIfPrimitive().innerType(),
aType);
+ check("V", pTypeGenericArgInfo.getWrapperIfPrimitive());
}
@Test void getPrimitiveDefault() {
@@ -1278,7 +1278,7 @@ public class ClassInfo_Test extends TestBase {
}
@Test void isParentOf_null() {
- assertFalse(ka.isParentOf(null));
+ assertFalse(ka.isParentOf((Class<?>)null));
}
@Test void isParentOf_type() {