Repository: commons-lang Updated Branches: refs/heads/master 8e8e78d84 -> 6f03c0ce1
[LANG-1360] Add methods to ClassUtils to get various forms of class names in a null-safe manner Project: http://git-wip-us.apache.org/repos/asf/commons-lang/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-lang/commit/6f03c0ce Tree: http://git-wip-us.apache.org/repos/asf/commons-lang/tree/6f03c0ce Diff: http://git-wip-us.apache.org/repos/asf/commons-lang/diff/6f03c0ce Branch: refs/heads/master Commit: 6f03c0ce11db4a270124b9bf93338d3db9fccf5c Parents: 8e8e78d Author: Gary Gregory <ggreg...@apache.org> Authored: Mon Oct 23 11:14:43 2017 -0600 Committer: Gary Gregory <ggreg...@apache.org> Committed: Mon Oct 23 11:14:43 2017 -0600 ---------------------------------------------------------------------- .../org/apache/commons/lang3/ClassUtils.java | 20 ++- .../apache/commons/lang3/ClassUtilsTest.java | 173 +++++++++++++------ 2 files changed, 134 insertions(+), 59 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-lang/blob/6f03c0ce/src/main/java/org/apache/commons/lang3/ClassUtils.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/lang3/ClassUtils.java b/src/main/java/org/apache/commons/lang3/ClassUtils.java index c81ac3c..1cbdd19 100644 --- a/src/main/java/org/apache/commons/lang3/ClassUtils.java +++ b/src/main/java/org/apache/commons/lang3/ClassUtils.java @@ -1185,8 +1185,9 @@ public class ClassUtils { * <p>Gets the canonical class name for a {@code Class}.</p> * * @param cls the class for which to get the canonical class name; may be null - * @return the canonical name of the class or the empty String + * @return the canonical name of the class, or the empty String * @since 3.7 + * @see Class#getCanonicalName() */ public static String getCanonicalName(final Class<?> cls) { return getCanonicalName(cls, StringUtils.EMPTY); @@ -1197,11 +1198,16 @@ public class ClassUtils { * * @param cls the class for which to get the canonical class name; may be null * @param valueIfNull the return value if null - * @return the canonical name of the class or {@code valueIfNull} + * @return the canonical name of the class, or {@code valueIfNull} * @since 3.7 + * @see Class#getCanonicalName() */ public static String getCanonicalName(final Class<?> cls, final String valueIfNull) { - return cls == null ? valueIfNull : cls.getClass().getCanonicalName(); + if (cls == null) { + return valueIfNull; + } + final String canonicalName = cls.getCanonicalName(); + return canonicalName == null ? valueIfNull : canonicalName; } /** @@ -1210,6 +1216,7 @@ public class ClassUtils { * @param object the object for which to get the canonical class name; may be null * @return the canonical name of the object, or the empty String * @since 3.7 + * @see Class#getCanonicalName() */ public static String getCanonicalName(final Object object) { return getCanonicalName(object, StringUtils.EMPTY); @@ -1222,9 +1229,14 @@ public class ClassUtils { * @param valueIfNull the return value if null * @return the canonical name of the object or {@code valueIfNull} * @since 3.7 + * @see Class#getCanonicalName() */ public static String getCanonicalName(final Object object, final String valueIfNull) { - return object == null ? valueIfNull : object.getClass().getCanonicalName(); + if (object == null) { + return valueIfNull; + } + final String canonicalName = object.getClass().getCanonicalName(); + return canonicalName == null ? valueIfNull : canonicalName; } /** http://git-wip-us.apache.org/repos/asf/commons-lang/blob/6f03c0ce/src/test/java/org/apache/commons/lang3/ClassUtilsTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/lang3/ClassUtilsTest.java b/src/test/java/org/apache/commons/lang3/ClassUtilsTest.java index 4ae2294..6009a68 100644 --- a/src/test/java/org/apache/commons/lang3/ClassUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/ClassUtilsTest.java @@ -220,6 +220,114 @@ public class ClassUtilsTest { } @Test + public void test_getCanonicalName_Class() { + assertEquals("org.apache.commons.lang3.ClassUtils", ClassUtils.getCanonicalName(ClassUtils.class)); + assertEquals("java.util.Map.Entry", ClassUtils.getCanonicalName(Map.Entry.class)); + assertEquals("", ClassUtils.getCanonicalName((Class<?>) null)); + + assertEquals("java.lang.String[]", ClassUtils.getCanonicalName(String[].class)); + assertEquals("java.util.Map.Entry[]", ClassUtils.getCanonicalName(Map.Entry[].class)); + + // Primitives + assertEquals("boolean", ClassUtils.getCanonicalName(boolean.class)); + assertEquals("byte", ClassUtils.getCanonicalName(byte.class)); + assertEquals("char", ClassUtils.getCanonicalName(char.class)); + assertEquals("short", ClassUtils.getCanonicalName(short.class)); + assertEquals("int", ClassUtils.getCanonicalName(int.class)); + assertEquals("long", ClassUtils.getCanonicalName(long.class)); + assertEquals("float", ClassUtils.getCanonicalName(float.class)); + assertEquals("double", ClassUtils.getCanonicalName(double.class)); + + // Primitive Arrays + assertEquals("boolean[]", ClassUtils.getCanonicalName(boolean[].class)); + assertEquals("byte[]", ClassUtils.getCanonicalName(byte[].class)); + assertEquals("char[]", ClassUtils.getCanonicalName(char[].class)); + assertEquals("short[]", ClassUtils.getCanonicalName(short[].class)); + assertEquals("int[]", ClassUtils.getCanonicalName(int[].class)); + assertEquals("long[]", ClassUtils.getCanonicalName(long[].class)); + assertEquals("float[]", ClassUtils.getCanonicalName(float[].class)); + assertEquals("double[]", ClassUtils.getCanonicalName(double[].class)); + + // Arrays of arrays of ... + assertEquals("java.lang.String[][]", ClassUtils.getCanonicalName(String[][].class)); + assertEquals("java.lang.String[][][]", ClassUtils.getCanonicalName(String[][][].class)); + assertEquals("java.lang.String[][][][]", ClassUtils.getCanonicalName(String[][][][].class)); + + // Inner types + class Named { + // empty + } + assertEquals(StringUtils.EMPTY, ClassUtils.getCanonicalName(new Object() { + // empty + }.getClass())); + assertEquals(StringUtils.EMPTY, ClassUtils.getCanonicalName(Named.class)); + assertEquals("org.apache.commons.lang3.ClassUtilsTest.Inner", ClassUtils.getCanonicalName(Inner.class)); + } + + @Test + public void test_getName_Class() { + assertEquals("org.apache.commons.lang3.ClassUtils", ClassUtils.getName(ClassUtils.class)); + assertEquals("java.util.Map$Entry", ClassUtils.getName(Map.Entry.class)); + assertEquals("", ClassUtils.getName((Class<?>) null)); + + assertEquals("[Ljava.lang.String;", ClassUtils.getName(String[].class)); + assertEquals("[Ljava.util.Map$Entry;", ClassUtils.getName(Map.Entry[].class)); + + // Primitives + assertEquals("boolean", ClassUtils.getName(boolean.class)); + assertEquals("byte", ClassUtils.getName(byte.class)); + assertEquals("char", ClassUtils.getName(char.class)); + assertEquals("short", ClassUtils.getName(short.class)); + assertEquals("int", ClassUtils.getName(int.class)); + assertEquals("long", ClassUtils.getName(long.class)); + assertEquals("float", ClassUtils.getName(float.class)); + assertEquals("double", ClassUtils.getName(double.class)); + + // Primitive Arrays + assertEquals("[Z", ClassUtils.getName(boolean[].class)); + assertEquals("[B", ClassUtils.getName(byte[].class)); + assertEquals("[C", ClassUtils.getName(char[].class)); + assertEquals("[S", ClassUtils.getName(short[].class)); + assertEquals("[I", ClassUtils.getName(int[].class)); + assertEquals("[J", ClassUtils.getName(long[].class)); + assertEquals("[F", ClassUtils.getName(float[].class)); + assertEquals("[D", ClassUtils.getName(double[].class)); + + // Arrays of arrays of ... + assertEquals("[[Ljava.lang.String;", ClassUtils.getName(String[][].class)); + assertEquals("[[[Ljava.lang.String;", ClassUtils.getName(String[][][].class)); + assertEquals("[[[[Ljava.lang.String;", ClassUtils.getName(String[][][][].class)); + + // Inner types + class Named { + // empty + } + assertEquals("org.apache.commons.lang3.ClassUtilsTest$2", ClassUtils.getName(new Object() { + // empty + }.getClass())); + assertEquals("org.apache.commons.lang3.ClassUtilsTest$2Named", ClassUtils.getName(Named.class)); + assertEquals("org.apache.commons.lang3.ClassUtilsTest$Inner", ClassUtils.getName(Inner.class)); + } + + @Test + public void test_getName_Object() { + assertEquals("org.apache.commons.lang3.ClassUtils", ClassUtils.getName(new ClassUtils(), "<null>")); + assertEquals("org.apache.commons.lang3.ClassUtilsTest$Inner", ClassUtils.getName(new Inner(), "<null>")); + assertEquals("java.lang.String", ClassUtils.getName("hello", "<null>")); + assertEquals("<null>", ClassUtils.getName(null, "<null>")); + + // Inner types + class Named { + // empty + } + assertEquals("org.apache.commons.lang3.ClassUtilsTest$3", ClassUtils.getName(new Object() { + // empty + }, "<null>")); + assertEquals("org.apache.commons.lang3.ClassUtilsTest$3Named", ClassUtils.getName(new Named(), "<null>")); + assertEquals("org.apache.commons.lang3.ClassUtilsTest$Inner", ClassUtils.getName(new Inner(), "<null>")); + } + + @Test public void test_getPackageCanonicalName_Class() { assertEquals("org.apache.commons.lang3", ClassUtils.getPackageCanonicalName(ClassUtils.class)); assertEquals("org.apache.commons.lang3", ClassUtils.getPackageCanonicalName(ClassUtils[].class)); @@ -237,7 +345,7 @@ public class ClassUtilsTest { assertEquals("org.apache.commons.lang3", ClassUtils.getPackageCanonicalName(Named.class)); assertEquals("org.apache.commons.lang3", ClassUtils.getPackageCanonicalName(Inner.class)); } - + @Test public void test_getPackageCanonicalName_Object() { assertEquals("<null>", ClassUtils.getPackageCanonicalName(null, "<null>")); @@ -257,7 +365,7 @@ public class ClassUtilsTest { assertEquals("org.apache.commons.lang3", ClassUtils.getPackageCanonicalName(new Named(), "<null>")); assertEquals("org.apache.commons.lang3", ClassUtils.getPackageCanonicalName(new Inner(), "<null>")); } - + @Test public void test_getPackageCanonicalName_String() { assertEquals("org.apache.commons.lang3", @@ -343,10 +451,10 @@ public class ClassUtilsTest { class Named { // empty } - assertEquals("ClassUtilsTest.4", ClassUtils.getShortCanonicalName(new Object() { + assertEquals("ClassUtilsTest.7", ClassUtils.getShortCanonicalName(new Object() { // empty }.getClass())); - assertEquals("ClassUtilsTest.4Named", ClassUtils.getShortCanonicalName(Named.class)); + assertEquals("ClassUtilsTest.7Named", ClassUtils.getShortCanonicalName(Named.class)); assertEquals("ClassUtilsTest.Inner", ClassUtils.getShortCanonicalName(Inner.class)); } @@ -363,10 +471,10 @@ public class ClassUtilsTest { class Named { // empty } - assertEquals("ClassUtilsTest.5", ClassUtils.getShortCanonicalName(new Object() { + assertEquals("ClassUtilsTest.8", ClassUtils.getShortCanonicalName(new Object() { // empty }, "<null>")); - assertEquals("ClassUtilsTest.5Named", ClassUtils.getShortCanonicalName(new Named(), "<null>")); + assertEquals("ClassUtilsTest.8Named", ClassUtils.getShortCanonicalName(new Named(), "<null>")); assertEquals("ClassUtilsTest.Inner", ClassUtils.getShortCanonicalName(new Inner(), "<null>")); } @@ -427,58 +535,13 @@ public class ClassUtilsTest { class Named { // empty } - assertEquals("ClassUtilsTest.6", ClassUtils.getShortClassName(new Object() { + assertEquals("ClassUtilsTest.9", ClassUtils.getShortClassName(new Object() { // empty }.getClass())); - assertEquals("ClassUtilsTest.6Named", ClassUtils.getShortClassName(Named.class)); + assertEquals("ClassUtilsTest.9Named", ClassUtils.getShortClassName(Named.class)); assertEquals("ClassUtilsTest.Inner", ClassUtils.getShortClassName(Inner.class)); } - @Test - public void test_getClassName_Class() { - assertEquals("org.apache.commons.lang3.ClassUtils", ClassUtils.getName(ClassUtils.class)); - assertEquals("java.util.Map$Entry", ClassUtils.getName(Map.Entry.class)); - assertEquals("", ClassUtils.getName((Class<?>) null)); - - assertEquals("[Ljava.lang.String;", ClassUtils.getName(String[].class)); - assertEquals("[Ljava.util.Map$Entry;", ClassUtils.getName(Map.Entry[].class)); - - // Primitives - assertEquals("boolean", ClassUtils.getName(boolean.class)); - assertEquals("byte", ClassUtils.getName(byte.class)); - assertEquals("char", ClassUtils.getName(char.class)); - assertEquals("short", ClassUtils.getName(short.class)); - assertEquals("int", ClassUtils.getName(int.class)); - assertEquals("long", ClassUtils.getName(long.class)); - assertEquals("float", ClassUtils.getName(float.class)); - assertEquals("double", ClassUtils.getName(double.class)); - - // Primitive Arrays - assertEquals("[Z", ClassUtils.getName(boolean[].class)); - assertEquals("[B", ClassUtils.getName(byte[].class)); - assertEquals("[C", ClassUtils.getName(char[].class)); - assertEquals("[S", ClassUtils.getName(short[].class)); - assertEquals("[I", ClassUtils.getName(int[].class)); - assertEquals("[J", ClassUtils.getName(long[].class)); - assertEquals("[F", ClassUtils.getName(float[].class)); - assertEquals("[D", ClassUtils.getName(double[].class)); - - // Arrays of arrays of ... - assertEquals("[[Ljava.lang.String;", ClassUtils.getName(String[][].class)); - assertEquals("[[[Ljava.lang.String;", ClassUtils.getName(String[][][].class)); - assertEquals("[[[[Ljava.lang.String;", ClassUtils.getName(String[][][][].class)); - - // Inner types - class Named { - // empty - } - assertEquals("org.apache.commons.lang3.ClassUtilsTest$7", ClassUtils.getName(new Object() { - // empty - }.getClass())); - assertEquals("org.apache.commons.lang3.ClassUtilsTest$7Named", ClassUtils.getName(Named.class)); - assertEquals("org.apache.commons.lang3.ClassUtilsTest$Inner", ClassUtils.getName(Inner.class)); - } - // ------------------------------------------------------------------------- @Test public void test_getShortClassName_Object() { @@ -491,10 +554,10 @@ public class ClassUtilsTest { class Named { // empty } - assertEquals("ClassUtilsTest.8", ClassUtils.getShortClassName(new Object() { + assertEquals("ClassUtilsTest.10", ClassUtils.getShortClassName(new Object() { // empty }, "<null>")); - assertEquals("ClassUtilsTest.8Named", ClassUtils.getShortClassName(new Named(), "<null>")); + assertEquals("ClassUtilsTest.10Named", ClassUtils.getShortClassName(new Named(), "<null>")); assertEquals("ClassUtilsTest.Inner", ClassUtils.getShortClassName(new Inner(), "<null>")); }