PatchSet 4942 
Date: 2004/07/12 03:40:55
Author: dalibor
Branch: HEAD
Tag: (none) 
Log:
Resynced with GNU Classpath: serialization fixes

2004-07-11  Dalibor Topic  <[EMAIL PROTECTED]>

        * libraries/javalib/java/io/ObjectInputStream.java,
        libraries/javalib/java/io/ObjectStreamClass.java:
        Resynced with GNU Classpath.

        2004-07-10  Jeroen Frijters  <[EMAIL PROTECTED]>

        * java/io/ObjectInputStream.java (readObject): Delegate instantation
        of Externalizable classes to ObjectStreamClass.
        * java/io/ObjectStreamClass.java (newInstance): New method to
        instantiate Externalizable (while ignoring the accessibility of
        the constructor). (constructor): New field to cache the constructor.

Members: 
        ChangeLog:1.2507->1.2508 
        libraries/javalib/java/io/ObjectInputStream.java:1.37->1.38 
        libraries/javalib/java/io/ObjectStreamClass.java:1.23->1.24 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.2507 kaffe/ChangeLog:1.2508
--- kaffe/ChangeLog:1.2507      Mon Jul 12 03:33:30 2004
+++ kaffe/ChangeLog     Mon Jul 12 03:40:55 2004
@@ -14,6 +14,20 @@
 
 2004-07-11  Dalibor Topic  <[EMAIL PROTECTED]>
 
+       * libraries/javalib/java/io/ObjectInputStream.java,
+       libraries/javalib/java/io/ObjectStreamClass.java:
+       Resynced with GNU Classpath.
+
+       2004-07-10  Jeroen Frijters  <[EMAIL PROTECTED]>
+
+        * java/io/ObjectInputStream.java (readObject): Delegate instantation
+        of Externalizable classes to ObjectStreamClass.
+        * java/io/ObjectStreamClass.java (newInstance): New method to
+        instantiate Externalizable (while ignoring the accessibility of
+        the constructor). (constructor): New field to cache the constructor.
+
+2004-07-11  Dalibor Topic  <[EMAIL PROTECTED]>
+
        *  libraries/javalib/java/io/BufferedInputStream.java:
        Resynced with GNU Classpath.
 
Index: kaffe/libraries/javalib/java/io/ObjectInputStream.java
diff -u kaffe/libraries/javalib/java/io/ObjectInputStream.java:1.37 
kaffe/libraries/javalib/java/io/ObjectInputStream.java:1.38
--- kaffe/libraries/javalib/java/io/ObjectInputStream.java:1.37 Thu Jun  3 21:57:05 
2004
+++ kaffe/libraries/javalib/java/io/ObjectInputStream.java      Mon Jul 12 03:40:58 
2004
@@ -275,29 +275,7 @@
              
              if (osc.realClassIsExternalizable)
                {
-                 Externalizable obj = null;
-                 
-                 try
-                   {
-                     obj = (Externalizable)clazz.newInstance();
-                   }
-                 catch (InstantiationException e)
-                   {
-                     throw new ClassNotFoundException
-                       ("Instance of " + clazz + " could not be created");
-                   }
-                 catch (IllegalAccessException e)
-                   {
-                     throw new ClassNotFoundException
-                       ("Instance of " + clazz + " could not be created because class 
or "
-                        + "zero-argument constructor is not accessible");
-                   }
-                 catch (NoSuchMethodError e)
-                   {
-                     throw new ClassNotFoundException
-                       ("Instance of " + clazz
-                        + " could not be created because zero-argument constructor is 
not defined");
-                   }
+                 Externalizable obj = osc.newInstance();
                  
                  int handle = assignNewHandle(obj);
                  
Index: kaffe/libraries/javalib/java/io/ObjectStreamClass.java
diff -u kaffe/libraries/javalib/java/io/ObjectStreamClass.java:1.23 
kaffe/libraries/javalib/java/io/ObjectStreamClass.java:1.24
--- kaffe/libraries/javalib/java/io/ObjectStreamClass.java:1.23 Tue May 18 03:35:07 
2004
+++ kaffe/libraries/javalib/java/io/ObjectStreamClass.java      Mon Jul 12 03:40:58 
2004
@@ -833,6 +833,54 @@
     return fieldsArray;
   }
 
+  /**
+   * Returns a new instance of the Class this ObjectStreamClass corresponds
+   * to.
+   * Note that this should only be used for Externalizable classes.
+   *
+   * @return A new instance.
+   */
+  Externalizable newInstance() throws InvalidClassException
+  {
+    synchronized(this)
+    {
+       if (constructor == null)
+       {
+           try
+           {
+               final Constructor c = clazz.getConstructor(new Class[0]);
+
+               AccessController.doPrivileged(new PrivilegedAction()
+               {
+                   public Object run()
+                   {
+                       c.setAccessible(true);
+                       return null;
+                   }
+               });
+
+               constructor = c;
+           }
+           catch(NoSuchMethodException x)
+           {
+               throw new InvalidClassException(clazz.getName(),
+                   "No public zero-argument constructor");
+           }
+       }
+    }
+
+    try
+    {
+       return (Externalizable)constructor.newInstance(null);
+    }
+    catch(Throwable t)
+    {
+       throw (InvalidClassException)
+           new InvalidClassException(clazz.getName(),
+                    "Unable to instantiate").initCause(t);
+    }
+  }
+
   public static final ObjectStreamField[] NO_FIELDS = {};
 
   private static Hashtable classLookupTable = new Hashtable();
@@ -862,6 +910,7 @@
   boolean realClassIsExternalizable;
   ObjectStreamField[] fieldMapping;
   Class firstNonSerializableParent;
+  private Constructor constructor;  // default constructor for Externalizable
 
   boolean isProxyClass = false;
 

_______________________________________________
kaffe mailing list
[EMAIL PROTECTED]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to