Index: vm/reference/java/lang/reflect/Method.java =================================================================== RCS file: /cvsroot/classpath/classpath/vm/reference/java/lang/reflect/Method.java,v retrieving revision 1.12 diff -u -r1.12 Method.java --- vm/reference/java/lang/reflect/Method.java 29 Mar 2004 07:07:40 -0000 1.12 +++ vm/reference/java/lang/reflect/Method.java 16 Oct 2004 08:04:51 -0000 @@ -212,15 +212,15 @@ // 128 is a reasonable buffer initial size for constructor StringBuffer sb = new StringBuffer(128); Modifier.toString(getModifiers(), sb).append(' '); - sb.append(getReturnType().getName()).append(' '); + sb.append(getUserTypeName(getReturnType().getName())).append(' '); sb.append(getDeclaringClass().getName()).append('.'); sb.append(getName()).append('('); Class[] c = getParameterTypes(); if (c.length > 0) { - sb.append(c[0].getName()); + sb.append(getUserTypeName(c[0].getName())); for (int i = 1; i < c.length; i++) - sb.append(',').append(c[i].getName()); + sb.append(',').append(getUserTypeName(c[i].getName())); } sb.append(')'); c = getExceptionTypes(); @@ -233,6 +233,55 @@ 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.