summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwarrenl <warrenl@138bc75d-0d04-0410-961f-82ee72b054a4>2000-08-04 00:42:20 +0000
committerwarrenl <warrenl@138bc75d-0d04-0410-961f-82ee72b054a4>2000-08-04 00:42:20 +0000
commitaeb49f85ad090a49ff7f21534b10e2f016b26594 (patch)
tree8ab868484bc80edbae9a9b855c3efeebafc7bf00
parent761cd2c44aab46a8c13c6f3e8661402b19ff8efc (diff)
downloadgcc-aeb49f85ad090a49ff7f21534b10e2f016b26594.tar.gz
* 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
-rw-r--r--libjava/ChangeLog20
-rw-r--r--libjava/java/io/ObjectInputStream.java11
-rw-r--r--libjava/java/io/ObjectOutputStream.java22
-rw-r--r--libjava/java/io/ObjectStreamClass.java14
4 files changed, 50 insertions, 17 deletions
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 <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.
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
<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)
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)