680 return is_object_initializer() || is_static_initializer(); 681 } 682 683 bool Method::has_valid_initializer_flags() const { 684 return (is_static() || 685 method_holder()->major_version() < 51); 686 } 687 688 bool Method::is_static_initializer() const { 689 // For classfiles version 51 or greater, ensure that the clinit method is 690 // static. Non-static methods with the name "<clinit>" are not static 691 // initializers. (older classfiles exempted for backward compatibility) 692 return name() == vmSymbols::class_initializer_name() && 693 has_valid_initializer_flags(); 694 } 695 696 bool Method::is_object_initializer() const { 697 return name() == vmSymbols::object_initializer_name(); 698 } 699 700 objArrayHandle Method::resolved_checked_exceptions_impl(Method* method, TRAPS) { 701 int length = method->checked_exceptions_length(); 702 if (length == 0) { // common case 703 return objArrayHandle(THREAD, Universe::the_empty_class_klass_array()); 704 } else { 705 methodHandle h_this(THREAD, method); 706 objArrayOop m_oop = oopFactory::new_objArray(SystemDictionary::Class_klass(), length, CHECK_(objArrayHandle())); 707 objArrayHandle mirrors (THREAD, m_oop); 708 for (int i = 0; i < length; i++) { 709 CheckedExceptionElement* table = h_this->checked_exceptions_start(); // recompute on each iteration, not gc safe 710 Klass* k = h_this->constants()->klass_at(table[i].class_cp_index, CHECK_(objArrayHandle())); 711 assert(k->is_subclass_of(SystemDictionary::Throwable_klass()), "invalid exception class"); 712 mirrors->obj_at_put(i, k->java_mirror()); 713 } 714 return mirrors; 715 } 716 }; 717 718 719 int Method::line_number_from_bci(int bci) const { | 680 return is_object_initializer() || is_static_initializer(); 681 } 682 683 bool Method::has_valid_initializer_flags() const { 684 return (is_static() || 685 method_holder()->major_version() < 51); 686 } 687 688 bool Method::is_static_initializer() const { 689 // For classfiles version 51 or greater, ensure that the clinit method is 690 // static. Non-static methods with the name "<clinit>" are not static 691 // initializers. (older classfiles exempted for backward compatibility) 692 return name() == vmSymbols::class_initializer_name() && 693 has_valid_initializer_flags(); 694 } 695 696 bool Method::is_object_initializer() const { 697 return name() == vmSymbols::object_initializer_name(); 698 } 699 700 bool Method::needs_clinit_barrier() const { 701 return is_static() && !method_holder()->is_initialized(); 702 } 703 704 objArrayHandle Method::resolved_checked_exceptions_impl(Method* method, TRAPS) { 705 int length = method->checked_exceptions_length(); 706 if (length == 0) { // common case 707 return objArrayHandle(THREAD, Universe::the_empty_class_klass_array()); 708 } else { 709 methodHandle h_this(THREAD, method); 710 objArrayOop m_oop = oopFactory::new_objArray(SystemDictionary::Class_klass(), length, CHECK_(objArrayHandle())); 711 objArrayHandle mirrors (THREAD, m_oop); 712 for (int i = 0; i < length; i++) { 713 CheckedExceptionElement* table = h_this->checked_exceptions_start(); // recompute on each iteration, not gc safe 714 Klass* k = h_this->constants()->klass_at(table[i].class_cp_index, CHECK_(objArrayHandle())); 715 assert(k->is_subclass_of(SystemDictionary::Throwable_klass()), "invalid exception class"); 716 mirrors->obj_at_put(i, k->java_mirror()); 717 } 718 return mirrors; 719 } 720 }; 721 722 723 int Method::line_number_from_bci(int bci) const { |