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() {

Reply via email to