diff options
author | Andrew John Hughes <gnu_andrew@member.fsf.org> | 2006-04-02 21:35:59 +0000 |
---|---|---|
committer | Andrew John Hughes <gnu_andrew@member.fsf.org> | 2006-04-02 21:35:59 +0000 |
commit | a2e25f76b7dfff38c5309f695806ce8882cfd14c (patch) | |
tree | 2dc6dd851bd5862774295978872505445b89b143 | |
parent | 139a0c5f3c4ba93afaf8eb29de10875c6a62e3c7 (diff) | |
download | classpath-a2e25f76b7dfff38c5309f695806ce8882cfd14c.tar.gz |
2006-04-02 Andrew John Hughes <gnu_andrew@member.fsf.org>
* java/io/ObjectOutputStream.java:
(writeObject(Object)): Added enum support.
(writeClassDescriptor(ObjectStreamClass)): Likewise.
* java/io/ObjectStreamClass.java:
(isEnum()): New package-private method.
(setFlags(Class)): Added enum support.
* java/io/ObjectStreamConstants.java:
(SC_ENUM): Added.
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | java/io/ObjectOutputStream.java | 17 | ||||
-rw-r--r-- | java/io/ObjectStreamClass.java | 11 | ||||
-rw-r--r-- | java/io/ObjectStreamConstants.java | 1 |
4 files changed, 37 insertions, 3 deletions
@@ -1,3 +1,14 @@ +2006-04-02 Andrew John Hughes <gnu_andrew@member.fsf.org> + + * java/io/ObjectOutputStream.java: + (writeObject(Object)): Added enum support. + (writeClassDescriptor(ObjectStreamClass)): Likewise. + * java/io/ObjectStreamClass.java: + (isEnum()): New package-private method. + (setFlags(Class)): Added enum support. + * java/io/ObjectStreamConstants.java: + (SC_ENUM): Added. + 2006-03-29 Andrew John Hughes <gnu_andrew@member.fsf.org> * java/io/ObjectInputStream.java: diff --git a/java/io/ObjectOutputStream.java b/java/io/ObjectOutputStream.java index e92f5dc05..eb781acab 100644 --- a/java/io/ObjectOutputStream.java +++ b/java/io/ObjectOutputStream.java @@ -259,7 +259,17 @@ public class ObjectOutputStream extends OutputStream ObjectStreamClass osc = ObjectStreamClass.lookupForClassObject(clazz); if (osc == null) throw new NotSerializableException(clazz.getName()); - + + if (osc.isEnum()) + { + /* TC_ENUM classDesc newHandle enumConstantName */ + realOutput.writeByte(TC_ENUM); + writeObject(osc); + assignNewHandle(obj); + writeObject(((Enum) obj).name()); + break; + } + if ((replacementEnabled || obj instanceof Serializable) && ! replaceDone) { @@ -438,7 +448,10 @@ public class ObjectOutputStream extends OutputStream { realOutput.writeByte(TC_CLASSDESC); realOutput.writeUTF(osc.getName()); - realOutput.writeLong(osc.getSerialVersionUID()); + if (osc.isEnum()) + realOutput.writeLong(0L); + else + realOutput.writeLong(osc.getSerialVersionUID()); assignNewHandle(osc); int flags = osc.getFlags(); diff --git a/java/io/ObjectStreamClass.java b/java/io/ObjectStreamClass.java index 1df7c7ea0..1ca78ed9f 100644 --- a/java/io/ObjectStreamClass.java +++ b/java/io/ObjectStreamClass.java @@ -226,6 +226,12 @@ public class ObjectStreamClass implements Serializable return (flags & ObjectStreamConstants.SC_EXTERNALIZABLE) != 0; } + // Returns true iff the class that this ObjectStreamClass represents + // implements Externalizable. + boolean isEnum() + { + return (flags & ObjectStreamConstants.SC_ENUM) != 0; + } // Returns the <code>ObjectStreamClass</code> that represents the // class that is the superclass of the class this @@ -594,6 +600,9 @@ outer: if (writeObjectMethod != null) flags |= ObjectStreamConstants.SC_WRITE_METHOD; + + if (cl.isEnum() || cl == Enum.class) + flags |= ObjectStreamConstants.SC_ENUM; } @@ -603,7 +612,7 @@ outer: { SetAccessibleAction setAccessible = new SetAccessibleAction(); - if (!isSerializable() || isExternalizable()) + if (!isSerializable() || isExternalizable() || isEnum()) { fields = NO_FIELDS; return; diff --git a/java/io/ObjectStreamConstants.java b/java/io/ObjectStreamConstants.java index 5bf463d3d..c4af4a03f 100644 --- a/java/io/ObjectStreamConstants.java +++ b/java/io/ObjectStreamConstants.java @@ -98,6 +98,7 @@ public interface ObjectStreamConstants byte SC_SERIALIZABLE = 0x02; byte SC_EXTERNALIZABLE = 0x04; byte SC_BLOCK_DATA = 0x08; + byte SC_ENUM = 0x10; SerializablePermission SUBSTITUTION_PERMISSION = new SerializablePermission("enableSubstitution"); |