// Write the method information portion of ClassFile structure // JVMSpec| u2 methods_count; // JVMSpec| method_info methods[methods_count]; void JvmtiClassFileReconstituter::write_method_infos() { HandleMark hm(thread()); objArrayHandle methods(thread(), ikh()->methods()); int num_methods = methods->length(); write_u2(num_methods); if (JvmtiExport::can_maintain_original_method_order()) { int index; int original_index; int* method_order = NEW_RESOURCE_ARRAY(int, num_methods); // invert the method order mapping for (index = 0; index < num_methods; index++) { original_index = ikh()->method_ordering()->int_at(index); assert(original_index >= 0 && original_index < num_methods, "invalid original method index"); method_order[original_index] = index; } // write in original order for (original_index = 0; original_index < num_methods; original_index++) { index = method_order[original_index]; methodHandle method(thread(), (methodOop)(ikh()->methods()->obj_at(index))); write_method_info(method); } } else { // method order not preserved just dump the method infos for (int index = 0; index < num_methods; index++) {
// Write the method information portion of ClassFile structure // JVMSpec| u2 methods_count; // JVMSpec| method_info methods[methods_count]; void JvmtiClassFileReconstituter::write_method_infos() { HandleMark hm(thread()); Array<Method*>* methods = ikh()->methods(); int num_methods = methods->length(); int num_overpass = 0; // count the generated default interface methods // these will not be re-created by write_method_info // and should not be included in the total count for (int index = 0; index < num_methods; index++) { Method* method = methods->at(index); if (method->is_overpass()) { num_overpass++; } } write_u2(num_methods - num_overpass); if (JvmtiExport::can_maintain_original_method_order()) { int index; int original_index; intArray method_order(num_methods, 0); // invert the method order mapping for (index = 0; index < num_methods; index++) { original_index = ikh()->method_ordering()->at(index); assert(original_index >= 0 && original_index < num_methods, "invalid original method index"); method_order.at_put(original_index, index); } // write in original order for (original_index = 0; original_index < num_methods; original_index++) { index = method_order.at(original_index); methodHandle method(thread(), methods->at(index)); write_method_info(method); } } else { // method order not preserved just dump the method infos for (int index = 0; index < num_methods; index++) { methodHandle method(thread(), methods->at(index)); write_method_info(method); } } }