From: Warren Levy Date: Fri, 4 Aug 2000 00:42:20 +0000 (+0000) Subject: ObjectInputStream.java (readFields): Turn off readDataFromBlock while reading via... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9b4773cbba17889649a50c84ba520c0bfca73ec5;p=gcc.git ObjectInputStream.java (readFields): Turn off readDataFromBlock while reading via GetField. * 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 --- diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 3f7688dff74..aa1ee6f4e66 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,23 @@ +2000-08-03 Warren Levy + + * 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 * Makefile.in: Rebuilt. diff --git a/libjava/java/io/ObjectInputStream.java b/libjava/java/io/ObjectInputStream.java index 7855480acb3..53353dcffe7 100644 --- a/libjava/java/io/ObjectInputStream.java +++ b/libjava/java/io/ObjectInputStream.java @@ -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 " diff --git a/libjava/java/io/ObjectOutputStream.java b/libjava/java/io/ObjectOutputStream.java index 9c758b0dfd5..c4ffc8c6d1e 100644 --- a/libjava/java/io/ObjectOutputStream.java +++ b/libjava/java/io/ObjectOutputStream.java @@ -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 private void writeObject (ObjectOutputStream). @@ -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) diff --git a/libjava/java/io/ObjectStreamClass.java b/libjava/java/io/ObjectStreamClass.java index f39d365ad27..5bd867fa5ee 100644 --- a/libjava/java/io/ObjectStreamClass.java +++ b/libjava/java/io/ObjectStreamClass.java @@ -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)