ObjectInputStream.java (readFields): Turn off readDataFromBlock while reading via...
authorWarren Levy <warrenl@cygnus.com>
Fri, 4 Aug 2000 00:42:20 +0000 (00:42 +0000)
committerWarren Levy <warrenl@gcc.gnu.org>
Fri, 4 Aug 2000 00:42:20 +0000 (00:42 +0000)
* java/io/ObjectInputStream.java (readFields): Turn off
readDataFromBlock while reading via GetField.
(GetField$1.get(String, Object)): Pass Class of default value to
getField.
(getField): Allow for null default values.

* java/io/ObjectOutputStream.java: Fixed typo in comment.
(PutField$1.put): Fixed calls of checkType in most of the put
methods to pass the correct parameter.
(PutField$1.put(String, Object)): Allow for null value arg.
(PutField$1.write): Turn off writeDataAsBlocks while writing via
PutField.

* java/io/ObjectStreamClass.java (serialPersistentFields): Fixed
typo in spec'ed field name.
(getSerialPersistentFields): Changed spelling of method to match
the correct spelling of the spec'ed field name.

More serialization fixes per Mauve errors.

From-SVN: r35468

libjava/ChangeLog
libjava/java/io/ObjectInputStream.java
libjava/java/io/ObjectOutputStream.java
libjava/java/io/ObjectStreamClass.java

index 3f7688dff7436c1f78a993f195edf4812bb7840a..aa1ee6f4e661636219d92efd2e413076275a0f68 100644 (file)
@@ -1,3 +1,23 @@
+2000-08-03  Warren Levy  <warrenl@cygnus.com>
+
+       * java/io/ObjectInputStream.java (readFields): Turn off
+       readDataFromBlock while reading via GetField.
+       (GetField$1.get(String, Object)): Pass Class of default value to
+       getField.
+       (getField): Allow for null default values.
+
+       * java/io/ObjectOutputStream.java: Fixed typo in comment.
+       (PutField$1.put): Fixed calls of checkType in most of the put
+       methods to pass the correct parameter.
+       (PutField$1.put(String, Object)): Allow for null value arg.
+       (PutField$1.write): Turn off writeDataAsBlocks while writing via
+       PutField.
+
+       * java/io/ObjectStreamClass.java (serialPersistentFields): Fixed
+       typo in spec'ed field name.
+       (getSerialPersistentFields): Changed spelling of method to match
+       the correct spelling of the spec'ed field name.
+
 2000-08-03  Tom Tromey  <tromey@cygnus.com>
 
        * Makefile.in: Rebuilt.
index 7855480acb346308c3c61a8d39e48a1cab7a2d87..53353dcffe7285427bbc05eefea3d6b681bc692a 100644 (file)
@@ -700,9 +700,15 @@ public class ObjectInputStream extends InputStream
     final ObjectStreamClass clazz = this.currentObjectStreamClass;
     final byte[] prim_field_data = new byte[clazz.primFieldSize];
     final Object[] objs = new Object[clazz.objectFieldCount];
+
+    // Apparently Block data is not used with GetField as per
+    // empirical evidence against JDK 1.2.  Also see Mauve test
+    // java.io.ObjectInputOutput.Test.GetPutField.
+    setBlockDataMode (false);
     readFully (prim_field_data);
     for (int i = 0; i < objs.length; ++ i)
       objs[i] = readObject ();
+    setBlockDataMode (true);
 
     return new GetField ()
     {
@@ -843,7 +849,8 @@ public class ObjectInputStream extends InputStream
       public Object get (String name, Object defvalue)
        throws IOException, IllegalArgumentException
       {
-       ObjectStreamField field = getField (name, null);
+       ObjectStreamField field =
+         getField (name, defvalue == null ? null : defvalue.getClass ());
 
        if (field == null)
          return defvalue;
@@ -862,7 +869,7 @@ public class ObjectInputStream extends InputStream
        Class field_type = field.getType ();
 
        if (type == field_type ||
-           (type != null && field_type.isPrimitive ()))
+           (type == null && ! field_type.isPrimitive ()))
          return field;
 
        throw new IllegalArgumentException ("Field requested is of type "
index 9c758b0dfd56d1700370b7f0edfcb6e68ee7667c..c4ffc8c6d1e027ee01c9d023de8cda34678ea6e0 100644 (file)
@@ -138,7 +138,7 @@ public class ObjectOutputStream extends OutputStream
      output stream by writing out information about its class, then
      writing out each of the objects non-transient, non-static
      fields.  If any of these fields are other objects,
-     the are written out in the same manner.
+     they are written out in the same manner.
 
      This method can be overriden by a class by implementing
      <code>private void writeObject (ObjectOutputStream)</code>.
@@ -846,7 +846,7 @@ public class ObjectOutputStream extends OutputStream
          {
            ObjectStreamField field
              = currentObjectStreamClass.getField (name);
-           checkType (field, 'B');
+           checkType (field, 'C');
            int off = field.getOffset ();
            prim_field_data[off++] = (byte)(value >>> 8);
            prim_field_data[off] = (byte)value;
@@ -857,7 +857,7 @@ public class ObjectOutputStream extends OutputStream
          {
            ObjectStreamField field
              = currentObjectStreamClass.getField (name);
-           checkType (field, 'B');
+           checkType (field, 'D');
            int off = field.getOffset ();
            long l_value = Double.doubleToLongBits (value);
            prim_field_data[off++] = (byte)(l_value >>> 52);
@@ -875,7 +875,7 @@ public class ObjectOutputStream extends OutputStream
          {
            ObjectStreamField field
              = currentObjectStreamClass.getField (name);
-           checkType (field, 'B');
+           checkType (field, 'F');
            int off = field.getOffset ();
            int i_value = Float.floatToIntBits (value);
            prim_field_data[off++] = (byte)(i_value >>> 24);
@@ -889,7 +889,7 @@ public class ObjectOutputStream extends OutputStream
          {
            ObjectStreamField field
              = currentObjectStreamClass.getField (name);
-           checkType (field, 'B');
+           checkType (field, 'I');
            int off = field.getOffset ();
            prim_field_data[off++] = (byte)(value >>> 24);
            prim_field_data[off++] = (byte)(value >>> 16);
@@ -902,7 +902,7 @@ public class ObjectOutputStream extends OutputStream
          {
            ObjectStreamField field
              = currentObjectStreamClass.getField (name);
-           checkType (field, 'B');
+           checkType (field, 'J');
            int off = field.getOffset ();
            prim_field_data[off++] = (byte)(value >>> 52);
            prim_field_data[off++] = (byte)(value >>> 48);
@@ -919,7 +919,7 @@ public class ObjectOutputStream extends OutputStream
          {
            ObjectStreamField field
              = currentObjectStreamClass.getField (name);
-           checkType (field, 'B');
+           checkType (field, 'S');
            int off = field.getOffset ();
            prim_field_data[off++] = (byte)(value >>> 8);
            prim_field_data[off] = (byte)value;
@@ -930,16 +930,22 @@ public class ObjectOutputStream extends OutputStream
          {
            ObjectStreamField field
              = currentObjectStreamClass.getField (name);
-           if (! field.getType ().isAssignableFrom (value.getClass ()))
+           if (value != null &&
+               ! field.getType ().isAssignableFrom (value.getClass ()))
              throw new IllegalArgumentException ();
            objs[field.getOffset ()] = value;
          }
 
        public void write (ObjectOutput out) throws IOException
          {
+           // Apparently Block data is not used with PutField as per
+           // empirical evidence against JDK 1.2.  Also see Mauve test
+           // java.io.ObjectInputOutput.Test.GetPutField.
+           setBlockDataMode (false);
            out.write (prim_field_data);
            for (int i = 0; i < objs.length; ++ i)
              out.writeObject (objs[i]);
+           setBlockDataMode (true);
          }
 
        private void checkType (ObjectStreamField field, char type)
index f39d365ad274a0d149c33430f9281525371a71ea..5bd867fa5ee8174bc786c3c6779753afdca42ee9 100644 (file)
@@ -350,15 +350,15 @@ public class ObjectStreamClass implements Serializable
 
     try
     {
-      Field serialPersistantFields
-       = cl.getDeclaredField ("serialPersistantFields");
-      int modifiers = serialPersistantFields.getModifiers ();
+      Field serialPersistentFields
+       = cl.getDeclaredField ("serialPersistentFields");
+      int modifiers = serialPersistentFields.getModifiers ();
 
       if (Modifier.isStatic (modifiers)
          && Modifier.isFinal (modifiers)
          && Modifier.isPrivate (modifiers))
       {
-       fields = getSerialPersistantFields (cl);
+       fields = getSerialPersistentFields (cl);
        Arrays.sort (fields);
        calculateOffsets ();
        return;
@@ -569,15 +569,15 @@ public class ObjectStreamClass implements Serializable
   }
 
   // Returns the value of CLAZZ's private static final field named
-  // `serialPersistantFields'.
-  private ObjectStreamField[] getSerialPersistantFields (Class clazz)
+  // `serialPersistentFields'.
+  private ObjectStreamField[] getSerialPersistentFields (Class clazz)
   {
     ObjectStreamField[] o = null;
     try
       {
        // Use getDeclaredField rather than getField for the same reason
        // as above in getDefinedSUID.
-       Field f = clazz.getDeclaredField ("getSerialPersistantFields");
+       Field f = clazz.getDeclaredField ("getSerialPersistentFields");
        o = (ObjectStreamField[])f.get (null);
       }
     catch (java.lang.NoSuchFieldException e)