diff options
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | gnu/java/lang/ClassHelper.java | 28 | ||||
-rw-r--r-- | vm/reference/java/lang/reflect/Constructor.java | 6 | ||||
-rw-r--r-- | vm/reference/java/lang/reflect/Field.java | 4 | ||||
-rw-r--r-- | vm/reference/java/lang/reflect/Method.java | 57 |
5 files changed, 51 insertions, 55 deletions
@@ -1,3 +1,14 @@ +2006-03-05 Tom Tromey <tromey@redhat.com> + + * vm/reference/java/lang/reflect/Constructor.java (toString): Use + ClassHelper.getUserName. + * vm/reference/java/lang/reflect/Method.java (toString): Use + ClassHelper.getUserName. + (getUserTypeName): Removed. + * gnu/java/lang/ClassHelper.java (getUserName): New method. + * vm/reference/java/lang/reflect/Field.java (toString): Use + ClassHelper.getUserName. + 2006-03-05 Olivier Jolly <olivier.jolly@pcedev.com> Fixes PR 22813 diff --git a/gnu/java/lang/ClassHelper.java b/gnu/java/lang/ClassHelper.java index 14c8a39c4..49dce21ea 100644 --- a/gnu/java/lang/ClassHelper.java +++ b/gnu/java/lang/ClassHelper.java @@ -81,6 +81,34 @@ public class ClassHelper return name.substring(lastInd + 1); } + /** + * Return the name of the class as written by the user. + * This is used by the various reflection toString methods. + * It differs from {@link Class#getName()} in that it prints + * arrays with trailing "[]"s. Note that it does not treat + * member classes specially, so a dollar sign may still appear + * in the result. This is intentional. + * @param klass the class + * @return a pretty form of the class' name + */ + public static String getUserName(Class klass) + { + int arrayCount = 0; + while (klass.isArray()) + { + ++arrayCount; + klass = klass.getComponentType(); + } + String name = klass.getName(); + if (arrayCount == 0) + return name; + StringBuilder b = new StringBuilder(name.length() + 2 * arrayCount); + b.append(name); + for (int i = 0; i < arrayCount; ++i) + b.append("[]"); + return b.toString(); + } + /** Cache of methods found in getAllMethods(). */ private static Map allMethods = new HashMap(); diff --git a/vm/reference/java/lang/reflect/Constructor.java b/vm/reference/java/lang/reflect/Constructor.java index cb633db11..3789fbb9a 100644 --- a/vm/reference/java/lang/reflect/Constructor.java +++ b/vm/reference/java/lang/reflect/Constructor.java @@ -38,6 +38,8 @@ exception statement from your version. */ package java.lang.reflect; +import gnu.java.lang.ClassHelper; + import java.util.Arrays; /** @@ -190,9 +192,9 @@ extends AccessibleObject implements Member Class[] c = getParameterTypes(); if (c.length > 0) { - sb.append(c[0].getName()); + sb.append(ClassHelper.getUserName(c[0])); for (int i = 1; i < c.length; i++) - sb.append(',').append(c[i].getName()); + sb.append(',').append(ClassHelper.getUserName(c[i])); } sb.append(')'); c = getExceptionTypes(); diff --git a/vm/reference/java/lang/reflect/Field.java b/vm/reference/java/lang/reflect/Field.java index 85e76d634..5475aa272 100644 --- a/vm/reference/java/lang/reflect/Field.java +++ b/vm/reference/java/lang/reflect/Field.java @@ -38,6 +38,8 @@ exception statement from your version. */ package java.lang.reflect; +import gnu.java.lang.ClassHelper; + /** * The Field class represents a member variable of a class. It also allows * dynamic access to a member, via reflection. This works for both @@ -171,7 +173,7 @@ extends AccessibleObject implements Member // 64 is a reasonable buffer initial size for field StringBuffer sb = new StringBuffer(64); Modifier.toString(getModifiers(), sb).append(' '); - sb.append(getType().getName()).append(' '); + sb.append(ClassHelper.getUserName(getType())).append(' '); sb.append(getDeclaringClass().getName()).append('.'); sb.append(getName()); return sb.toString(); diff --git a/vm/reference/java/lang/reflect/Method.java b/vm/reference/java/lang/reflect/Method.java index 27256770e..4da8d5c66 100644 --- a/vm/reference/java/lang/reflect/Method.java +++ b/vm/reference/java/lang/reflect/Method.java @@ -38,6 +38,8 @@ exception statement from your version. */ package java.lang.reflect; +import gnu.java.lang.ClassHelper; + import java.util.Arrays; /** @@ -212,15 +214,15 @@ extends AccessibleObject implements Member // 128 is a reasonable buffer initial size for constructor StringBuffer sb = new StringBuffer(128); Modifier.toString(getModifiers(), sb).append(' '); - sb.append(getUserTypeName(getReturnType().getName())).append(' '); + sb.append(ClassHelper.getUserName(getReturnType())).append(' '); sb.append(getDeclaringClass().getName()).append('.'); sb.append(getName()).append('('); Class[] c = getParameterTypes(); if (c.length > 0) { - sb.append(getUserTypeName(c[0].getName())); + sb.append(ClassHelper.getUserName(c[0])); for (int i = 1; i < c.length; i++) - sb.append(',').append(getUserTypeName(c[i].getName())); + sb.append(',').append(ClassHelper.getUserName(c[i])); } sb.append(')'); c = getExceptionTypes(); @@ -233,55 +235,6 @@ extends AccessibleObject implements Member return sb.toString(); } - private static String getUserTypeName(String typeSpec) - { - int pos = 0; - String typeName = ""; - String arrayPart = ""; - - while (typeSpec.charAt(pos) == '[') - { - arrayPart += "[]"; - ++pos; - } - - switch (typeSpec.charAt(pos)) - { - case 'Z': - typeName = "boolean"; - break; - case 'B': - typeName = "byte"; - break; - case 'C': - typeName = "char"; - break; - case 'D': - typeName = "double"; - break; - case 'F': - typeName = "float"; - break; - case 'I': - typeName = "int"; - break; - case 'J': - typeName = "long"; - break; - case 'S': - typeName = "short"; - break; - case 'L': - typeName = typeSpec.substring(pos + 1, typeSpec.length() - 1); - break; - default: - typeName = typeSpec; - break; - } - - return typeName + arrayPart; - } - /** * Invoke the method. Arguments are automatically unwrapped and widened, * and the result is automatically wrapped, if needed.<p> |