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); |