1283 static void merge_in_new_methods(InstanceKlass* klass, |
1283 static void merge_in_new_methods(InstanceKlass* klass, |
1284 GrowableArray<Method*>* new_methods, TRAPS) { |
1284 GrowableArray<Method*>* new_methods, TRAPS) { |
1285 |
1285 |
1286 enum { ANNOTATIONS, PARAMETERS, DEFAULTS, NUM_ARRAYS }; |
1286 enum { ANNOTATIONS, PARAMETERS, DEFAULTS, NUM_ARRAYS }; |
1287 |
1287 |
1288 Array<AnnotationArray*>* original_annots[NUM_ARRAYS]; |
1288 Array<AnnotationArray*>* original_annots[NUM_ARRAYS] = { NULL }; |
1289 |
1289 |
1290 Array<Method*>* original_methods = klass->methods(); |
1290 Array<Method*>* original_methods = klass->methods(); |
1291 Annotations* annots = klass->annotations(); |
1291 Annotations* annots = klass->annotations(); |
1292 original_annots[ANNOTATIONS] = annots->methods_annotations(); |
1292 if (annots != NULL) { |
1293 original_annots[PARAMETERS] = annots->methods_parameter_annotations(); |
1293 original_annots[ANNOTATIONS] = annots->methods_annotations(); |
1294 original_annots[DEFAULTS] = annots->methods_default_annotations(); |
1294 original_annots[PARAMETERS] = annots->methods_parameter_annotations(); |
|
1295 original_annots[DEFAULTS] = annots->methods_default_annotations(); |
|
1296 } |
1295 |
1297 |
1296 Array<int>* original_ordering = klass->method_ordering(); |
1298 Array<int>* original_ordering = klass->method_ordering(); |
1297 Array<int>* merged_ordering = Universe::the_empty_int_array(); |
1299 Array<int>* merged_ordering = Universe::the_empty_int_array(); |
1298 |
1300 |
1299 int new_size = klass->methods()->length() + new_methods->length(); |
1301 int new_size = klass->methods()->length() + new_methods->length(); |
1368 } |
1370 } |
1369 #endif |
1371 #endif |
1370 |
1372 |
1371 // Replace klass methods with new merged lists |
1373 // Replace klass methods with new merged lists |
1372 klass->set_methods(merged_methods); |
1374 klass->set_methods(merged_methods); |
1373 annots->set_methods_annotations(merged_annots[ANNOTATIONS]); |
1375 if (annots != NULL) { |
1374 annots->set_methods_parameter_annotations(merged_annots[PARAMETERS]); |
1376 annots->set_methods_annotations(merged_annots[ANNOTATIONS]); |
1375 annots->set_methods_default_annotations(merged_annots[DEFAULTS]); |
1377 annots->set_methods_parameter_annotations(merged_annots[PARAMETERS]); |
|
1378 annots->set_methods_default_annotations(merged_annots[DEFAULTS]); |
|
1379 } else { |
|
1380 assert(merged_annots[ANNOTATIONS] == NULL, "Must be"); |
|
1381 assert(merged_annots[PARAMETERS] == NULL, "Must be"); |
|
1382 assert(merged_annots[DEFAULTS] == NULL, "Must be"); |
|
1383 } |
1376 |
1384 |
1377 ClassLoaderData* cld = klass->class_loader_data(); |
1385 ClassLoaderData* cld = klass->class_loader_data(); |
1378 MetadataFactory::free_array(cld, original_methods); |
1386 MetadataFactory::free_array(cld, original_methods); |
1379 for (int i = 0; i < NUM_ARRAYS; ++i) { |
1387 for (int i = 0; i < NUM_ARRAYS; ++i) { |
1380 MetadataFactory::free_array(cld, original_annots[i]); |
1388 MetadataFactory::free_array(cld, original_annots[i]); |