diff options
author | Jeroen Frijters <jeroen@frijters.net> | 2004-02-06 13:27:36 +0000 |
---|---|---|
committer | Michael Koch <mkoch@gcc.gnu.org> | 2004-02-06 13:27:36 +0000 |
commit | 2941cc061a7a0cafdfa0aec2be9387c92b590625 (patch) | |
tree | fb6663e4a39d87f86d5337e6215ad1769df33c95 /libjava/java/io/ObjectStreamField.java | |
parent | eb457a7a0791d32d9b0df5ff8425abe59a9bee75 (diff) | |
download | gcc-2941cc061a7a0cafdfa0aec2be9387c92b590625.zip gcc-2941cc061a7a0cafdfa0aec2be9387c92b590625.tar.gz gcc-2941cc061a7a0cafdfa0aec2be9387c92b590625.tar.bz2 |
ObjectInputStream.java: Made all calls to dumpElement[ln] conditional on dump flag.
2004-02-06 Jeroen Frijters <jeroen@frijters.net>
* java/io/ObjectInputStream.java: Made all calls
to dumpElement[ln] conditional on dump flag. (readObject): Changed to
use cached info from ObjectStreamClass. (readClassDescriptor):
Cache more information in ObjectStreamClass. (processResolution,
readFields): Use cached info from ObjectStreamClass.
(newObject): Throw exception instead of returning null for failure.
(getField, getMethod, callReadMethod, setBooleanField, setByteField,
setCharField, setDoubleField, setFloatField, setIntField,
setLongField, setShortField, setObjectField, readObjectParams):
Removed. (dumpElement, dumpElementln): Removed dump flag condition
check.
* java/io/ObjectStreamField.java (hasReadMethod): Removed.
(setClass): Added call to cacheMethods() (findMethod): New method.
(cacheMethods): New method. (ObjectStreamClass): Added call to
cacheMethods(). (setFields): Cache fields. (getClassUID): Use
AccessController.doPrivileged to invoke setAccessible.
(readObjectMethod, readResolveMethod, realClassIsSerializable,
realClassIsExternalizable, fieldMapping, firstNonSerializableParent):
New fields.
* java/io/ObjectStreamField.java (ObjectStreamField): New constructor.
(ObjectStreamField): Removed FIXME workaround. (getTypeString,
isPrimitive): Made safe for cases where type == null.
(setBooleanField, setByteField, setCharField, setShortField,
setIntField, setLongField, setFloatField, setDoubleField,
setObjectField): New methods.
From-SVN: r77395
Diffstat (limited to 'libjava/java/io/ObjectStreamField.java')
-rw-r--r-- | libjava/java/io/ObjectStreamField.java | 125 |
1 files changed, 120 insertions, 5 deletions
diff --git a/libjava/java/io/ObjectStreamField.java b/libjava/java/io/ObjectStreamField.java index cb2fdbc..603fe30 100644 --- a/libjava/java/io/ObjectStreamField.java +++ b/libjava/java/io/ObjectStreamField.java @@ -38,6 +38,8 @@ exception statement from your version. */ package java.io; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; import gnu.java.lang.reflect.TypeSignature; /** @@ -54,6 +56,14 @@ public class ObjectStreamField implements Comparable private boolean unshared; private boolean persistent = false; private boolean toset = true; + private Field field; + + ObjectStreamField (Field field) + { + this (field.getName(), field.getType()); + this.field = field; + toset = !Modifier.isFinal(field.getModifiers()); + } /** * This constructor creates an ObjectStreamField instance @@ -105,7 +115,6 @@ public class ObjectStreamField implements Comparable } catch(ClassNotFoundException e) { - type = Object.class; //FIXME: ??? } } @@ -128,7 +137,6 @@ public class ObjectStreamField implements Comparable } catch(ClassNotFoundException e) { - type = Object.class; // ALSO FIXME } } @@ -176,7 +184,7 @@ public class ObjectStreamField implements Comparable public String getTypeString () { // use intern() - if (this.type.isPrimitive()) + if (isPrimitive()) return null; return typename.intern(); } @@ -225,7 +233,7 @@ public class ObjectStreamField implements Comparable */ public boolean isPrimitive () { - return type.isPrimitive (); + return typename.length() == 1; } public int compareTo (Object o) @@ -299,5 +307,112 @@ public class ObjectStreamField implements Comparable { return "ObjectStreamField< " + type + " " + name + " >"; } -} + final void setBooleanField(Object obj, boolean val) + { + try + { + field.setBoolean(obj, val); + } + catch(IllegalAccessException x) + { + throw new InternalError(x.getMessage()); + } + } + + final void setByteField(Object obj, byte val) + { + try + { + field.setByte(obj, val); + } + catch(IllegalAccessException x) + { + throw new InternalError(x.getMessage()); + } + } + + final void setCharField(Object obj, char val) + { + try + { + field.setChar(obj, val); + } + catch(IllegalAccessException x) + { + throw new InternalError(x.getMessage()); + } + } + + final void setShortField(Object obj, short val) + { + try + { + field.setShort(obj, val); + } + catch(IllegalAccessException x) + { + throw new InternalError(x.getMessage()); + } + } + + final void setIntField(Object obj, int val) + { + try + { + field.setInt(obj, val); + } + catch(IllegalAccessException x) + { + throw new InternalError(x.getMessage()); + } + } + + final void setLongField(Object obj, long val) + { + try + { + field.setLong(obj, val); + } + catch(IllegalAccessException x) + { + throw new InternalError(x.getMessage()); + } + } + + final void setFloatField(Object obj, float val) + { + try + { + field.setFloat(obj, val); + } + catch(IllegalAccessException x) + { + throw new InternalError(x.getMessage()); + } + } + + final void setDoubleField(Object obj, double val) + { + try + { + field.setDouble(obj, val); + } + catch(IllegalAccessException x) + { + throw new InternalError(x.getMessage()); + } + } + + final void setObjectField(Object obj, Object val) + { + try + { + field.set(obj, val); + } + catch(IllegalAccessException x) + { + throw new InternalError(x.getMessage()); + } + } +} |