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 {
+    
+  }
+}

Reply via email to