diff options
author | Guilhem Lavaux <guilhem@kaffe.org> | 2004-02-28 21:28:53 +0000 |
---|---|---|
committer | Michael Koch <mkoch@gcc.gnu.org> | 2004-02-28 21:28:53 +0000 |
commit | 646e3290103bd932139f0aa5758258ea364b88a8 (patch) | |
tree | d0c8fb679a0816081a9e684d6257cbb4ca08a0e4 /libjava/java/io/ObjectStreamClass.java | |
parent | ca67f278502e6f32aab0dd6ba4715762691f690d (diff) | |
download | gcc-646e3290103bd932139f0aa5758258ea364b88a8.zip gcc-646e3290103bd932139f0aa5758258ea364b88a8.tar.gz gcc-646e3290103bd932139f0aa5758258ea364b88a8.tar.bz2 |
2004-02-28 Guilhem Lavaux <guilhem@kaffe.org>
* java/io/ObjectInputStream.java
(readClassDescriptor): Keep elements of the mapping non null.
(checkTypeConsistency): New method.
(readFields): Fixed main loop and base logic. Small reindentation.
* java/io/ObjectStreamField.java
(lookupField): New method to update the field reference.
(checkFieldType): New method.
* java/io/ObjectStreamClass.java
(setClass, setFields): Call lookupField when building the field
database. Check the real field type.
From-SVN: r78627
Diffstat (limited to 'libjava/java/io/ObjectStreamClass.java')
-rw-r--r-- | libjava/java/io/ObjectStreamClass.java | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/libjava/java/io/ObjectStreamClass.java b/libjava/java/io/ObjectStreamClass.java index 429db18..d080f28 100644 --- a/libjava/java/io/ObjectStreamClass.java +++ b/libjava/java/io/ObjectStreamClass.java @@ -327,7 +327,7 @@ public class ObjectStreamClass implements Serializable i = 0; j = 0; k = 0; while (i < fields.length && j < exportedFields.length) { - int comp = fields[i].getName().compareTo(exportedFields[j].getName()); + int comp = fields[i].compareTo(exportedFields[j]); if (comp < 0) { @@ -344,10 +344,27 @@ public class ObjectStreamClass implements Serializable newFieldList[k] = exportedFields[j]; newFieldList[k].setPersistent(true); newFieldList[k].setToSet(false); + try + { + newFieldList[k].lookupField(clazz); + newFieldList[k].checkFieldType(); + } + catch (NoSuchFieldException _) + { + } j++; } else { + try + { + exportedFields[j].lookupField(clazz); + exportedFields[j].checkFieldType(); + } + catch (NoSuchFieldException _) + { + } + if (!fields[i].getType().equals(exportedFields[j].getType())) throw new InvalidClassException ("serialPersistentFields must be compatible with" + @@ -554,6 +571,19 @@ outer: if (fields != null) { Arrays.sort (fields); + // Retrieve field reference. + for (int i=0; i < fields.length; i++) + { + try + { + fields[i].lookupField(cl); + } + catch (NoSuchFieldException _) + { + fields[i].setToSet(false); + } + } + calculateOffsets(); return; } @@ -798,7 +828,7 @@ outer: fieldsArray = new ObjectStreamField[ o.length ]; System.arraycopy(o, 0, fieldsArray, 0, o.length); - + return fieldsArray; } |