348 // { u2 bootstrap_method_ref; |
348 // { u2 bootstrap_method_ref; |
349 // u2 num_bootstrap_arguments; |
349 // u2 num_bootstrap_arguments; |
350 // u2 bootstrap_arguments[num_bootstrap_arguments]; |
350 // u2 bootstrap_arguments[num_bootstrap_arguments]; |
351 // } bootstrap_methods[num_bootstrap_methods]; |
351 // } bootstrap_methods[num_bootstrap_methods]; |
352 // } |
352 // } |
353 void JvmtiClassFileReconstituter::write_boostrapmethod_attribute() { |
353 void JvmtiClassFileReconstituter::write_bootstrapmethod_attribute() { |
354 Array<u2>* operands = cpool()->operands(); |
354 Array<u2>* operands = cpool()->operands(); |
355 write_attribute_name_index("BootstrapMethods"); |
355 write_attribute_name_index("BootstrapMethods"); |
356 int num_bootstrap_methods = ConstantPool::operand_array_length(operands); |
356 int num_bootstrap_methods = ConstantPool::operand_array_length(operands); |
357 |
357 |
358 // calculate length of attribute |
358 // calculate length of attribute |
359 int length = sizeof(u2); // num_boostrap_methods |
359 int length = sizeof(u2); // num_bootstrap_methods |
360 for (int n = 0; n < num_bootstrap_methods; n++) { |
360 for (int n = 0; n < num_bootstrap_methods; n++) { |
361 u2 num_bootstrap_arguments = cpool()->operand_argument_count_at(n); |
361 u2 num_bootstrap_arguments = cpool()->operand_argument_count_at(n); |
362 length += sizeof(u2); // bootstrap_method_ref |
362 length += sizeof(u2); // bootstrap_method_ref |
363 length += sizeof(u2); // num_bootstrap_arguments |
363 length += sizeof(u2); // num_bootstrap_arguments |
364 length += sizeof(u2) * num_bootstrap_arguments; // bootstrap_arguments[num_bootstrap_arguments] |
364 length += sizeof(u2) * num_bootstrap_arguments; // bootstrap_arguments[num_bootstrap_arguments] |
655 } |
655 } |
656 if (anno != NULL) { |
656 if (anno != NULL) { |
657 write_annotations_attribute("RuntimeVisibleAnnotations", anno); |
657 write_annotations_attribute("RuntimeVisibleAnnotations", anno); |
658 } |
658 } |
659 if (cpool()->operands() != NULL) { |
659 if (cpool()->operands() != NULL) { |
660 write_boostrapmethod_attribute(); |
660 write_bootstrapmethod_attribute(); |
661 } |
661 } |
662 } |
662 } |
663 |
663 |
664 // Write the method information portion of ClassFile structure |
664 // Write the method information portion of ClassFile structure |
665 // JVMSpec| u2 methods_count; |
665 // JVMSpec| u2 methods_count; |