--- a/hotspot/src/share/vm/interpreter/linkResolver.cpp Fri Oct 23 14:33:19 2015 +0300
+++ b/hotspot/src/share/vm/interpreter/linkResolver.cpp Mon Oct 26 13:11:36 2015 -0400
@@ -307,12 +307,14 @@
return methodHandle(THREAD, result);
}
+ InstanceKlass* ik = InstanceKlass::cast(klass());
+
// JDK 8, JVMS 5.4.3.4: Interface method resolution should
// ignore static and non-public methods of java.lang.Object,
// like clone, finalize, registerNatives.
if (in_imethod_resolve &&
result != NULL &&
- klass->is_interface() &&
+ ik->is_interface() &&
(result->is_static() || !result->is_public()) &&
result->method_holder() == SystemDictionary::Object_klass()) {
result = NULL;
@@ -321,11 +323,11 @@
// Before considering default methods, check for an overpass in the
// current class if a method has not been found.
if (result == NULL) {
- result = InstanceKlass::cast(klass())->find_method(name, signature);
+ result = ik->find_method(name, signature);
}
if (result == NULL) {
- Array<Method*>* default_methods = InstanceKlass::cast(klass())->default_methods();
+ Array<Method*>* default_methods = ik->default_methods();
if (default_methods != NULL) {
result = InstanceKlass::find_method(default_methods, name, signature);
}
@@ -374,21 +376,21 @@
int vtable_index = Method::invalid_vtable_index;
Symbol* name = resolved_method->name();
Symbol* signature = resolved_method->signature();
+ InstanceKlass* ik = InstanceKlass::cast(klass());
// First check in default method array
- if (!resolved_method->is_abstract() &&
- (InstanceKlass::cast(klass())->default_methods() != NULL)) {
- int index = InstanceKlass::find_method_index(InstanceKlass::cast(klass())->default_methods(),
+ if (!resolved_method->is_abstract() && ik->default_methods() != NULL) {
+ int index = InstanceKlass::find_method_index(ik->default_methods(),
name, signature, Klass::find_overpass,
Klass::find_static, Klass::find_private);
if (index >= 0 ) {
- vtable_index = InstanceKlass::cast(klass())->default_vtable_indices()->at(index);
+ vtable_index = ik->default_vtable_indices()->at(index);
}
}
if (vtable_index == Method::invalid_vtable_index) {
// get vtable_index for miranda methods
ResourceMark rm;
- klassVtable *vt = InstanceKlass::cast(klass())->vtable();
+ klassVtable *vt = ik->vtable();
vtable_index = vt->index_of_miranda(name, signature);
}
return vtable_index;