< prev index next >

src/hotspot/share/oops/klassVtable.cpp

Print this page

        

*** 452,463 **** klassVtable superVtable = super->vtable(); super_method = superVtable.method_at(i); } else { super_method = method_at(i); } ! // Check if method name matches ! if (super_method->name() == name && super_method->signature() == signature) { // get super_klass for method_holder for the found method InstanceKlass* super_klass = super_method->method_holder(); // Whether the method is being overridden --- 452,466 ---- klassVtable superVtable = super->vtable(); super_method = superVtable.method_at(i); } else { super_method = method_at(i); } ! // Check if method name matches. Ignore match if klass is an interface and the ! // matching method is a non-public java.lang.Object method. (See JVMS 5.4.3.4) ! if (super_method->name() == name && super_method->signature() == signature && ! (!_klass->is_interface() || ! !SystemDictionary::is_nonpublic_Object_method(super_method))) { // get super_klass for method_holder for the found method InstanceKlass* super_klass = super_method->method_holder(); // Whether the method is being overridden
*** 798,809 **** // Overpasses may or may not exist for supers for pass 1, // they should have been created for pass 2 and later. for (const Klass* cursuper = super; cursuper != NULL; cursuper = cursuper->super()) { ! if (InstanceKlass::cast(cursuper)->find_local_method(name, signature, ! Klass::find_overpass, Klass::skip_static, Klass::skip_private) != NULL) { return false; } } return true; --- 801,816 ---- // Overpasses may or may not exist for supers for pass 1, // they should have been created for pass 2 and later. for (const Klass* cursuper = super; cursuper != NULL; cursuper = cursuper->super()) { ! Method* found_mth = InstanceKlass::cast(cursuper)->find_local_method(name, signature, ! Klass::find_overpass, Klass::skip_static, Klass::skip_private); ! // Continue looking if found_mth is a non-public method in java.lang.Object ! // because such methods are skipped over during interface method resolution ! // and may 'mask' an actual miranda method. ! if (found_mth != NULL && !SystemDictionary::is_nonpublic_Object_method(found_mth)) { return false; } } return true;
< prev index next >