hotspot/src/share/vm/oops/instanceKlass.cpp
// lookup a method in all the interfaces that this class implements
methodOop instanceKlass::lookup_method_in_all_interfaces(Symbol* name,
Symbol* signature) const {
{- -------------------------------------------
(1) 実装している全てインターフェース(スーパーインターフェースも再帰的に含む)に対して,
Klass::lookup_method() を順に呼び出していき, 対象のメソッドを探す.
見つかれば, その時点で結果をリターン.
最後まで見つからなければ, NULL をリターン.
---------------------------------------- -}
objArrayOop all_ifs = instanceKlass::cast(as_klassOop())->transitive_interfaces();
int num_ifs = all_ifs->length();
instanceKlass *ik = NULL;
for (int i = 0; i < num_ifs; i++) {
ik = instanceKlass::cast(klassOop(all_ifs->obj_at(i)));
methodOop m = ik->lookup_method(name, signature);
if (m != NULL) {
return m;
}
}
return NULL;
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.