comparison src/share/vm/oops/instanceKlass.cpp @ 2334:dbad0519a1c4

6845426: non-static <clinit> method with no args is called during the class initialization process Summary: Only call <clinit> with ACC_STATIC for classfiles with version > 50 Reviewed-by: acorn, dholmes, coleenp
author kamg
date Fri, 04 Mar 2011 14:40:46 -0500
parents e5383553fd4e
children 8033953d67ff
comparison
equal deleted inserted replaced
2333:f767174aac14 2334:dbad0519a1c4
733 } 733 }
734 734
735 static int call_class_initializer_impl_counter = 0; // for debugging 735 static int call_class_initializer_impl_counter = 0; // for debugging
736 736
737 methodOop instanceKlass::class_initializer() { 737 methodOop instanceKlass::class_initializer() {
738 return find_method(vmSymbols::class_initializer_name(), vmSymbols::void_method_signature()); 738 methodOop clinit = find_method(
739 vmSymbols::class_initializer_name(), vmSymbols::void_method_signature());
740 if (clinit != NULL && clinit->has_valid_initializer_flags()) {
741 return clinit;
742 }
743 return NULL;
739 } 744 }
740 745
741 void instanceKlass::call_class_initializer_impl(instanceKlassHandle this_oop, TRAPS) { 746 void instanceKlass::call_class_initializer_impl(instanceKlassHandle this_oop, TRAPS) {
742 methodHandle h_method(THREAD, this_oop->class_initializer()); 747 methodHandle h_method(THREAD, this_oop->class_initializer());
743 assert(!this_oop->is_initialized(), "we cannot initialize twice"); 748 assert(!this_oop->is_initialized(), "we cannot initialize twice");