Handle interface methods in JNI invocation
Change-Id: I7c9d25177fc6fdf9512beb2a882969a9aaf835ba
diff --git a/src/class_linker.cc b/src/class_linker.cc
index 2f1a5d7..7a93d48 100644
--- a/src/class_linker.cc
+++ b/src/class_linker.cc
@@ -201,8 +201,8 @@
// supers as well. These interfaces don't have any methods, so we
// don't have to worry about the ifviPool either.
array_iftable_ = new InterfaceEntry[2];
- array_iftable_[0].SetClass(array_interfaces_->Get(0));
- array_iftable_[1].SetClass(array_interfaces_->Get(1));
+ array_iftable_[0].SetInterface(array_interfaces_->Get(0));
+ array_iftable_[1].SetInterface(array_interfaces_->Get(1));
// now FindClass can be used for non-primitive array classes
// run Object[] through FindClass to complete initialization
@@ -1153,7 +1153,7 @@
}
for (size_t i = 0; i < klass->iftable_count_; ++i) {
const InterfaceEntry* iftable = &klass->iftable_[i];
- Class* interface = iftable->GetClass();
+ Class* interface = iftable->GetInterface();
if (klass->GetClassLoader() != interface->GetClassLoader()) {
for (size_t j = 0; j < interface->NumVirtualMethods(); ++j) {
uint32_t vtable_index = iftable->method_index_array_[j];
@@ -1517,9 +1517,9 @@
LG << "Class implements non-interface class"; // TODO: IncompatibleClassChangeError
return false;
}
- klass->iftable_[idx++].SetClass(interf);
+ klass->iftable_[idx++].SetInterface(interf);
for (size_t j = 0; j < interf->iftable_count_; j++) {
- klass->iftable_[idx++].SetClass(interf->iftable_[j].GetClass());
+ klass->iftable_[idx++].SetInterface(interf->iftable_[j].GetInterface());
}
}
CHECK_EQ(idx, ifcount);
@@ -1528,7 +1528,7 @@
return true;
}
for (size_t i = super_ifcount; i < ifcount; i++) {
- pool_size += klass->iftable_[i].GetClass()->NumVirtualMethods();
+ pool_size += klass->iftable_[i].GetInterface()->NumVirtualMethods();
}
if (pool_size == 0) {
return true;
@@ -1538,7 +1538,7 @@
std::vector<Method*> miranda_list;
for (size_t i = super_ifcount; i < ifcount; ++i) {
klass->iftable_[i].method_index_array_ = klass->ifvi_pool_ + pool_offset;
- Class* interface = klass->iftable_[i].GetClass();
+ Class* interface = klass->iftable_[i].GetInterface();
pool_offset += interface->NumVirtualMethods(); // end here
for (size_t j = 0; j < interface->NumVirtualMethods(); ++j) {
Method* interface_method = interface->GetVirtualMethod(j);