Hi.
Now, the method getSimpleName() is merged with the one of glibgcj. (Not
changing behaviour, but avoiding recursion)
The Testcase has additional checks for array types and is converted to
mauve, now. I could not find regression due to my changes
--Sebastian
Sebastian Mancke schrieb:
>
>
> Mark Wielaard schrieb:
>> Hi,
>
>> On Thu, 2008-04-17 at 00:50 +0100, Andrew John Hughes wrote:
>>> As to your contribution, the Classpath part (i.e. the java.lang.Class
>>> changes, Mauve has different contribution rules) looks minor enough to
>>> not require an assignment, but I'll let Mark (CCed) answer that for
>>> definite. However, if you intend to do further Classpath
>>> contributions, I'd suggest sorting out the necessary paperwork with
>>> the FSF; you need to assign copyright to them. Either Mark or I
>>> should be able to send you the form.
>> Yes, you are right. This is small enough to be "obvious", but it would
>> be nice to have paperwork on file with the FSF stating your willingness
>> to contribute (larger) patches in the future. I'll send you the request
>> form.
> I have sent the request to the FSF.
>
>> BTW. libgcj has a slightly different implementation of
>> Class.getSimpleName() that might be worth merging with the classpath
>> version: http://gcc.gnu.org/ml/java-patches/2006-q3/msg00192.html
> Yes, looks good.
>
> --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 19 Apr 2008 15:19:00 -0000
@@ -296,27 +296,43 @@
*/
static String getSimpleName(Class klass)
{
+ int arrayCount = 0;
+ while (klass.isArray())
+ {
+ klass = klass.getComponentType();
+ ++arrayCount;
+ }
+ // now klass is the component type
+
+ String simpleComponentName = null;
if (isAnonymousClass(klass))
- return "";
- if (isArray(klass))
{
- return getComponentType(klass).getSimpleName() + "[]";
+ simpleComponentName = "";
}
- String fullName = getName(klass);
- int pos = fullName.lastIndexOf("$");
- if (pos == -1)
- pos = 0;
else
{
- ++pos;
- while (Character.isDigit(fullName.charAt(pos)))
- ++pos;
+ String fullName = getName(klass);
+ int pos = fullName.lastIndexOf("$");
+ if (pos != -1)
+ { //inner class or local class
+ // skip digits of local classes
+ while (Character.isDigit(fullName.charAt(pos+1)))
+ pos++;
+ }
+ else
+ {
+ pos = fullName.lastIndexOf(".");
+ }
+ simpleComponentName = fullName.substring(pos+1);
}
- int packagePos = fullName.lastIndexOf(".", pos);
- if (packagePos == -1)
- return fullName.substring(pos);
- else
- return fullName.substring(packagePos + 1);
+
+ if (arrayCount == 0)
+ return simpleComponentName;
+
+ StringBuffer sb = new StringBuffer(simpleComponentName);
+ while (arrayCount-- > 0)
+ sb.append("[]");
+ return sb.toString();
}
/**
Index: gnu/testlet/java/lang/Class/SimpleNameTest.java
===================================================================
RCS file: gnu/testlet/java/lang/Class/SimpleNameTest.java
diff -N gnu/testlet/java/lang/Class/SimpleNameTest.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gnu/testlet/java/lang/Class/SimpleNameTest.java 19 Apr 2008 15:18:25
-0000
@@ -0,0 +1,82 @@
+// Copyright (C) 2008 Sebastian Mancke, Tarent GmbH <[EMAIL PROTECTED]>
+
+// This file is part of Mauve.
+
+// Mauve is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// Mauve is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Mauve; see the file COPYING. If not, write to
+// the Free Software Foundation, 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+package gnu.testlet.java.lang.Class;
+
+import gnu.testlet.TestHarness;
+import gnu.testlet.Testlet;
+
+/**
+ * Tests the functionality of the Class#getSimpleName method.
+ */
+public class SimpleNameTest implements Testlet
+{
+
+ protected static TestHarness harness;
+
+ public void test (TestHarness theHarness)
+ {
+ this.harness = theHarness;
+ testBasics();
+ testAnonymous();
+ testNested();
+ testArrayTypes();
+ }
+
+ private void testBasics()
+ {
+ harness.checkPoint("testBasics (Object)");
+ harness.check("Object".equals(Object.class.getSimpleName()));
+
+ harness.checkPoint("testBasics (SimpleNameTest.class.getSimpleName())");
+
harness.check("SimpleNameTest".equals(SimpleNameTest.class.getSimpleName()));
+ }
+
+ private void testAnonymous()
+ {
+ Object anonymous = new Object(){};
+
+ harness.checkPoint("testAnonymous");
+ harness.check("".equals(anonymous.getClass().getSimpleName()));
+ }
+
+ private void testNested()
+ {
+ harness.checkPoint("testNested (Inner)");
+ harness.check("Inner".equals(Inner.class.getSimpleName()));
+
+ harness.checkPoint("testNested (Local)");
+ class Local {
+ }
+ harness.check("Local".equals(Local.class.getSimpleName()));
+ }
+
+ private void testArrayTypes()
+ {
+ harness.checkPoint("testArrayTypes (1 dimension)");
+ harness.check("String[]".equals(String[].class.getSimpleName()));
+
+ harness.checkPoint("testArrayTypes (3 dimension)");
+ harness.check("String[][][]".equals(String[][][].class.getSimpleName()));
+ }
+
+ public class Inner {
+
+ }
+}