re PR libgcj/35020 (Class.getSimpleName() differs from Sun Java)

2008-05-28  Andrew Haley  <aph@redhat.com>

	* java/lang/Class.java (getSimpleName): Use getEnclosingClass().	
	* testsuite/libjava.lang/PR35020.java: New cases.
	* testsuite/libjava.lang/PR35020.out: New cases.

From-SVN: r136103
This commit is contained in:
Andrew Haley 2008-05-28 15:12:47 +00:00 committed by Andrew Haley
parent 38154e4f0f
commit 71292a0540
6 changed files with 53 additions and 37 deletions

View File

@ -1,3 +1,9 @@
2008-05-28 Andrew Haley <aph@redhat.com>
* java/lang/Class.java (getSimpleName): Use getEnclosingClass().
* testsuite/libjava.lang/PR35020.java: New cases.
* testsuite/libjava.lang/PR35020.out: New cases.
2008-05-22 Andrew Haley <aph@redhat.com>
PR libgcj/35020

View File

@ -1078,26 +1078,24 @@ public final class Class<T>
if (isAnonymousClass())
return "";
if (isArray())
{
return getComponentType().getSimpleName() + "[]";
}
String fullName = getName();
int pos = fullName.lastIndexOf("$");
if (pos == -1)
pos = 0;
else
{
++pos;
while (Character.isDigit(fullName.charAt(pos)))
++pos;
fullName = fullName.substring(pos);
}
return getComponentType().getSimpleName() + "[]";
int packagePos = fullName.lastIndexOf(".");
if (packagePos == -1)
return fullName;
else
return fullName.substring(packagePos + 1);
String fullName = getName();
Class enclosingClass = getEnclosingClass();
if (enclosingClass == null)
// It's a top level class.
return fullName.substring(fullName.lastIndexOf(".") + 1);
fullName = fullName.substring(enclosingClass.getName().length());
// We've carved off the enclosing class name; now we must have '$'
// followed optionally by digits, followed by the class name.
int pos = 1;
while (Character.isDigit(fullName.charAt(pos)))
++pos;
fullName = fullName.substring(pos);
return fullName;
}
/**

View File

@ -1,21 +1,30 @@
class outer$inner
{
};
public class PR35020
{
class inner
{
}
public static void main(String[] args)
{
System.out.println(inner.class.getSimpleName());
System.out.println(PR35020.class.getSimpleName());
System.out.println(Class.class.getSimpleName());
System.out.println((new int[7]).getClass().getSimpleName());
System.out.println((new Object[1][1][1][1][1][1][1][1]).getClass().getSimpleName());
System.out.println((new java.security.PrivilegedAction()
{
public Object run() {
return null;
}
}).getClass().getSimpleName());
}
class PR35020$Inner
{
};
class inner
{
}
public static void main(String[] args)
{
System.out.println(inner.class.getSimpleName());
System.out.println(PR35020.class.getSimpleName());
System.out.println(Class.class.getSimpleName());
System.out.println((new int[7]).getClass().getSimpleName());
System.out.println((new Object[1][1][1][1][1][1][1][1]).getClass().getSimpleName());
System.out.println((new java.security.PrivilegedAction()
{
public Object run() {
return null;
}
}).getClass().getSimpleName());
System.out.println(PR35020$Inner.class.getSimpleName());
System.out.println(outer$inner.class.getSimpleName());
System.out.println(outer$inner.inner.class.getSimpleName());
}
}

View File

@ -4,3 +4,6 @@ Class
int[]
Object[][][][][][][][]
PR35020$Inner
outer$inner
inner