summaryrefslogtreecommitdiff
path: root/vm
diff options
context:
space:
mode:
authorAndrew John Hughes <gnu_andrew@member.fsf.org>2007-08-20 00:19:14 +0000
committerAndrew John Hughes <gnu_andrew@member.fsf.org>2007-08-20 00:19:14 +0000
commit6f39c25f5d46c6d5dab348d213104895b2e71f17 (patch)
tree7444bc7394aef78c00c66372a0b20cfbaf43d6f0 /vm
parent6014f44b2aa2ebd23da47bed92c7790ffce0c71e (diff)
downloadclasspath-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.java23
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);
}