< prev index next >

src/java.base/share/classes/java/io/ObjectStreamField.java

Print this page
rev 17455 : 8184603: Create ObjectStreamField signature lazily when possible
Reviewed-by: rriggs, chegar, alanb, shade

*** 43,62 **** implements Comparable<Object> { /** field name */ private final String name; ! /** canonical JVM signature of field type */ private final String signature; /** field type (Object.class if unknown non-primitive type) */ private final Class<?> type; /** whether or not to (de)serialize field values as unshared */ private final boolean unshared; /** corresponding reflective field object, if any */ private final Field field; /** offset of field value in enclosing field group */ ! private int offset = 0; /** * Create a Serializable field with the specified type. This field should * be documented with a <code>serialField</code> tag. * --- 43,64 ---- implements Comparable<Object> { /** field name */ private final String name; ! /** canonical JVM signature of field type, if given */ private final String signature; /** field type (Object.class if unknown non-primitive type) */ private final Class<?> type; + /** lazily constructed signature for the type, if no explicit signature */ + private String typeSignature; /** whether or not to (de)serialize field values as unshared */ private final boolean unshared; /** corresponding reflective field object, if any */ private final Field field; /** offset of field value in enclosing field group */ ! private int offset; /** * Create a Serializable field with the specified type. This field should * be documented with a <code>serialField</code> tag. *
*** 89,100 **** throw new NullPointerException(); } this.name = name; this.type = type; this.unshared = unshared; ! signature = getClassSignature(type).intern(); ! field = null; } /** * Creates an ObjectStreamField representing a field with the given name, * signature and unshared setting. --- 91,102 ---- throw new NullPointerException(); } this.name = name; this.type = type; this.unshared = unshared; ! this.field = null; ! this.signature = null; } /** * Creates an ObjectStreamField representing a field with the given name, * signature and unshared setting.
*** 104,114 **** throw new NullPointerException(); } this.name = name; this.signature = signature.intern(); this.unshared = unshared; ! field = null; switch (signature.charAt(0)) { case 'Z': type = Boolean.TYPE; break; case 'B': type = Byte.TYPE; break; case 'C': type = Character.TYPE; break; --- 106,116 ---- throw new NullPointerException(); } this.name = name; this.signature = signature.intern(); this.unshared = unshared; ! this.field = null; switch (signature.charAt(0)) { case 'Z': type = Boolean.TYPE; break; case 'B': type = Byte.TYPE; break; case 'C': type = Character.TYPE; break;
*** 240,260 **** * * @return the typecode of the serializable field */ // REMIND: deprecate? public char getTypeCode() { ! return signature.charAt(0); } /** * Return the JVM type signature. * * @return null if this field has a primitive type. */ // REMIND: deprecate? public String getTypeString() { ! return isPrimitive() ? null : signature; } /** * Offset of field within instance data. * --- 242,262 ---- * * @return the typecode of the serializable field */ // REMIND: deprecate? public char getTypeCode() { ! return getSignature().charAt(0); } /** * Return the JVM type signature. * * @return null if this field has a primitive type. */ // REMIND: deprecate? public String getTypeString() { ! return isPrimitive() ? null : getSignature(); } /** * Offset of field within instance data. *
*** 282,292 **** * * @return true if and only if this field corresponds to a primitive type */ // REMIND: deprecate? public boolean isPrimitive() { ! char tcode = signature.charAt(0); return ((tcode != 'L') && (tcode != '[')); } /** * Returns boolean value indicating whether or not the serializable field --- 284,294 ---- * * @return true if and only if this field corresponds to a primitive type */ // REMIND: deprecate? public boolean isPrimitive() { ! char tcode = getTypeCode(); return ((tcode != 'L') && (tcode != '[')); } /** * Returns boolean value indicating whether or not the serializable field
*** 318,328 **** /** * Return a string that describes this field. */ public String toString() { ! return signature + ' ' + name; } /** * Returns field represented by this ObjectStreamField, or null if * ObjectStreamField is not associated with an actual field. --- 320,330 ---- /** * Return a string that describes this field. */ public String toString() { ! return getSignature() + ' ' + name; } /** * Returns field represented by this ObjectStreamField, or null if * ObjectStreamField is not associated with an actual field.
*** 334,341 **** --- 336,354 ---- /** * Returns JVM type signature of field (similar to getTypeString, except * that signature strings are returned for primitive fields as well). */ String getSignature() { + if (signature != null) { return signature; } + + String sig = typeSignature; + // This lazy calculation is safe since signature can be null iff one + // of the public constructors are used, in which case type is always + // initialized to the exact type we want the signature to represent. + if (sig == null) { + typeSignature = sig = getClassSignature(type).intern(); + } + return sig; + } }
< prev index next >