You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by te...@apache.org on 2007/01/04 18:47:05 UTC
svn commit: r492652 [3/13] -
/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/EmulatedFields.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/EmulatedFields.java?view=diff&rev=492652&r1=492651&r2=492652
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/EmulatedFields.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/EmulatedFields.java Thu Jan 4 09:47:01 2007
@@ -17,7 +17,6 @@
package java.io;
-
/**
* An EmulatedFields is an object that represents a set of emulated fields for
* an object being dumped or loaded. It allows objects to be dumped with a shape
@@ -28,575 +27,598 @@
* @see EmulatedFieldsForLoading
* @see EmulatedFieldsForDumping
*/
-
class EmulatedFields {
- static class ObjectSlot {
- // A slot is a field plus its value
- ObjectStreamField field; // Field descriptor
-
- Object fieldValue; // Actual value this emulated field holds
-
- boolean defaulted = true; // If this field has a default value (true)
- // or something has been assigned (false)
-
- /**
- * Returns the descriptor for this emulated field.
- *
- * @return the field descriptor
- */
- public ObjectStreamField getField() {
- return field;
- }
-
- /**
- * Returns the value held by this emulated field.
- *
- * @return the field value
- */
- public Object getFieldValue() {
- return fieldValue;
- }
- }
-
- private ObjectSlot[] slotsToSerialize; // The collection of slots the
- // receiver represents
-
- private ObjectStreamField[] declaredFields;
-
- /**
- * Constructs a new instance of EmulatedFields.
- *
- * @param fields
- * an array of ObjectStreamFields, which describe the fields to
- * be emulated (names, types, etc).
- * @param declared
- * an array of ObjectStreamFields, which describe the declared
- * fields.
- */
- public EmulatedFields(ObjectStreamField[] fields,
- ObjectStreamField[] declared) {
- super();
- // We assume the slots are already sorted in the right shape for dumping
- buildSlots(fields);
- declaredFields = declared;
- }
-
- /**
- * Build emulated slots that correspond to emulated fields. A slot is a
- * field descriptor (ObjectStreamField) plus the actual value it holds.
- *
- * @param fields
- * an array of ObjectStreamField, which describe the fields to be
- * emulated (names, types, etc).
- */
- private void buildSlots(ObjectStreamField[] fields) {
- slotsToSerialize = new ObjectSlot[fields.length];
- for (int i = 0; i < fields.length; i++) {
- ObjectSlot s = new ObjectSlot();
- slotsToSerialize[i] = s;
- s.field = fields[i];
- }
- // We assume the slots are already sorted in the right shape for dumping
- }
-
- /**
- * Return a boolean indicating if the field named <code>name</code> has
- * been assigned a value explicitly (false) or if it still holds a default
- * value for the type (true) because it hasn't been assigned to yet.
- *
- * @param name
- * a String, the name of the field to test
- * @return <code>true</code> if <code>name</code> still holds its
- * default value, <code>false</code> otherwise
- *
- * @throws IllegalArgumentException
- * If <code>name</code> is null
- */
- public boolean defaulted(String name) throws IllegalArgumentException {
- ObjectSlot slot = findSlot(name, null);
- if (slot != null)
- return slot.defaulted;
- throw new IllegalArgumentException();
- }
-
- /**
- * Find and return an ObjectSlot that corresponds to a field named
- * <code>fieldName</code> and type <code>fieldType</code>. If the field
- * type <code>fieldType</code> corresponds to a primitive type, the field
- * type has to match exactly or <code>null</code> is returned. If the
- * field type <code>fieldType</code> corresponds to an object type, the
- * field type has to be compatible in terms of assignment, or null is
- * returned. If <code>fieldType</code> is <code>null</code>, no such
- * compatibility checking is performed and the slot is returned.
- *
- * @param fieldName
- * A String, the name of the field to find
- * @param fieldType
- * A Class, the type of the field. This will be used to test
- * compatibility. If null, no testing is done, the corresponding
- * slot is returned.
- * @return If there is no field with that name, or no compatible field
- * (relative to <code>fieldType</code>)
- */
- private ObjectSlot findSlot(String fieldName, Class<?> fieldType) {
- boolean isPrimitive = fieldType != null && fieldType.isPrimitive();
-
- for (int i = 0; i < slotsToSerialize.length; i++) {
- ObjectSlot slot = slotsToSerialize[i];
- if (slot.field.getName().equals(fieldName))
- if (isPrimitive) {
- // Looking for a primitive type field. Types must match
- // *exactly*
- if (slot.field.getType() == fieldType)
- return slot;
- } else {
- // Looking for a non-primitive type field.
- if (fieldType == null)
- return slot; // Null means we take anything
- // Types must be compatible (assignment)
- if (slot.field.getType().isAssignableFrom(fieldType))
- return slot;
- }
- }
-
- if (declaredFields != null) {
- for (int i = 0; i < declaredFields.length; i++) {
- ObjectStreamField field = declaredFields[i];
- if (field.getName().equals(fieldName)) {
- if (isPrimitive ? field.getType() == fieldType
- : fieldType == null
- || field.getType().isAssignableFrom(
- fieldType)) {
- ObjectSlot slot = new ObjectSlot();
- slot.field = field;
- slot.defaulted = true;
- return slot;
- }
- }
- }
- }
- return null;
- }
-
- /**
- * Find and return the byte value of a given field named <code>name</code>
- * in the receiver. If the field has not been assigned any value yet, the
- * default value <code>defaultValue</code> is returned instead.
- *
- * @param name
- * A String, the name of the field to find
- * @param defaultValue
- * Return value in case the field has not been assigned to yet.
- * @return the value of the given field if it has been assigned, the default
- * value otherwise
- *
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- public byte get(String name, byte defaultValue)
- throws IllegalArgumentException {
- ObjectSlot slot = findSlot(name, Byte.TYPE);
- if (slot != null) // if not initialized yet, we give the default value
- return slot.defaulted ? defaultValue : ((Byte) slot.fieldValue)
- .byteValue();
- throw new IllegalArgumentException();
- }
-
- /**
- * Find and return the char value of a given field named <code>name</code>
- * in the receiver. If the field has not been assigned any value yet, the
- * default value <code>defaultValue</code> is returned instead.
- *
- * @param name
- * A String, the name of the field to find
- * @param defaultValue
- * Return value in case the field has not been assigned to yet.
- * @return the value of the given field if it has been assigned, the default
- * value otherwise
- *
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- public char get(String name, char defaultValue)
- throws IllegalArgumentException {
- ObjectSlot slot = findSlot(name, Character.TYPE);
- if (slot != null) // if not initialized yet, we give the default value
- return slot.defaulted ? defaultValue
- : ((Character) slot.fieldValue).charValue();
- throw new IllegalArgumentException();
- }
-
- /**
- * Find and return the double value of a given field named <code>name</code>
- * in the receiver. If the field has not been assigned any value yet, the
- * default value <code>defaultValue</code> is returned instead.
- *
- * @param name
- * A String, the name of the field to find
- * @param defaultValue
- * Return value in case the field has not been assigned to yet.
- * @return the value of the given field if it has been assigned, the default
- * value otherwise
- *
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- public double get(String name, double defaultValue)
- throws IllegalArgumentException {
- ObjectSlot slot = findSlot(name, Double.TYPE);
- if (slot != null) // if not initialized yet, we give the default value
- return slot.defaulted ? defaultValue : ((Double) slot.fieldValue)
- .doubleValue();
- throw new IllegalArgumentException();
- }
-
- /**
- * Find and return the float value of a given field named <code>name</code>
- * in the receiver. If the field has not been assigned any value yet, the
- * default value <code>defaultValue</code> is returned instead.
- *
- * @param name
- * A String, the name of the field to find
- * @param defaultValue
- * Return value in case the field has not been assigned to yet.
- * @return the value of the given field if it has been assigned, the default
- * value otherwise
- *
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- public float get(String name, float defaultValue)
- throws IllegalArgumentException {
- ObjectSlot slot = findSlot(name, Float.TYPE);
- if (slot != null) // if not initialized yet, we give the default value
- return slot.defaulted ? defaultValue : ((Float) slot.fieldValue)
- .floatValue();
- throw new IllegalArgumentException();
- }
-
- /**
- * Find and return the int value of a given field named <code>name</code>
- * in the receiver. If the field has not been assigned any value yet, the
- * default value <code>defaultValue</code> is returned instead.
- *
- * @param name
- * A String, the name of the field to find
- * @param defaultValue
- * Return value in case the field has not been assigned to yet.
- * @return the value of the given field if it has been assigned, the default
- * value otherwise
- *
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- public int get(String name, int defaultValue)
- throws IllegalArgumentException {
- ObjectSlot slot = findSlot(name, Integer.TYPE);
- if (slot != null) // if not initialized yet, we give the default value
- return slot.defaulted ? defaultValue : ((Integer) slot.fieldValue)
- .intValue();
- throw new IllegalArgumentException();
- }
-
- /**
- * Find and return the long value of a given field named <code>name</code>
- * in the receiver. If the field has not been assigned any value yet, the
- * default value <code>defaultValue</code> is returned instead.
- *
- * @param name
- * A String, the name of the field to find
- * @param defaultValue
- * Return value in case the field has not been assigned to yet.
- * @return the value of the given field if it has been assigned, the default
- * value otherwise
- *
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- public long get(String name, long defaultValue)
- throws IllegalArgumentException {
- ObjectSlot slot = findSlot(name, Long.TYPE);
- if (slot != null) // if not initialized yet, we give the default value
- return slot.defaulted ? defaultValue : ((Long) slot.fieldValue)
- .longValue();
- throw new IllegalArgumentException();
- }
-
- /**
- * Find and return the Object value of a given field named <code>name</code>
- * in the receiver. If the field has not been assigned any value yet, the
- * default value <code>defaultValue</code> is returned instead.
- *
- * @param name
- * A String, the name of the field to find
- * @param defaultValue
- * Return value in case the field has not been assigned to yet.
- * @return the value of the given field if it has been assigned, the default
- * value otherwise
- *
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- public Object get(String name, Object defaultValue)
- throws IllegalArgumentException {
- ObjectSlot slot = findSlot(name, null);
- if (slot != null && !slot.field.getType().isPrimitive()) // if not
- // initialized
- // yet, we
- // give the
- // default
- // value
- return slot.defaulted ? defaultValue : slot.fieldValue;
- throw new IllegalArgumentException();
- }
-
- /**
- * Find and return the short value of a given field named <code>name</code>
- * in the receiver. If the field has not been assigned any value yet, the
- * default value <code>defaultValue</code> is returned instead.
- *
- * @param name
- * A String, the name of the field to find
- * @param defaultValue
- * Return value in case the field has not been assigned to yet.
- * @return the value of the given field if it has been assigned, the default
- * value otherwise
- *
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- public short get(String name, short defaultValue)
- throws IllegalArgumentException {
- ObjectSlot slot = findSlot(name, Short.TYPE);
- if (slot != null) // if not initialized yet, we give the default value
- return slot.defaulted ? defaultValue : ((Short) slot.fieldValue)
- .shortValue();
- throw new IllegalArgumentException();
- }
-
- /**
- * Find and return the boolean value of a given field named
- * <code>name</code> in the receiver. If the field has not been assigned
- * any value yet, the default value <code>defaultValue</code> is returned
- * instead.
- *
- * @param name
- * A String, the name of the field to find
- * @param defaultValue
- * Return value in case the field has not been assigned to yet.
- * @return the value of the given field if it has been assigned, the default
- * value otherwise
- *
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- public boolean get(String name, boolean defaultValue)
- throws IllegalArgumentException {
- ObjectSlot slot = findSlot(name, Boolean.TYPE);
- if (slot != null) // if not initialized yet, we give the default value
- return slot.defaulted ? defaultValue : ((Boolean) slot.fieldValue)
- .booleanValue();
- throw new IllegalArgumentException();
- }
-
- /**
- * Find and set the byte value of a given field named <code>name</code> in
- * the receiver.
- *
- * @param name
- * A String, the name of the field to set
- * @param value
- * New value for the field.
- *
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- public void put(String name, byte value) throws IllegalArgumentException {
- ObjectSlot slot = findSlot(name, Byte.TYPE);
- if (slot != null) {
- slot.fieldValue = Byte.valueOf(value);
- slot.defaulted = false; // No longer default value
- } else
- throw new IllegalArgumentException();
- }
-
- /**
- * Find and set the char value of a given field named <code>name</code> in
- * the receiver.
- *
- * @param name
- * A String, the name of the field to set
- * @param value
- * New value for the field.
- *
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- public void put(String name, char value) throws IllegalArgumentException {
- ObjectSlot slot = findSlot(name, Character.TYPE);
- if (slot != null) {
- slot.fieldValue = Character.valueOf(value);
- slot.defaulted = false; // No longer default value
- } else
- throw new IllegalArgumentException();
- }
-
- /**
- * Find and set the double value of a given field named <code>name</code>
- * in the receiver.
- *
- * @param name
- * A String, the name of the field to set
- * @param value
- * New value for the field.
- *
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- public void put(String name, double value) throws IllegalArgumentException {
- ObjectSlot slot = findSlot(name, Double.TYPE);
- if (slot != null) {
- slot.fieldValue = Double.valueOf(value);
- slot.defaulted = false; // No longer default value
- } else
- throw new IllegalArgumentException();
- }
-
- /**
- * Find and set the float value of a given field named <code>name</code>
- * in the receiver.
- *
- * @param name
- * A String, the name of the field to set
- * @param value
- * New value for the field.
- *
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- public void put(String name, float value) throws IllegalArgumentException {
- ObjectSlot slot = findSlot(name, Float.TYPE);
- if (slot != null) {
- slot.fieldValue = Float.valueOf(value);
- slot.defaulted = false; // No longer default value
- } else
- throw new IllegalArgumentException();
- }
-
- /**
- * Find and set the int value of a given field named <code>name</code> in
- * the receiver.
- *
- * @param name
- * A String, the name of the field to set
- * @param value
- * New value for the field.
- *
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- public void put(String name, int value) throws IllegalArgumentException {
- ObjectSlot slot = findSlot(name, Integer.TYPE);
- if (slot != null) {
- slot.fieldValue = Integer.valueOf(value);
- slot.defaulted = false; // No longer default value
- } else
- throw new IllegalArgumentException();
- }
-
- /**
- * Find and set the long value of a given field named <code>name</code> in
- * the receiver.
- *
- * @param name
- * A String, the name of the field to set
- * @param value
- * New value for the field.
- *
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- public void put(String name, long value) throws IllegalArgumentException {
- ObjectSlot slot = findSlot(name, Long.TYPE);
- if (slot != null) {
- slot.fieldValue = Long.valueOf(value);
- slot.defaulted = false; // No longer default value
- } else
- throw new IllegalArgumentException();
- }
-
- /**
- * Find and set the Object value of a given field named <code>name</code>
- * in the receiver.
- *
- * @param name
- * A String, the name of the field to set
- * @param value
- * New value for the field.
- *
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- public void put(String name, Object value) throws IllegalArgumentException {
- Class<?> valueClass = null;
- if (value != null)
- valueClass = value.getClass();
- ObjectSlot slot = findSlot(name, valueClass);
- if (slot != null) {
- slot.fieldValue = value;
- slot.defaulted = false; // No longer default value
- } else
- throw new IllegalArgumentException();
- }
-
- /**
- * Find and set the short value of a given field named <code>name</code>
- * in the receiver.
- *
- * @param name
- * A String, the name of the field to set
- * @param value
- * New value for the field.
- *
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- public void put(String name, short value) throws IllegalArgumentException {
- ObjectSlot slot = findSlot(name, Short.TYPE);
- if (slot != null) {
- slot.fieldValue = Short.valueOf(value);
- slot.defaulted = false; // No longer default value
- } else
- throw new IllegalArgumentException();
- }
-
- /**
- * Find and set the boolean value of a given field named <code>name</code>
- * in the receiver.
- *
- * @param name
- * A String, the name of the field to set
- * @param value
- * New value for the field.
- *
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- public void put(String name, boolean value) throws IllegalArgumentException {
- ObjectSlot slot = findSlot(name, Boolean.TYPE);
- if (slot != null) {
- slot.fieldValue = Boolean.valueOf(value);
- slot.defaulted = false; // No longer default value
- } else
- throw new IllegalArgumentException();
- }
-
- /**
- * Return the array of ObjectSlot the receiver represents.
- *
- * @return array of ObjectSlot the receiver represents.
- */
- public ObjectSlot[] slots() {
- return slotsToSerialize;
- }
+
+ // A slot is a field plus its value
+ static class ObjectSlot {
+
+ // Field descriptor
+ ObjectStreamField field;
+
+ // Actual value this emulated field holds
+ Object fieldValue;
+
+ // If this field has a default value (true) or something has been
+ // assigned (false)
+ boolean defaulted = true;
+
+ /**
+ * Returns the descriptor for this emulated field.
+ *
+ * @return the field descriptor
+ */
+ public ObjectStreamField getField() {
+ return field;
+ }
+
+ /**
+ * Returns the value held by this emulated field.
+ *
+ * @return the field value
+ */
+ public Object getFieldValue() {
+ return fieldValue;
+ }
+ }
+
+ // The collection of slots the receiver represents
+ private ObjectSlot[] slotsToSerialize;
+
+ private ObjectStreamField[] declaredFields;
+
+ /**
+ * Constructs a new instance of EmulatedFields.
+ *
+ * @param fields
+ * an array of ObjectStreamFields, which describe the fields to
+ * be emulated (names, types, etc).
+ * @param declared
+ * an array of ObjectStreamFields, which describe the declared
+ * fields.
+ */
+ public EmulatedFields(ObjectStreamField[] fields,
+ ObjectStreamField[] declared) {
+ super();
+ // We assume the slots are already sorted in the right shape for dumping
+ buildSlots(fields);
+ declaredFields = declared;
+ }
+
+ /**
+ * Build emulated slots that correspond to emulated fields. A slot is a
+ * field descriptor (ObjectStreamField) plus the actual value it holds.
+ *
+ * @param fields
+ * an array of ObjectStreamField, which describe the fields to be
+ * emulated (names, types, etc).
+ */
+ private void buildSlots(ObjectStreamField[] fields) {
+ slotsToSerialize = new ObjectSlot[fields.length];
+ for (int i = 0; i < fields.length; i++) {
+ ObjectSlot s = new ObjectSlot();
+ slotsToSerialize[i] = s;
+ s.field = fields[i];
+ }
+ // We assume the slots are already sorted in the right shape for dumping
+ }
+
+ /**
+ * Return a boolean indicating if the field named <code>name</code> has
+ * been assigned a value explicitly (false) or if it still holds a default
+ * value for the type (true) because it hasn't been assigned to yet.
+ *
+ * @param name
+ * a String, the name of the field to test
+ * @return <code>true</code> if <code>name</code> still holds its
+ * default value, <code>false</code> otherwise
+ *
+ * @throws IllegalArgumentException
+ * If <code>name</code> is null
+ */
+ public boolean defaulted(String name) throws IllegalArgumentException {
+ ObjectSlot slot = findSlot(name, null);
+ if (slot == null) {
+ throw new IllegalArgumentException();
+ }
+ return slot.defaulted;
+ }
+
+ /**
+ * Find and return an ObjectSlot that corresponds to a field named
+ * <code>fieldName</code> and type <code>fieldType</code>. If the field
+ * type <code>fieldType</code> corresponds to a primitive type, the field
+ * type has to match exactly or <code>null</code> is returned. If the
+ * field type <code>fieldType</code> corresponds to an object type, the
+ * field type has to be compatible in terms of assignment, or null is
+ * returned. If <code>fieldType</code> is <code>null</code>, no such
+ * compatibility checking is performed and the slot is returned.
+ *
+ * @param fieldName
+ * A String, the name of the field to find
+ * @param fieldType
+ * A Class, the type of the field. This will be used to test
+ * compatibility. If null, no testing is done, the corresponding
+ * slot is returned.
+ * @return If there is no field with that name, or no compatible field
+ * (relative to <code>fieldType</code>)
+ */
+ private ObjectSlot findSlot(String fieldName, Class<?> fieldType) {
+ boolean isPrimitive = fieldType != null && fieldType.isPrimitive();
+
+ for (int i = 0; i < slotsToSerialize.length; i++) {
+ ObjectSlot slot = slotsToSerialize[i];
+ if (slot.field.getName().equals(fieldName)) {
+ if (isPrimitive) {
+ // Looking for a primitive type field. Types must match
+ // *exactly*
+ if (slot.field.getType() == fieldType) {
+ return slot;
+ }
+ } else {
+ // Looking for a non-primitive type field.
+ if (fieldType == null) {
+ return slot; // Null means we take anything
+ }
+ // Types must be compatible (assignment)
+ if (slot.field.getType().isAssignableFrom(fieldType)) {
+ return slot;
+ }
+ }
+ }
+ }
+
+ if (declaredFields != null) {
+ for (int i = 0; i < declaredFields.length; i++) {
+ ObjectStreamField field = declaredFields[i];
+ if (field.getName().equals(fieldName)) {
+ if (isPrimitive ? field.getType() == fieldType
+ : fieldType == null
+ || field.getType().isAssignableFrom(
+ fieldType)) {
+ ObjectSlot slot = new ObjectSlot();
+ slot.field = field;
+ slot.defaulted = true;
+ return slot;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Find and return the byte value of a given field named <code>name</code>
+ * in the receiver. If the field has not been assigned any value yet, the
+ * default value <code>defaultValue</code> is returned instead.
+ *
+ * @param name
+ * A String, the name of the field to find
+ * @param defaultValue
+ * Return value in case the field has not been assigned to yet.
+ * @return the value of the given field if it has been assigned, the default
+ * value otherwise
+ *
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ public byte get(String name, byte defaultValue)
+ throws IllegalArgumentException {
+ ObjectSlot slot = findSlot(name, Byte.TYPE);
+ // if not initialized yet, we give the default value
+ if (slot == null) {
+ throw new IllegalArgumentException();
+ }
+ return slot.defaulted ? defaultValue : ((Byte) slot.fieldValue)
+ .byteValue();
+ }
+
+ /**
+ * Find and return the char value of a given field named <code>name</code>
+ * in the receiver. If the field has not been assigned any value yet, the
+ * default value <code>defaultValue</code> is returned instead.
+ *
+ * @param name
+ * A String, the name of the field to find
+ * @param defaultValue
+ * Return value in case the field has not been assigned to yet.
+ * @return the value of the given field if it has been assigned, the default
+ * value otherwise
+ *
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ public char get(String name, char defaultValue)
+ throws IllegalArgumentException {
+ ObjectSlot slot = findSlot(name, Character.TYPE);
+ // if not initialized yet, we give the default value
+ if (slot == null) {
+ throw new IllegalArgumentException();
+ }
+ return slot.defaulted ? defaultValue : ((Character) slot.fieldValue)
+ .charValue();
+ }
+
+ /**
+ * Find and return the double value of a given field named <code>name</code>
+ * in the receiver. If the field has not been assigned any value yet, the
+ * default value <code>defaultValue</code> is returned instead.
+ *
+ * @param name
+ * A String, the name of the field to find
+ * @param defaultValue
+ * Return value in case the field has not been assigned to yet.
+ * @return the value of the given field if it has been assigned, the default
+ * value otherwise
+ *
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ public double get(String name, double defaultValue)
+ throws IllegalArgumentException {
+ ObjectSlot slot = findSlot(name, Double.TYPE);
+ // if not initialized yet, we give the default value
+ if (slot == null) {
+ throw new IllegalArgumentException();
+ }
+ return slot.defaulted ? defaultValue : ((Double) slot.fieldValue)
+ .doubleValue();
+ }
+
+ /**
+ * Find and return the float value of a given field named <code>name</code>
+ * in the receiver. If the field has not been assigned any value yet, the
+ * default value <code>defaultValue</code> is returned instead.
+ *
+ * @param name
+ * A String, the name of the field to find
+ * @param defaultValue
+ * Return value in case the field has not been assigned to yet.
+ * @return the value of the given field if it has been assigned, the default
+ * value otherwise
+ *
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ public float get(String name, float defaultValue)
+ throws IllegalArgumentException {
+ ObjectSlot slot = findSlot(name, Float.TYPE);
+ // if not initialized yet, we give the default value
+ if (slot == null) {
+ throw new IllegalArgumentException();
+ }
+ return slot.defaulted ? defaultValue : ((Float) slot.fieldValue)
+ .floatValue();
+ }
+
+ /**
+ * Find and return the int value of a given field named <code>name</code>
+ * in the receiver. If the field has not been assigned any value yet, the
+ * default value <code>defaultValue</code> is returned instead.
+ *
+ * @param name
+ * A String, the name of the field to find
+ * @param defaultValue
+ * Return value in case the field has not been assigned to yet.
+ * @return the value of the given field if it has been assigned, the default
+ * value otherwise
+ *
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ public int get(String name, int defaultValue)
+ throws IllegalArgumentException {
+ ObjectSlot slot = findSlot(name, Integer.TYPE);
+ // if not initialized yet, we give the default value
+ if (slot == null) {
+ throw new IllegalArgumentException();
+ }
+ return slot.defaulted ? defaultValue : ((Integer) slot.fieldValue)
+ .intValue();
+ }
+
+ /**
+ * Find and return the long value of a given field named <code>name</code>
+ * in the receiver. If the field has not been assigned any value yet, the
+ * default value <code>defaultValue</code> is returned instead.
+ *
+ * @param name
+ * A String, the name of the field to find
+ * @param defaultValue
+ * Return value in case the field has not been assigned to yet.
+ * @return the value of the given field if it has been assigned, the default
+ * value otherwise
+ *
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ public long get(String name, long defaultValue)
+ throws IllegalArgumentException {
+ ObjectSlot slot = findSlot(name, Long.TYPE);
+ // if not initialized yet, we give the default value
+ if (slot == null) {
+ throw new IllegalArgumentException();
+ }
+ return slot.defaulted ? defaultValue : ((Long) slot.fieldValue)
+ .longValue();
+ }
+
+ /**
+ * Find and return the Object value of a given field named <code>name</code>
+ * in the receiver. If the field has not been assigned any value yet, the
+ * default value <code>defaultValue</code> is returned instead.
+ *
+ * @param name
+ * A String, the name of the field to find
+ * @param defaultValue
+ * Return value in case the field has not been assigned to yet.
+ * @return the value of the given field if it has been assigned, the default
+ * value otherwise
+ *
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ public Object get(String name, Object defaultValue)
+ throws IllegalArgumentException {
+ ObjectSlot slot = findSlot(name, null);
+ // if not initialized yet, we give the default value
+ if (slot == null || slot.field.getType().isPrimitive()) {
+ throw new IllegalArgumentException();
+ }
+ return slot.defaulted ? defaultValue : slot.fieldValue;
+ }
+
+ /**
+ * Find and return the short value of a given field named <code>name</code>
+ * in the receiver. If the field has not been assigned any value yet, the
+ * default value <code>defaultValue</code> is returned instead.
+ *
+ * @param name
+ * A String, the name of the field to find
+ * @param defaultValue
+ * Return value in case the field has not been assigned to yet.
+ * @return the value of the given field if it has been assigned, the default
+ * value otherwise
+ *
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ public short get(String name, short defaultValue)
+ throws IllegalArgumentException {
+ ObjectSlot slot = findSlot(name, Short.TYPE);
+ // if not initialized yet, we give the default value
+ if (slot == null) {
+ throw new IllegalArgumentException();
+ }
+ return slot.defaulted ? defaultValue : ((Short) slot.fieldValue)
+ .shortValue();
+ }
+
+ /**
+ * Find and return the boolean value of a given field named
+ * <code>name</code> in the receiver. If the field has not been assigned
+ * any value yet, the default value <code>defaultValue</code> is returned
+ * instead.
+ *
+ * @param name
+ * A String, the name of the field to find
+ * @param defaultValue
+ * Return value in case the field has not been assigned to yet.
+ * @return the value of the given field if it has been assigned, the default
+ * value otherwise
+ *
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ public boolean get(String name, boolean defaultValue)
+ throws IllegalArgumentException {
+ ObjectSlot slot = findSlot(name, Boolean.TYPE);
+ // if not initialized yet, we give the default value
+ if (slot == null) {
+ throw new IllegalArgumentException();
+ }
+ return slot.defaulted ? defaultValue : ((Boolean) slot.fieldValue)
+ .booleanValue();
+ }
+
+ /**
+ * Find and set the byte value of a given field named <code>name</code> in
+ * the receiver.
+ *
+ * @param name
+ * A String, the name of the field to set
+ * @param value
+ * New value for the field.
+ *
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ public void put(String name, byte value) throws IllegalArgumentException {
+ ObjectSlot slot = findSlot(name, Byte.TYPE);
+ if (slot == null) {
+ throw new IllegalArgumentException();
+ }
+ slot.fieldValue = Byte.valueOf(value);
+ slot.defaulted = false; // No longer default value
+ }
+
+ /**
+ * Find and set the char value of a given field named <code>name</code> in
+ * the receiver.
+ *
+ * @param name
+ * A String, the name of the field to set
+ * @param value
+ * New value for the field.
+ *
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ public void put(String name, char value) throws IllegalArgumentException {
+ ObjectSlot slot = findSlot(name, Character.TYPE);
+ if (slot == null) {
+ throw new IllegalArgumentException();
+ }
+ slot.fieldValue = Character.valueOf(value);
+ slot.defaulted = false; // No longer default value
+ }
+
+ /**
+ * Find and set the double value of a given field named <code>name</code>
+ * in the receiver.
+ *
+ * @param name
+ * A String, the name of the field to set
+ * @param value
+ * New value for the field.
+ *
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ public void put(String name, double value) throws IllegalArgumentException {
+ ObjectSlot slot = findSlot(name, Double.TYPE);
+ if (slot == null) {
+ throw new IllegalArgumentException();
+ }
+ slot.fieldValue = Double.valueOf(value);
+ slot.defaulted = false; // No longer default value
+ }
+
+ /**
+ * Find and set the float value of a given field named <code>name</code>
+ * in the receiver.
+ *
+ * @param name
+ * A String, the name of the field to set
+ * @param value
+ * New value for the field.
+ *
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ public void put(String name, float value) throws IllegalArgumentException {
+ ObjectSlot slot = findSlot(name, Float.TYPE);
+ if (slot == null) {
+ throw new IllegalArgumentException();
+ }
+ slot.fieldValue = Float.valueOf(value);
+ slot.defaulted = false; // No longer default value
+ }
+
+ /**
+ * Find and set the int value of a given field named <code>name</code> in
+ * the receiver.
+ *
+ * @param name
+ * A String, the name of the field to set
+ * @param value
+ * New value for the field.
+ *
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ public void put(String name, int value) throws IllegalArgumentException {
+ ObjectSlot slot = findSlot(name, Integer.TYPE);
+ if (slot == null) {
+ throw new IllegalArgumentException();
+ }
+ slot.fieldValue = Integer.valueOf(value);
+ slot.defaulted = false; // No longer default value
+ }
+
+ /**
+ * Find and set the long value of a given field named <code>name</code> in
+ * the receiver.
+ *
+ * @param name
+ * A String, the name of the field to set
+ * @param value
+ * New value for the field.
+ *
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ public void put(String name, long value) throws IllegalArgumentException {
+ ObjectSlot slot = findSlot(name, Long.TYPE);
+ if (slot == null) {
+ throw new IllegalArgumentException();
+ }
+ slot.fieldValue = Long.valueOf(value);
+ slot.defaulted = false; // No longer default value
+ }
+
+ /**
+ * Find and set the Object value of a given field named <code>name</code>
+ * in the receiver.
+ *
+ * @param name
+ * A String, the name of the field to set
+ * @param value
+ * New value for the field.
+ *
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ public void put(String name, Object value) throws IllegalArgumentException {
+ Class<?> valueClass = null;
+ if (value != null) {
+ valueClass = value.getClass();
+ }
+ ObjectSlot slot = findSlot(name, valueClass);
+ if (slot == null) {
+ throw new IllegalArgumentException();
+ }
+ slot.fieldValue = value;
+ slot.defaulted = false; // No longer default value
+ }
+
+ /**
+ * Find and set the short value of a given field named <code>name</code>
+ * in the receiver.
+ *
+ * @param name
+ * A String, the name of the field to set
+ * @param value
+ * New value for the field.
+ *
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ public void put(String name, short value) throws IllegalArgumentException {
+ ObjectSlot slot = findSlot(name, Short.TYPE);
+ if (slot == null) {
+ throw new IllegalArgumentException();
+ }
+ slot.fieldValue = Short.valueOf(value);
+ slot.defaulted = false; // No longer default value
+ }
+
+ /**
+ * Find and set the boolean value of a given field named <code>name</code>
+ * in the receiver.
+ *
+ * @param name
+ * A String, the name of the field to set
+ * @param value
+ * New value for the field.
+ *
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ public void put(String name, boolean value) throws IllegalArgumentException {
+ ObjectSlot slot = findSlot(name, Boolean.TYPE);
+ if (slot == null) {
+ throw new IllegalArgumentException();
+ }
+ slot.fieldValue = Boolean.valueOf(value);
+ slot.defaulted = false; // No longer default value
+ }
+
+ /**
+ * Return the array of ObjectSlot the receiver represents.
+ *
+ * @return array of ObjectSlot the receiver represents.
+ */
+ public ObjectSlot[] slots() {
+ return slotsToSerialize;
+ }
}
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/EmulatedFieldsForDumping.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/EmulatedFieldsForDumping.java?view=diff&rev=492652&r1=492651&r2=492652
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/EmulatedFieldsForDumping.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/EmulatedFieldsForDumping.java Thu Jan 4 09:47:01 2007
@@ -17,227 +17,217 @@
package java.io;
-
/**
* An EmulatedFieldsForDumping is an object that represents a set of emulated
* fields for an object being dumped. It is a concrete implementation for
* ObjectOutputStream.PutField
*
-
+ *
* @see ObjectOutputStream.PutField
* @see EmulatedFieldsForLoading
*/
-
class EmulatedFieldsForDumping extends ObjectOutputStream.PutField {
- private EmulatedFields emulatedFields; // The actual representation, with a
- // more powerful API (set&get)
- /**
- * Constructs a new instance of EmulatedFieldsForDumping.
- *
- * @param streamClass
- * a ObjectStreamClass, which describe the fields to be emulated
- * (names, types, etc).
- */
- EmulatedFieldsForDumping(ObjectStreamClass streamClass) {
- super();
- emulatedFields = new EmulatedFields(streamClass.fields(),
- (ObjectStreamField[]) null);
- }
-
- /**
- * Return the actual EmulatedFields instance used by the receiver. We have
- * the actual work in a separate class so that the code can be shared. The
- * receiver has to be of a subclass of PutField.
- *
- * @return array of ObjectSlot the receiver represents.
- */
- EmulatedFields emulatedFields() {
- return emulatedFields;
- }
-
- /**
- * Find and set the byte value of a given field named <code>name</code> in
- * the receiver.
- *
- * @param name
- * A String, the name of the field to set
- * @param value
- * New value for the field.
- *
- */
- @Override
+ // The actual representation, with a more powerful API (set&get)
+ private EmulatedFields emulatedFields;
+
+ /**
+ * Constructs a new instance of EmulatedFieldsForDumping.
+ *
+ * @param streamClass
+ * a ObjectStreamClass, which describe the fields to be emulated
+ * (names, types, etc).
+ */
+ EmulatedFieldsForDumping(ObjectStreamClass streamClass) {
+ super();
+ emulatedFields = new EmulatedFields(streamClass.fields(),
+ (ObjectStreamField[]) null);
+ }
+
+ /**
+ * Return the actual EmulatedFields instance used by the receiver. We have
+ * the actual work in a separate class so that the code can be shared. The
+ * receiver has to be of a subclass of PutField.
+ *
+ * @return array of ObjectSlot the receiver represents.
+ */
+ EmulatedFields emulatedFields() {
+ return emulatedFields;
+ }
+
+ /**
+ * Find and set the byte value of a given field named <code>name</code> in
+ * the receiver.
+ *
+ * @param name
+ * A String, the name of the field to set
+ * @param value
+ * New value for the field.
+ */
+ @Override
public void put(String name, byte value) {
- emulatedFields.put(name, value);
- }
+ emulatedFields.put(name, value);
+ }
- /**
- * Find and set the char value of a given field named <code>name</code> in
- * the receiver.
- *
- * @param name
- * A String, the name of the field to set
- * @param value
- * New value for the field.
- *
- */
- @Override
+ /**
+ * Find and set the char value of a given field named <code>name</code> in
+ * the receiver.
+ *
+ * @param name
+ * A String, the name of the field to set
+ * @param value
+ * New value for the field.
+ */
+ @Override
public void put(String name, char value) {
- emulatedFields.put(name, value);
- }
+ emulatedFields.put(name, value);
+ }
- /**
- * Find and set the double value of a given field named <code>name</code>
- * in the receiver.
- *
- * @param name
- * A String, the name of the field to set
- * @param value
- * New value for the field.
- *
- */
- @Override
+ /**
+ * Find and set the double value of a given field named <code>name</code>
+ * in the receiver.
+ *
+ * @param name
+ * A String, the name of the field to set
+ * @param value
+ * New value for the field.
+ */
+ @Override
public void put(String name, double value) {
- emulatedFields.put(name, value);
- }
+ emulatedFields.put(name, value);
+ }
- /**
- * Find and set the float value of a given field named <code>name</code>
- * in the receiver.
- *
- * @param name
- * A String, the name of the field to set
- * @param value
- * New value for the field.
- *
- */
- @Override
+ /**
+ * Find and set the float value of a given field named <code>name</code>
+ * in the receiver.
+ *
+ * @param name
+ * A String, the name of the field to set
+ * @param value
+ * New value for the field.
+ */
+ @Override
public void put(String name, float value) {
- emulatedFields.put(name, value);
- }
+ emulatedFields.put(name, value);
+ }
- /**
- * Find and set the int value of a given field named <code>name</code> in
- * the receiver.
- *
- * @param name
- * A String, the name of the field to set
- * @param value
- * New value for the field.
- *
- */
- @Override
+ /**
+ * Find and set the int value of a given field named <code>name</code> in
+ * the receiver.
+ *
+ * @param name
+ * A String, the name of the field to set
+ * @param value
+ * New value for the field.
+ */
+ @Override
public void put(String name, int value) {
- emulatedFields.put(name, value);
- }
+ emulatedFields.put(name, value);
+ }
- /**
- * Find and set the long value of a given field named <code>name</code> in
- * the receiver.
- *
- * @param name
- * A String, the name of the field to set
- * @param value
- * New value for the field.
- *
- */
- @Override
+ /**
+ * Find and set the long value of a given field named <code>name</code> in
+ * the receiver.
+ *
+ * @param name
+ * A String, the name of the field to set
+ * @param value
+ * New value for the field.
+ */
+ @Override
public void put(String name, long value) {
- emulatedFields.put(name, value);
- }
+ emulatedFields.put(name, value);
+ }
- /**
- * Find and set the Object value of a given field named <code>name</code>
- * in the receiver.
- *
- * @param name
- * A String, the name of the field to set
- * @param value
- * New value for the field.
- *
- */
- @Override
+ /**
+ * Find and set the Object value of a given field named <code>name</code>
+ * in the receiver.
+ *
+ * @param name
+ * A String, the name of the field to set
+ * @param value
+ * New value for the field.
+ */
+ @Override
public void put(String name, Object value) {
- emulatedFields.put(name, value);
- }
+ emulatedFields.put(name, value);
+ }
- /**
- * Find and set the short value of a given field named <code>name</code>
- * in the receiver.
- *
- * @param name
- * A String, the name of the field to set
- * @param value
- * New value for the field.
- *
- */
- @Override
+ /**
+ * Find and set the short value of a given field named <code>name</code>
+ * in the receiver.
+ *
+ * @param name
+ * A String, the name of the field to set
+ * @param value
+ * New value for the field.
+ */
+ @Override
public void put(String name, short value) {
- emulatedFields.put(name, value);
- }
+ emulatedFields.put(name, value);
+ }
- /**
- * Find and set the boolean value of a given field named <code>name</code>
- * in the receiver.
- *
- * @param name
- * A String, the name of the field to set
- * @param value
- * New value for the field.
- *
- */
- @Override
+ /**
+ * Find and set the boolean value of a given field named <code>name</code>
+ * in the receiver.
+ *
+ * @param name
+ * A String, the name of the field to set
+ * @param value
+ * New value for the field.
+ */
+ @Override
public void put(String name, boolean value) {
- emulatedFields.put(name, value);
- }
+ emulatedFields.put(name, value);
+ }
- /**
- * Write the field values to the specified ObjectOutput.
- *
- * @param output
- * the ObjectOutput
- *
- * @throws IOException
- * If an IO exception happened when writing the field values.
- */
- @Override
+ /**
+ * Write the field values to the specified ObjectOutput.
+ *
+ * @param output
+ * the ObjectOutput
+ *
+ * @throws IOException
+ * If an IO exception happened when writing the field values.
+ */
+ @Override
@Deprecated
@SuppressWarnings("deprecation")
public void write(ObjectOutput output) throws IOException {
- EmulatedFields.ObjectSlot[] slots = emulatedFields.slots();
- for (int i = 0; i < slots.length; i++) {
- EmulatedFields.ObjectSlot slot = slots[i];
- Object fieldValue = slot.getFieldValue();
- Class<?> type = slot.getField().getType();
- // WARNING - default values exist for each primitive type
- if (type == Integer.TYPE) {
- output.writeInt(fieldValue != null ? ((Integer) fieldValue)
- .intValue() : 0);
- } else if (type == Byte.TYPE) {
- output.writeByte(fieldValue != null ? ((Byte) fieldValue)
- .byteValue() : (byte) 0);
- } else if (type == Character.TYPE) {
- output.writeChar(fieldValue != null ? ((Character) fieldValue)
- .charValue() : (char) 0);
- } else if (type == Short.TYPE) {
- output.writeShort(fieldValue != null ? ((Short) fieldValue)
- .shortValue() : (short) 0);
- } else if (type == Boolean.TYPE) {
- output.writeBoolean(fieldValue != null ? ((Boolean) fieldValue)
- .booleanValue() : false);
- } else if (type == Long.TYPE) {
- output.writeLong(fieldValue != null ? ((Long) fieldValue)
- .longValue() : (long) 0);
- } else if (type == Float.TYPE) {
- output.writeFloat(fieldValue != null ? ((Float) fieldValue)
- .floatValue() : (float) 0);
- } else if (type == Double.TYPE) {
- output.writeDouble(fieldValue != null ? ((Double) fieldValue)
- .doubleValue() : (double) 0);
- } else {
- // Either array or Object
- output.writeObject(fieldValue);
- }
- }
- }
+ EmulatedFields.ObjectSlot[] slots = emulatedFields.slots();
+ for (int i = 0; i < slots.length; i++) {
+ EmulatedFields.ObjectSlot slot = slots[i];
+ Object fieldValue = slot.getFieldValue();
+ Class<?> type = slot.getField().getType();
+ // WARNING - default values exist for each primitive type
+ if (type == Integer.TYPE) {
+ output.writeInt(fieldValue != null ? ((Integer) fieldValue)
+ .intValue() : 0);
+ } else if (type == Byte.TYPE) {
+ output.writeByte(fieldValue != null ? ((Byte) fieldValue)
+ .byteValue() : (byte) 0);
+ } else if (type == Character.TYPE) {
+ output.writeChar(fieldValue != null ? ((Character) fieldValue)
+ .charValue() : (char) 0);
+ } else if (type == Short.TYPE) {
+ output.writeShort(fieldValue != null ? ((Short) fieldValue)
+ .shortValue() : (short) 0);
+ } else if (type == Boolean.TYPE) {
+ output.writeBoolean(fieldValue != null ? ((Boolean) fieldValue)
+ .booleanValue() : false);
+ } else if (type == Long.TYPE) {
+ output.writeLong(fieldValue != null ? ((Long) fieldValue)
+ .longValue() : (long) 0);
+ } else if (type == Float.TYPE) {
+ output.writeFloat(fieldValue != null ? ((Float) fieldValue)
+ .floatValue() : (float) 0);
+ } else if (type == Double.TYPE) {
+ output.writeDouble(fieldValue != null ? ((Double) fieldValue)
+ .doubleValue() : (double) 0);
+ } else {
+ // Either array or Object
+ output.writeObject(fieldValue);
+ }
+ }
+ }
}
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/EmulatedFieldsForLoading.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/EmulatedFieldsForLoading.java?view=diff&rev=492652&r1=492651&r2=492652
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/EmulatedFieldsForLoading.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/EmulatedFieldsForLoading.java Thu Jan 4 09:47:01 2007
@@ -17,7 +17,6 @@
package java.io;
-
/**
* An EmulatedFieldsForLoading is an object that represents a set of emulated
* fields for an object being loaded. It is a concrete implementation for
@@ -27,275 +26,275 @@
* @see EmulatedFieldsForDumping
*/
class EmulatedFieldsForLoading extends ObjectInputStream.GetField {
- private ObjectStreamClass streamClass; // The class descriptor with the
- // declared fields the receiver
- // emulates
-
- private EmulatedFields emulatedFields; // The actual representation, with a
- // more powerful API (set&get)
-
- /**
- * Constructs a new instance of EmulatedFieldsForDumping.
- *
- * @param streamClass
- * an ObjectStreamClass, defining the class for which to emulate
- * fields.
- */
- EmulatedFieldsForLoading(ObjectStreamClass streamClass) {
- super();
- this.streamClass = streamClass;
- emulatedFields = new EmulatedFields(streamClass.getLoadFields(),
- streamClass.fields());
- }
-
- /**
- * Return a boolean indicating if the field named <code>name</code> has
- * been assigned a value explicitly (false) or if it still holds a default
- * value for the type (true) because it hasn't been assigned to yet.
- *
- * @param name
- * A String, the name of the field to test
- * @return <code>true</code> if the field holds it default value,
- * <code>false</code> otherwise.
- *
- * @throws IOException
- * If an IO error occurs
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- @Override
+
+ // The class descriptor with the declared fields the receiver emulates
+ private ObjectStreamClass streamClass;
+
+ // The actual representation, with a more powerful API (set&get)
+ private EmulatedFields emulatedFields;
+
+ /**
+ * Constructs a new instance of EmulatedFieldsForDumping.
+ *
+ * @param streamClass
+ * an ObjectStreamClass, defining the class for which to emulate
+ * fields.
+ */
+ EmulatedFieldsForLoading(ObjectStreamClass streamClass) {
+ super();
+ this.streamClass = streamClass;
+ emulatedFields = new EmulatedFields(streamClass.getLoadFields(),
+ streamClass.fields());
+ }
+
+ /**
+ * Return a boolean indicating if the field named <code>name</code> has
+ * been assigned a value explicitly (false) or if it still holds a default
+ * value for the type (true) because it hasn't been assigned to yet.
+ *
+ * @param name
+ * A String, the name of the field to test
+ * @return <code>true</code> if the field holds it default value,
+ * <code>false</code> otherwise.
+ *
+ * @throws IOException
+ * If an IO error occurs
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ @Override
public boolean defaulted(String name) throws IOException,
- IllegalArgumentException {
- return emulatedFields.defaulted(name);
- }
-
- /**
- * Return the actual EmulatedFields instance used by the receiver. We have
- * the actual work in a separate class so that the code can be shared. The
- * receiver has to be of a subclass of GetField.
- *
- * @return array of ObjectSlot the receiver represents.
- */
- EmulatedFields emulatedFields() {
- return emulatedFields;
- }
-
- /**
- * Find and return the byte value of a given field named <code>name</code>
- * in the receiver. If the field has not been assigned any value yet, the
- * default value <code>defaultValue</code> is returned instead.
- *
- * @param name
- * A String, the name of the field to find
- * @param defaultValue
- * Return value in case the field has not been assigned to yet.
- * @return the value of the given field if it has been assigned, or the
- * default value otherwise
- *
- * @throws IOException
- * If an IO error occurs
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- @Override
+ IllegalArgumentException {
+ return emulatedFields.defaulted(name);
+ }
+
+ /**
+ * Return the actual EmulatedFields instance used by the receiver. We have
+ * the actual work in a separate class so that the code can be shared. The
+ * receiver has to be of a subclass of GetField.
+ *
+ * @return array of ObjectSlot the receiver represents.
+ */
+ EmulatedFields emulatedFields() {
+ return emulatedFields;
+ }
+
+ /**
+ * Find and return the byte value of a given field named <code>name</code>
+ * in the receiver. If the field has not been assigned any value yet, the
+ * default value <code>defaultValue</code> is returned instead.
+ *
+ * @param name
+ * A String, the name of the field to find
+ * @param defaultValue
+ * Return value in case the field has not been assigned to yet.
+ * @return the value of the given field if it has been assigned, or the
+ * default value otherwise
+ *
+ * @throws IOException
+ * If an IO error occurs
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ @Override
public byte get(String name, byte defaultValue) throws IOException,
- IllegalArgumentException {
- return emulatedFields.get(name, defaultValue);
- }
-
- /**
- * Find and return the char value of a given field named <code>name</code>
- * in the receiver. If the field has not been assigned any value yet, the
- * default value <code>defaultValue</code> is returned instead.
- *
- * @param name
- * A String, the name of the field to find
- * @param defaultValue
- * Return value in case the field has not been assigned to yet.
- * @return the value of the given field if it has been assigned, or the
- * default value otherwise
- *
- * @throws IOException
- * If an IO error occurs
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- @Override
+ IllegalArgumentException {
+ return emulatedFields.get(name, defaultValue);
+ }
+
+ /**
+ * Find and return the char value of a given field named <code>name</code>
+ * in the receiver. If the field has not been assigned any value yet, the
+ * default value <code>defaultValue</code> is returned instead.
+ *
+ * @param name
+ * A String, the name of the field to find
+ * @param defaultValue
+ * Return value in case the field has not been assigned to yet.
+ * @return the value of the given field if it has been assigned, or the
+ * default value otherwise
+ *
+ * @throws IOException
+ * If an IO error occurs
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ @Override
public char get(String name, char defaultValue) throws IOException,
- IllegalArgumentException {
- return emulatedFields.get(name, defaultValue);
- }
-
- /**
- * Find and return the double value of a given field named <code>name</code>
- * in the receiver. If the field has not been assigned any value yet, the
- * default value <code>defaultValue</code> is returned instead.
- *
- * @param name
- * A String, the name of the field to find
- * @param defaultValue
- * Return value in case the field has not been assigned to yet.
- * @return the value of the given field if it has been assigned, or the
- * default value otherwise
- *
- * @throws IOException
- * If an IO error occurs
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- @Override
+ IllegalArgumentException {
+ return emulatedFields.get(name, defaultValue);
+ }
+
+ /**
+ * Find and return the double value of a given field named <code>name</code>
+ * in the receiver. If the field has not been assigned any value yet, the
+ * default value <code>defaultValue</code> is returned instead.
+ *
+ * @param name
+ * A String, the name of the field to find
+ * @param defaultValue
+ * Return value in case the field has not been assigned to yet.
+ * @return the value of the given field if it has been assigned, or the
+ * default value otherwise
+ *
+ * @throws IOException
+ * If an IO error occurs
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ @Override
public double get(String name, double defaultValue) throws IOException,
- IllegalArgumentException {
- return emulatedFields.get(name, defaultValue);
- }
-
- /**
- * Find and return the float value of a given field named <code>name</code>
- * in the receiver. If the field has not been assigned any value yet, the
- * default value <code>defaultValue</code> is returned instead.
- *
- * @param name
- * A String, the name of the field to find
- * @param defaultValue
- * Return value in case the field has not been assigned to yet.
- * @return the value of the given field if it has been assigned, or the
- * default value otherwise
- *
- * @throws IOException
- * If an IO error occurs
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- @Override
+ IllegalArgumentException {
+ return emulatedFields.get(name, defaultValue);
+ }
+
+ /**
+ * Find and return the float value of a given field named <code>name</code>
+ * in the receiver. If the field has not been assigned any value yet, the
+ * default value <code>defaultValue</code> is returned instead.
+ *
+ * @param name
+ * A String, the name of the field to find
+ * @param defaultValue
+ * Return value in case the field has not been assigned to yet.
+ * @return the value of the given field if it has been assigned, or the
+ * default value otherwise
+ *
+ * @throws IOException
+ * If an IO error occurs
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ @Override
public float get(String name, float defaultValue) throws IOException,
- IllegalArgumentException {
- return emulatedFields.get(name, defaultValue);
- }
-
- /**
- * Find and return the int value of a given field named <code>name</code>
- * in the receiver. If the field has not been assigned any value yet, the
- * default value <code>defaultValue</code> is returned instead.
- *
- * @param name
- * A String, the name of the field to find
- * @param defaultValue
- * Return value in case the field has not been assigned to yet.
- * @return the value of the given field if it has been assigned, or the
- * default value otherwise
- *
- * @throws IOException
- * If an IO error occurs
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- @Override
+ IllegalArgumentException {
+ return emulatedFields.get(name, defaultValue);
+ }
+
+ /**
+ * Find and return the int value of a given field named <code>name</code>
+ * in the receiver. If the field has not been assigned any value yet, the
+ * default value <code>defaultValue</code> is returned instead.
+ *
+ * @param name
+ * A String, the name of the field to find
+ * @param defaultValue
+ * Return value in case the field has not been assigned to yet.
+ * @return the value of the given field if it has been assigned, or the
+ * default value otherwise
+ *
+ * @throws IOException
+ * If an IO error occurs
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ @Override
public int get(String name, int defaultValue) throws IOException,
- IllegalArgumentException {
- return emulatedFields.get(name, defaultValue);
- }
-
- /**
- * Find and return the long value of a given field named <code>name</code>
- * in the receiver. If the field has not been assigned any value yet, the
- * default value <code>defaultValue</code> is returned instead.
- *
- * @param name
- * A String, the name of the field to find
- * @param defaultValue
- * Return value in case the field has not been assigned to yet.
- * @return the value of the given field if it has been assigned, or the
- * default value otherwise
- *
- * @throws IOException
- * If an IO error occurs
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- @Override
+ IllegalArgumentException {
+ return emulatedFields.get(name, defaultValue);
+ }
+
+ /**
+ * Find and return the long value of a given field named <code>name</code>
+ * in the receiver. If the field has not been assigned any value yet, the
+ * default value <code>defaultValue</code> is returned instead.
+ *
+ * @param name
+ * A String, the name of the field to find
+ * @param defaultValue
+ * Return value in case the field has not been assigned to yet.
+ * @return the value of the given field if it has been assigned, or the
+ * default value otherwise
+ *
+ * @throws IOException
+ * If an IO error occurs
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ @Override
public long get(String name, long defaultValue) throws IOException,
- IllegalArgumentException {
- return emulatedFields.get(name, defaultValue);
- }
-
- /**
- * Find and return the Object value of a given field named <code>name</code>
- * in the receiver. If the field has not been assigned any value yet, the
- * default value <code>defaultValue</code> is returned instead.
- *
- * @param name
- * A String, the name of the field to find
- * @param defaultValue
- * Return value in case the field has not been assigned to yet.
- * @return the value of the given field if it has been assigned, or the
- * default value otherwise
- *
- * @throws IOException
- * If an IO error occurs
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- @Override
+ IllegalArgumentException {
+ return emulatedFields.get(name, defaultValue);
+ }
+
+ /**
+ * Find and return the Object value of a given field named <code>name</code>
+ * in the receiver. If the field has not been assigned any value yet, the
+ * default value <code>defaultValue</code> is returned instead.
+ *
+ * @param name
+ * A String, the name of the field to find
+ * @param defaultValue
+ * Return value in case the field has not been assigned to yet.
+ * @return the value of the given field if it has been assigned, or the
+ * default value otherwise
+ *
+ * @throws IOException
+ * If an IO error occurs
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ @Override
public Object get(String name, Object defaultValue) throws IOException,
- IllegalArgumentException {
- return emulatedFields.get(name, defaultValue);
- }
-
- /**
- * Find and return the short value of a given field named <code>name</code>
- * in the receiver. If the field has not been assigned any value yet, the
- * default value <code>defaultValue</code> is returned instead.
- *
- * @param name
- * A String, the name of the field to find
- * @param defaultValue
- * Return value in case the field has not been assigned to yet.
- * @return the value of the given field if it has been assigned, or the
- * default value otherwise
- *
- * @throws IOException
- * If an IO error occurs
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- @Override
+ IllegalArgumentException {
+ return emulatedFields.get(name, defaultValue);
+ }
+
+ /**
+ * Find and return the short value of a given field named <code>name</code>
+ * in the receiver. If the field has not been assigned any value yet, the
+ * default value <code>defaultValue</code> is returned instead.
+ *
+ * @param name
+ * A String, the name of the field to find
+ * @param defaultValue
+ * Return value in case the field has not been assigned to yet.
+ * @return the value of the given field if it has been assigned, or the
+ * default value otherwise
+ *
+ * @throws IOException
+ * If an IO error occurs
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ @Override
public short get(String name, short defaultValue) throws IOException,
- IllegalArgumentException {
- return emulatedFields.get(name, defaultValue);
- }
-
- /**
- * Find and return the boolean value of a given field named
- * <code>name</code> in the receiver. If the field has not been assigned
- * any value yet, the default value <code>defaultValue</code> is returned
- * instead.
- *
- * @param name
- * A String, the name of the field to find
- * @param defaultValue
- * Return value in case the field has not been assigned to yet.
- * @return the value of the given field if it has been assigned, or the
- * default value otherwise
- *
- * @throws IOException
- * If an IO error occurs
- * @throws IllegalArgumentException
- * If the corresponding field can not be found.
- */
- @Override
+ IllegalArgumentException {
+ return emulatedFields.get(name, defaultValue);
+ }
+
+ /**
+ * Find and return the boolean value of a given field named
+ * <code>name</code> in the receiver. If the field has not been assigned
+ * any value yet, the default value <code>defaultValue</code> is returned
+ * instead.
+ *
+ * @param name
+ * A String, the name of the field to find
+ * @param defaultValue
+ * Return value in case the field has not been assigned to yet.
+ * @return the value of the given field if it has been assigned, or the
+ * default value otherwise
+ *
+ * @throws IOException
+ * If an IO error occurs
+ * @throws IllegalArgumentException
+ * If the corresponding field can not be found.
+ */
+ @Override
public boolean get(String name, boolean defaultValue) throws IOException,
- IllegalArgumentException {
- return emulatedFields.get(name, defaultValue);
- }
-
- /**
- * Return the class descriptor for which the emulated fields are defined.
- *
- * @return ObjectStreamClass The class descriptor for which the emulated
- * fields are defined.
- */
- @Override
+ IllegalArgumentException {
+ return emulatedFields.get(name, defaultValue);
+ }
+
+ /**
+ * Return the class descriptor for which the emulated fields are defined.
+ *
+ * @return ObjectStreamClass The class descriptor for which the emulated
+ * fields are defined.
+ */
+ @Override
public ObjectStreamClass getObjectStreamClass() {
- return streamClass;
- }
+ return streamClass;
+ }
}
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/Externalizable.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/Externalizable.java?view=diff&rev=492652&r1=492651&r2=492652
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/Externalizable.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/Externalizable.java Thu Jan 4 09:47:01 2007
@@ -17,35 +17,34 @@
package java.io;
-
/**
* Objects that want to be serialized/deserialized using
* ObjectOutputStream/ObjectInputStream but defining their own byte
* representation should implement this interface.
*/
public interface Externalizable extends Serializable {
- /**
- * Reads the next object from the ObjectInput <code>input</code>
- *
- * @param input
- * the ObjectInput from which the next object is read
- *
- * @throws IOException
- * If an error occurs attempting to read from this ObjectInput.
- * @throws ClassNotFoundException
- * If the class of the instance being loaded cannot be found
- */
- public void readExternal(ObjectInput input) throws IOException,
- java.lang.ClassNotFoundException;
+ /**
+ * Reads the next object from the ObjectInput <code>input</code>
+ *
+ * @param input
+ * the ObjectInput from which the next object is read
+ *
+ * @throws IOException
+ * If an error occurs attempting to read from this ObjectInput.
+ * @throws ClassNotFoundException
+ * If the class of the instance being loaded cannot be found
+ */
+ public void readExternal(ObjectInput input) throws IOException,
+ ClassNotFoundException;
- /**
- * Writes the receiver to the ObjectOutput <code>output</code>.
- *
- * @param output
- * an ObjectOutput where to write the object
- *
- * @throws IOException
- * If an error occurs attempting to write to the ObjectOutput.
- */
- public void writeExternal(ObjectOutput output) throws IOException;
+ /**
+ * Writes the receiver to the ObjectOutput <code>output</code>.
+ *
+ * @param output
+ * an ObjectOutput where to write the object
+ *
+ * @throws IOException
+ * If an error occurs attempting to write to the ObjectOutput.
+ */
+ public void writeExternal(ObjectOutput output) throws IOException;
}