< prev index next >

src/hotspot/share/oops/method.cpp

Print this page




 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 {


< prev index next >