< prev index next >

src/java.base/share/classes/java/lang/invoke/MethodType.java

Print this page




1228     private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException {
1229         // Assign temporary defaults in case this object escapes
1230         MethodType_init(void.class, NO_PTYPES);
1231 
1232         s.defaultReadObject();  // requires serialPersistentFields to be an empty array
1233 
1234         Class<?>   returnType     = (Class<?>)   s.readObject();
1235         Class<?>[] parameterArray = (Class<?>[]) s.readObject();
1236         parameterArray = parameterArray.clone();  // make sure it is unshared
1237 
1238         // Assign deserialized values
1239         MethodType_init(returnType, parameterArray);
1240     }
1241 
1242     // Initialization of state for deserialization only
1243     private void MethodType_init(Class<?> rtype, Class<?>[] ptypes) {
1244         // In order to communicate these values to readResolve, we must
1245         // store them into the implementation-specific final fields.
1246         checkRtype(rtype);
1247         checkPtypes(ptypes);
1248         UNSAFE.putObject(this, OffsetHolder.rtypeOffset, rtype);
1249         UNSAFE.putObject(this, OffsetHolder.ptypesOffset, ptypes);
1250     }
1251 
1252     // Support for resetting final fields while deserializing. Implement Holder
1253     // pattern to make the rarely needed offset calculation lazy.
1254     private static class OffsetHolder {
1255         static final long rtypeOffset
1256                 = UNSAFE.objectFieldOffset(MethodType.class, "rtype");
1257 
1258         static final long ptypesOffset
1259                 = UNSAFE.objectFieldOffset(MethodType.class, "ptypes");
1260     }
1261 
1262     /**
1263      * Resolves and initializes a {@code MethodType} object
1264      * after serialization.
1265      * @return the fully initialized {@code MethodType} object
1266      */
1267     private Object readResolve() {
1268         // Do not use a trusted path for deserialization:
1269         //    return makeImpl(rtype, ptypes, true);




1228     private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException {
1229         // Assign temporary defaults in case this object escapes
1230         MethodType_init(void.class, NO_PTYPES);
1231 
1232         s.defaultReadObject();  // requires serialPersistentFields to be an empty array
1233 
1234         Class<?>   returnType     = (Class<?>)   s.readObject();
1235         Class<?>[] parameterArray = (Class<?>[]) s.readObject();
1236         parameterArray = parameterArray.clone();  // make sure it is unshared
1237 
1238         // Assign deserialized values
1239         MethodType_init(returnType, parameterArray);
1240     }
1241 
1242     // Initialization of state for deserialization only
1243     private void MethodType_init(Class<?> rtype, Class<?>[] ptypes) {
1244         // In order to communicate these values to readResolve, we must
1245         // store them into the implementation-specific final fields.
1246         checkRtype(rtype);
1247         checkPtypes(ptypes);
1248         UNSAFE.putReference(this, OffsetHolder.rtypeOffset, rtype);
1249         UNSAFE.putReference(this, OffsetHolder.ptypesOffset, ptypes);
1250     }
1251 
1252     // Support for resetting final fields while deserializing. Implement Holder
1253     // pattern to make the rarely needed offset calculation lazy.
1254     private static class OffsetHolder {
1255         static final long rtypeOffset
1256                 = UNSAFE.objectFieldOffset(MethodType.class, "rtype");
1257 
1258         static final long ptypesOffset
1259                 = UNSAFE.objectFieldOffset(MethodType.class, "ptypes");
1260     }
1261 
1262     /**
1263      * Resolves and initializes a {@code MethodType} object
1264      * after serialization.
1265      * @return the fully initialized {@code MethodType} object
1266      */
1267     private Object readResolve() {
1268         // Do not use a trusted path for deserialization:
1269         //    return makeImpl(rtype, ptypes, true);


< prev index next >