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);
+ }
+}