equal
deleted
inserted
replaced
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 } |