jdk/src/share/classes/java/io/ObjectStreamField.java
changeset 4171 7edb512fdaa6
parent 2 90ce3da70b43
child 5506 202f599c92aa
equal deleted inserted replaced
4167:76f44f2d5d4d 4171:7edb512fdaa6
    43     /** field name */
    43     /** field name */
    44     private final String name;
    44     private final String name;
    45     /** canonical JVM signature of field type */
    45     /** canonical JVM signature of field type */
    46     private final String signature;
    46     private final String signature;
    47     /** field type (Object.class if unknown non-primitive type) */
    47     /** field type (Object.class if unknown non-primitive type) */
    48     private final Class type;
    48     private final Class<?> type;
    49     /** whether or not to (de)serialize field values as unshared */
    49     /** whether or not to (de)serialize field values as unshared */
    50     private final boolean unshared;
    50     private final boolean unshared;
    51     /** corresponding reflective field object, if any */
    51     /** corresponding reflective field object, if any */
    52     private final Field field;
    52     private final Field field;
    53     /** offset of field value in enclosing field group */
    53     /** offset of field value in enclosing field group */
    86             throw new NullPointerException();
    86             throw new NullPointerException();
    87         }
    87         }
    88         this.name = name;
    88         this.name = name;
    89         this.type = type;
    89         this.type = type;
    90         this.unshared = unshared;
    90         this.unshared = unshared;
    91         signature = ObjectStreamClass.getClassSignature(type).intern();
    91         signature = getClassSignature(type).intern();
    92         field = null;
    92         field = null;
    93     }
    93     }
    94 
    94 
    95     /**
    95     /**
    96      * Creates an ObjectStreamField representing a field with the given name,
    96      * Creates an ObjectStreamField representing a field with the given name,
   130      */
   130      */
   131     ObjectStreamField(Field field, boolean unshared, boolean showType) {
   131     ObjectStreamField(Field field, boolean unshared, boolean showType) {
   132         this.field = field;
   132         this.field = field;
   133         this.unshared = unshared;
   133         this.unshared = unshared;
   134         name = field.getName();
   134         name = field.getName();
   135         Class ftype = field.getType();
   135         Class<?> ftype = field.getType();
   136         type = (showType || ftype.isPrimitive()) ? ftype : Object.class;
   136         type = (showType || ftype.isPrimitive()) ? ftype : Object.class;
   137         signature = ObjectStreamClass.getClassSignature(ftype).intern();
   137         signature = getClassSignature(ftype).intern();
   138     }
   138     }
   139 
   139 
   140     /**
   140     /**
   141      * Get the name of this field.
   141      * Get the name of this field.
   142      *
   142      *
   272      * that signature strings are returned for primitive fields as well).
   272      * that signature strings are returned for primitive fields as well).
   273      */
   273      */
   274     String getSignature() {
   274     String getSignature() {
   275         return signature;
   275         return signature;
   276     }
   276     }
       
   277 
       
   278     /**
       
   279      * Returns JVM type signature for given class.
       
   280      */
       
   281     private static String getClassSignature(Class<?> cl) {
       
   282         StringBuilder sbuf = new StringBuilder();
       
   283         while (cl.isArray()) {
       
   284             sbuf.append('[');
       
   285             cl = cl.getComponentType();
       
   286         }
       
   287         if (cl.isPrimitive()) {
       
   288             if (cl == Integer.TYPE) {
       
   289                 sbuf.append('I');
       
   290             } else if (cl == Byte.TYPE) {
       
   291                 sbuf.append('B');
       
   292             } else if (cl == Long.TYPE) {
       
   293                 sbuf.append('J');
       
   294             } else if (cl == Float.TYPE) {
       
   295                 sbuf.append('F');
       
   296             } else if (cl == Double.TYPE) {
       
   297                 sbuf.append('D');
       
   298             } else if (cl == Short.TYPE) {
       
   299                 sbuf.append('S');
       
   300             } else if (cl == Character.TYPE) {
       
   301                 sbuf.append('C');
       
   302             } else if (cl == Boolean.TYPE) {
       
   303                 sbuf.append('Z');
       
   304             } else if (cl == Void.TYPE) {
       
   305                 sbuf.append('V');
       
   306             } else {
       
   307                 throw new InternalError();
       
   308             }
       
   309         } else {
       
   310             sbuf.append('L' + cl.getName().replace('.', '/') + ';');
       
   311         }
       
   312         return sbuf.toString();
       
   313     }
   277 }
   314 }