equal
deleted
inserted
replaced
31 #include "code/dependencies.hpp" |
31 #include "code/dependencies.hpp" |
32 #include "compiler/compileLog.hpp" |
32 #include "compiler/compileLog.hpp" |
33 #include "compiler/compileBroker.hpp" |
33 #include "compiler/compileBroker.hpp" |
34 #include "compiler/compileTask.hpp" |
34 #include "compiler/compileTask.hpp" |
35 #include "memory/resourceArea.hpp" |
35 #include "memory/resourceArea.hpp" |
|
36 #include "oops/klass.hpp" |
36 #include "oops/oop.inline.hpp" |
37 #include "oops/oop.inline.hpp" |
37 #include "oops/objArrayKlass.hpp" |
38 #include "oops/objArrayKlass.hpp" |
38 #include "runtime/flags/flagSetting.hpp" |
39 #include "runtime/flags/flagSetting.hpp" |
39 #include "runtime/handles.hpp" |
40 #include "runtime/handles.hpp" |
40 #include "runtime/handles.inline.hpp" |
41 #include "runtime/handles.inline.hpp" |
1226 if (doing_subtype_search()) { |
1227 if (doing_subtype_search()) { |
1227 return Dependencies::is_concrete_klass(k); |
1228 return Dependencies::is_concrete_klass(k); |
1228 } else if (!k->is_instance_klass()) { |
1229 } else if (!k->is_instance_klass()) { |
1229 return false; // no methods to find in an array type |
1230 return false; // no methods to find in an array type |
1230 } else { |
1231 } else { |
1231 // Search class hierarchy first. |
1232 // Search class hierarchy first, skipping private implementations |
1232 Method* m = InstanceKlass::cast(k)->find_instance_method(_name, _signature); |
1233 // as they never override any inherited methods |
|
1234 Method* m = InstanceKlass::cast(k)->find_instance_method(_name, _signature, Klass::skip_private); |
1233 if (!Dependencies::is_concrete_method(m, k)) { |
1235 if (!Dependencies::is_concrete_method(m, k)) { |
1234 // Check for re-abstraction of method |
1236 // Check for re-abstraction of method |
1235 if (!k->is_interface() && m != NULL && m->is_abstract()) { |
1237 if (!k->is_interface() && m != NULL && m->is_abstract()) { |
1236 // Found a matching abstract method 'm' in the class hierarchy. |
1238 // Found a matching abstract method 'm' in the class hierarchy. |
1237 // This is fine iff 'k' is an abstract class and all concrete subtypes |
1239 // This is fine iff 'k' is an abstract class and all concrete subtypes |