summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2006-03-05 18:20:02 +0000
committerTom Tromey <tromey@redhat.com>2006-03-05 18:20:02 +0000
commit598152c0a5f8d6f7ac8811002e4aaa168a8fa1b5 (patch)
tree0c40e68cbef064a25cfcddaee56752e77cc91179
parentb69fa52dce34b8400f06843fc311dbb86fd25730 (diff)
downloadclasspath-598152c0a5f8d6f7ac8811002e4aaa168a8fa1b5.tar.gz
* 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.
-rw-r--r--ChangeLog11
-rw-r--r--gnu/java/lang/ClassHelper.java28
-rw-r--r--vm/reference/java/lang/reflect/Constructor.java6
-rw-r--r--vm/reference/java/lang/reflect/Field.java4
-rw-r--r--vm/reference/java/lang/reflect/Method.java57
5 files changed, 51 insertions, 55 deletions
diff --git a/ChangeLog b/ChangeLog
index 68558f709..56b7d6da7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>