Commit aeb49f85 authored by warrenl's avatar warrenl
Browse files

* 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.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@35468 138bc75d-0d04-0410-961f-82ee72b054a4
parent 761cd2c4
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.
......
......@@ -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 "
......
......@@ -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)
......
......@@ -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)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment