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
