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 3705d8217e5676b04c890a58ec3f2e1bf6b463f9
Author: Gary Gregory <[email protected]>
AuthorDate: Thu Oct 15 09:32:37 2026 -0400

    Preserve enclosing context and member names in
    ClassUtils.getShortClassName(Class)
    
    Add tests
---
 .../lang3/ClassUtilsShortClassNameTest.java        | 37 ++++++++++++++++++++--
 1 file changed, 34 insertions(+), 3 deletions(-)

diff --git 
a/src/test/java/org/apache/commons/lang3/ClassUtilsShortClassNameTest.java 
b/src/test/java/org/apache/commons/lang3/ClassUtilsShortClassNameTest.java
index 7f81184eb..2263b3dbd 100644
--- a/src/test/java/org/apache/commons/lang3/ClassUtilsShortClassNameTest.java
+++ b/src/test/java/org/apache/commons/lang3/ClassUtilsShortClassNameTest.java
@@ -18,7 +18,6 @@
 package org.apache.commons.lang3;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.lang.reflect.Array;
 import java.util.function.Supplier;
@@ -42,6 +41,39 @@ class Ne$ted {
         }
     }
 
+    @Test
+    void testDeeplyNestedMemberOfAnonymousClass() {
+        final Supplier<Class<?>> anonymous = new Supplier<Class<?>>() {
+
+            class Inner$Name {
+                class Deep$Name {
+                }
+            }
+
+            @Override
+            public Class<?> get() {
+                return Inner$Name.Deep$Name.class;
+            }
+        };
+        final Class<?> deep = anonymous.get();
+        final String expected = 
ClassUtils.getShortClassName(anonymous.getClass()) + ".Inner$Name.Deep$Name";
+        assertEquals(expected, ClassUtils.getShortClassName(deep));
+        assertEquals(expected + "[][]", 
ClassUtils.getShortClassName(Array.newInstance(deep, 0, 0).getClass()));
+    }
+
+    @Test
+    void testDeeplyNestedMemberOfLocalClass() {
+        class Local {
+            class Inner$Name {
+                class Deep$Name {
+                }
+            }
+        }
+        final String expected = ClassUtils.getShortClassName(Local.class) + 
".Inner$Name.Deep$Name";
+        assertEquals(expected, 
ClassUtils.getShortClassName(Local.Inner$Name.Deep$Name.class));
+        assertEquals(expected + "[][]", 
ClassUtils.getShortClassName(Local.Inner$Name.Deep$Name[][].class));
+    }
+
     @Test
     void testDollarSignImmediatelyAfterPackage() {
         assertEquals("$trange", ClassUtils.getShortClassName($trange.class));
@@ -70,8 +102,7 @@ class Inner$Name {
             }
         }
         final String shortName = 
ClassUtils.getShortClassName(Local.Inner$Name.class);
-        // Check the member identifier independently of enclosing context and 
compiler-generated ordinals.
-        assertTrue(shortName.endsWith(".Inner$Name"), () -> "Member identifier 
must retain its literal dollar sign: " + shortName);
+        assertEquals(ClassUtils.getShortClassName(Local.class) + 
".Inner$Name", shortName);
     }
 
     @Test

Reply via email to