Hi, attached is a fix for the method Class.getSimpleName(), together with a small testcase. The old implementation failed on usual class names, as well as on inner classes.
Please comment/commit. This is my first direct classpath contribution. Do I need to sign any copyright assignment? Regards, Sebastian -- tarent Gesellschaft für Softwareentwicklung und IT-Beratung mbH Heilsbachstr. 24, 53123 Bonn | Poststr. 4-5, 10178 Berlin fon: +49(228) / 52675-0 | fon: +49(30) / 27594853 fax: +49(228) / 52675-25 | fax: +49(30) / 78709617 durchwahl: +49(228) / 52675-17 | mobil: +49(171) / 7673249 Geschäftsführer: Boris Esser, Elmar Geese, Thomas Müller-Ackermann HRB AG Bonn 5168 Ust-ID: DE122264941
Index: vm/reference/java/lang/VMClass.java =================================================================== RCS file: /sources/classpath/classpath/vm/reference/java/lang/VMClass.java,v retrieving revision 1.20 diff -u -r1.20 VMClass.java --- vm/reference/java/lang/VMClass.java 18 Sep 2007 21:52:38 -0000 1.20 +++ vm/reference/java/lang/VMClass.java 15 Apr 2008 21:09:51 -0000 @@ -304,19 +304,11 @@ } String fullName = getName(klass); 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); + if (pos == -1) { + pos = fullName.lastIndexOf("."); + } + pos++; + return fullName.substring(pos); } /** Index: testsuite/java.lang/SimpleNameTest.java =================================================================== RCS file: testsuite/java.lang/SimpleNameTest.java diff -N testsuite/java.lang/SimpleNameTest.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ testsuite/java.lang/SimpleNameTest.java 15 Apr 2008 21:09:51 -0000 @@ -0,0 +1,40 @@ +package simplename; + +public class SimpleNameTest +{ + public static void main(final String[] args) { + new SimpleNameTest(); + } + + private SimpleNameTest() { + if ("SimpleNameTest".equals(SimpleNameTest.class.getSimpleName())) + passed("SimpleNameTest.class.getSimpleName() is \"SimpleNameTest\""); + else + failed("SimpleNameTest.class.getSimpleName() should be \"SimpleNameTest\", but is "+SimpleNameTest.class.getSimpleName()); + + Object anonymous = new Object(){}; + if ("".equals(anonymous.getClass().getSimpleName())) + passed("anonymous.getClass().getSimpleName() is \"\""); + else + failed("anonymous.getClass().getSimpleName() should be \"\", but is "+anonymous.getClass().getSimpleName()); + + + if ("Inner".equals(Inner.class.getSimpleName())) + passed("Inner.class.getSimpleName() is \"Inner\""); + else + failed("Inner.class.getSimpleName() should be \"Inner\", but is "+Inner.class.getSimpleName()); + + } + + public class Inner { + + } + + static void passed(String msg) { + System.out.println("PASSED: "+msg); + } + + static void failed(String msg) { + System.out.println("FAILED: "+msg); + } +}