src/share/vm/classfile/defaultMethods.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/classfile/defaultMethods.cpp Thu Jan 17 11:43:12 2013
--- new/src/share/vm/classfile/defaultMethods.cpp Thu Jan 17 11:43:12 2013
*** 1283,1299 ****
--- 1283,1301 ----
static void merge_in_new_methods(InstanceKlass* klass,
GrowableArray<Method*>* new_methods, TRAPS) {
enum { ANNOTATIONS, PARAMETERS, DEFAULTS, NUM_ARRAYS };
! Array<AnnotationArray*>* original_annots[NUM_ARRAYS] = { NULL };
Array<Method*>* original_methods = klass->methods();
Annotations* annots = klass->annotations();
+ if (annots != NULL) {
original_annots[ANNOTATIONS] = annots->methods_annotations();
original_annots[PARAMETERS] = annots->methods_parameter_annotations();
original_annots[DEFAULTS] = annots->methods_default_annotations();
+ }
Array<int>* original_ordering = klass->method_ordering();
Array<int>* merged_ordering = Universe::the_empty_int_array();
int new_size = klass->methods()->length() + new_methods->length();
*** 1368,1380 ****
--- 1370,1388 ----
}
#endif
// Replace klass methods with new merged lists
klass->set_methods(merged_methods);
+ if (annots != NULL) {
annots->set_methods_annotations(merged_annots[ANNOTATIONS]);
annots->set_methods_parameter_annotations(merged_annots[PARAMETERS]);
annots->set_methods_default_annotations(merged_annots[DEFAULTS]);
+ } else {
+ assert(merged_annots[ANNOTATIONS] == NULL, "Must be");
+ assert(merged_annots[PARAMETERS] == NULL, "Must be");
+ assert(merged_annots[DEFAULTS] == NULL, "Must be");
+ }
ClassLoaderData* cld = klass->class_loader_data();
MetadataFactory::free_array(cld, original_methods);
for (int i = 0; i < NUM_ARRAYS; ++i) {
MetadataFactory::free_array(cld, original_annots[i]);
src/share/vm/classfile/defaultMethods.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File