This is an automated email from the ASF dual-hosted git repository.

garydgregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-lang.git

commit 2341c9cd7ed4b7f2e841e165b6077d1aa7a61b17
Author: Gary Gregory <[email protected]>
AuthorDate: Mon Oct 19 19:00:38 2026 -0400

    Strengthen TypeUtils hash code regression coverage
    
    Add upper-bounded wildcard cases for List<? extends Number> and
    List<? extends T[]> to the JDK hash interoperability tests. Compare
    the generic array hash directly with its reflected JDK counterpart.
---
 src/test/java/org/apache/commons/lang3/reflect/TypeUtilsTest.java | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/test/java/org/apache/commons/lang3/reflect/TypeUtilsTest.java 
b/src/test/java/org/apache/commons/lang3/reflect/TypeUtilsTest.java
index 4cef509d9..0acb81b58 100644
--- a/src/test/java/org/apache/commons/lang3/reflect/TypeUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/reflect/TypeUtilsTest.java
@@ -364,6 +364,8 @@ private static class HashCodeTypes<T> {
         T[][] nestedArray;
         List<String>[][] nestedListArray;
         ParameterizedOwner<String>.NonGenericInner nonGenericMember;
+        List<? extends T[]> upperBoundedArrayArgument;
+        List<? extends Number> upperBoundedList;
         List<T> variableList;
         List<? super T[]> wildcardArrayArgument;
         List<?> wildcardList;
@@ -520,6 +522,8 @@ static Stream<Arguments> testHashCodeMatchesJdk() {
                 Arguments.of("nestedListArray", 
TypeUtils.genericArrayType(TypeUtils.genericArrayType(strings))),
                 Arguments.of("nonGenericMember", 
TypeUtils.parameterizeWithOwner(TypeUtils.parameterize(ParameterizedOwner.class,
 String.class),
                         ParameterizedOwner.NonGenericInner.class)),
+                Arguments.of("upperBoundedArrayArgument", 
TypeUtils.parameterize(List.class, 
TypeUtils.wildcardType().withUpperBounds(array).build())),
+                Arguments.of("upperBoundedList", 
TypeUtils.parameterize(List.class, 
TypeUtils.wildcardType().withUpperBounds(Number.class).build())),
                 Arguments.of("variableList", 
TypeUtils.parameterize(List.class, variable)),
                 Arguments.of("wildcardArrayArgument", 
TypeUtils.parameterize(List.class, 
TypeUtils.wildcardType().withLowerBounds(array).build())),
                 Arguments.of("wildcardList", 
TypeUtils.parameterize(List.class, TypeUtils.WILDCARD_ALL)));
@@ -1047,7 +1051,7 @@ void testGenericArrayType() throws NoSuchFieldException {
                 .genericArrayType(TypeUtils.parameterize(Comparable.class, 
TypeUtils.wildcardType().withUpperBounds(Integer.class).build()));
         assertTrue(TypeUtils.equals(expected, actual));
         assertEquals("java.lang.Comparable<? extends java.lang.Integer>[]", 
actual.toString());
-        assertNotEquals(0, actual.hashCode());
+        assertEquals(expected.hashCode(), actual.hashCode());
         assertEquals(actual, actual);
         assertFalse(actual.equals(null));
         assertFalse(actual.equals(TypeUtils.wildcardType().build()));

Reply via email to