diff options
author | Andrew John Hughes <gnu_andrew@member.fsf.org> | 2007-08-20 00:19:14 +0000 |
---|---|---|
committer | Andrew John Hughes <gnu_andrew@member.fsf.org> | 2007-08-20 00:19:14 +0000 |
commit | 6f39c25f5d46c6d5dab348d213104895b2e71f17 (patch) | |
tree | 7444bc7394aef78c00c66372a0b20cfbaf43d6f0 /vm | |
parent | 6014f44b2aa2ebd23da47bed92c7790ffce0c71e (diff) | |
download | classpath-6f39c25f5d46c6d5dab348d213104895b2e71f17.tar.gz |
2007-08-20 Andrew John Hughes <gnu_andrew@member.fsf.org>
* vm/reference/java/lang/VMClass.java:
(getCanonicalName(Class)): Fix handling of member
classes so we don't fall out of the if block.
(getSimpleName(Class)): Handle class names which include
the $ sign to break up anonymous/inner/member classes.
Diffstat (limited to 'vm')
-rw-r--r-- | vm/reference/java/lang/VMClass.java | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/vm/reference/java/lang/VMClass.java b/vm/reference/java/lang/VMClass.java index 25965068d..66a1e53d2 100644 --- a/vm/reference/java/lang/VMClass.java +++ b/vm/reference/java/lang/VMClass.java @@ -298,12 +298,27 @@ final class VMClass */ static String getSimpleName(Class klass) { + if (isAnonymousClass(klass)) + return ""; if (isArray(klass)) { return getComponentType(klass).getSimpleName() + "[]"; } String fullName = getName(klass); - return fullName.substring(fullName.lastIndexOf(".") + 1); + int pos = fullName.lastIndexOf("$"); + if (pos == -1) + pos = 0; + else + { + ++pos; + while (Character.isDigit(fullName.charAt(pos))) + ++pos; + } + int packagePos = fullName.lastIndexOf(".", pos); + if (packagePos == -1) + return fullName.substring(pos); + else + return fullName.substring(packagePos + 1); } /** @@ -357,6 +372,8 @@ final class VMClass */ static String getCanonicalName(Class klass) { + if (isLocalClass(klass) || isAnonymousClass(klass)) + return null; if (isArray(klass)) { String componentName = getComponentType(klass).getCanonicalName(); @@ -368,9 +385,9 @@ final class VMClass String memberName = getDeclaringClass(klass).getCanonicalName(); if (memberName != null) return memberName + "." + getSimpleName(klass); + else + return memberName; } - if (isLocalClass(klass) || isAnonymousClass(klass)) - return null; return getName(klass); } |