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
The following commit(s) were added to refs/heads/master by this push:
new d215e7fec keep array encoding intact in ClassUtils.getAbbreviatedName
(#1829)
d215e7fec is described below
commit d215e7fec92fcd4e89f5c834e34636ce7cc37f1e
Author: alhuda <[email protected]>
AuthorDate: Wed Oct 21 03:15:39 2026 +0530
keep array encoding intact in ClassUtils.getAbbreviatedName (#1829)
getAbbreviatedName(Class, int) abbreviates Class.getName(), and for an
array class the first '.' segment carries the JVM array encoding, so
"[Ljava" was shortened to "[" and the 'L' marker was lost:
String[].class and String[][].class both abbreviated to "[.l.String;".
Keep the leading [...[L prefix and trailing ';' and abbreviate only the
element class name, the same encoding getPackageName(String) strips.
---
src/main/java/org/apache/commons/lang3/ClassUtils.java | 9 +++++++++
src/test/java/org/apache/commons/lang3/ClassUtilsTest.java | 13 +++++++++++++
2 files changed, 22 insertions(+)
diff --git a/src/main/java/org/apache/commons/lang3/ClassUtils.java
b/src/main/java/org/apache/commons/lang3/ClassUtils.java
index 5c6f1bf0d..efd55965d 100644
--- a/src/main/java/org/apache/commons/lang3/ClassUtils.java
+++ b/src/main/java/org/apache/commons/lang3/ClassUtils.java
@@ -338,6 +338,15 @@ public static String getAbbreviatedName(final String
className, final int length
if (className.length() <= lengthHint) {
return className;
}
+ // Keep the array encoding (for example "[[L" ... ";") intact and only
abbreviate the element class name
+ int dims = 0;
+ while (dims < className.length() && className.charAt(dims) == '[') {
+ dims++;
+ }
+ if (dims > 0 && className.length() > dims + 2 &&
className.charAt(dims) == 'L' && className.charAt(className.length() - 1) ==
';') {
+ final String elementName = className.substring(dims + 1,
className.length() - 1);
+ return className.substring(0, dims + 1) +
getAbbreviatedName(elementName, Math.max(1, lengthHint - dims - 2)) + ';';
+ }
final char[] abbreviated = className.toCharArray();
int target = 0;
int source = 0;
diff --git a/src/test/java/org/apache/commons/lang3/ClassUtilsTest.java
b/src/test/java/org/apache/commons/lang3/ClassUtilsTest.java
index 436e188bc..032a1b971 100644
--- a/src/test/java/org/apache/commons/lang3/ClassUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/ClassUtilsTest.java
@@ -191,6 +191,19 @@ void test_getAbbreviatedName_Class() {
assertEquals("java.lang.String",
ClassUtils.getAbbreviatedName(String.class, 20));
}
+ @Test
+ void test_getAbbreviatedName_Class_Array() {
+ assertEquals("[Lj.l.String;",
ClassUtils.getAbbreviatedName(String[].class, 1));
+ assertEquals("[[Lj.l.String;",
ClassUtils.getAbbreviatedName(String[][].class, 1));
+ assertEquals("[Lj.lang.String;",
ClassUtils.getAbbreviatedName(String[].class, "[Lj.lang.String;".length()));
+ assertEquals("[Lj.l.String;",
ClassUtils.getAbbreviatedName(String[].class, "[Lj.lang.String;".length() - 1));
+ assertEquals("[Ljava.lang.String;",
ClassUtils.getAbbreviatedName(String[].class, 30));
+ assertEquals("[Lo.a.c.l.ClassUtils;",
ClassUtils.getAbbreviatedName(ClassUtils[].class, 21));
+ assertEquals("[I", ClassUtils.getAbbreviatedName(int[].class, 1));
+ assertEquals("[[I", ClassUtils.getAbbreviatedName(int[][].class, 1));
+ assertEquals("[Lj.l.String;",
ClassUtils.getAbbreviatedName("[Ljava.lang.String;", 1));
+ }
+
@Test
/** When the desired length is negative then exception is thrown */
void test_getAbbreviatedName_Class_NegativeLen() {