summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew John Hughes <gnu_andrew@member.fsf.org>2006-04-02 21:35:59 +0000
committerAndrew John Hughes <gnu_andrew@member.fsf.org>2006-04-02 21:35:59 +0000
commita2e25f76b7dfff38c5309f695806ce8882cfd14c (patch)
tree2dc6dd851bd5862774295978872505445b89b143
parent139a0c5f3c4ba93afaf8eb29de10875c6a62e3c7 (diff)
downloadclasspath-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--ChangeLog11
-rw-r--r--java/io/ObjectOutputStream.java17
-rw-r--r--java/io/ObjectStreamClass.java11
-rw-r--r--java/io/ObjectStreamConstants.java1
4 files changed, 37 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index ae4b05ee0..d94a10929 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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");