diff options
Diffstat (limited to 'runtime/mirror/class.cc')
-rw-r--r-- | runtime/mirror/class.cc | 30 |
1 files changed, 1 insertions, 29 deletions
diff --git a/runtime/mirror/class.cc b/runtime/mirror/class.cc index 0bf1b1cc0a..01f8fb3201 100644 --- a/runtime/mirror/class.cc +++ b/runtime/mirror/class.cc @@ -1173,35 +1173,7 @@ ArtField* Class::FindDeclaredStaticField(std::string_view name, std::string_view } ArtField* Class::FindDeclaredField(ObjPtr<DexCache> dex_cache, uint32_t dex_field_idx) { - size_t num_fields = NumFields(); - if (dex_cache == GetDexCache() && num_fields > 0) { - // The field array is an ordered list of fields where there may be missing - // indices. For example, it could be [40, 42], but in 90% of cases cases we have - // [40, 41, 42]. The latter is the case we are optimizing for, where for - // example `dex_field_idx` is 41, and we can just substract it with the - // first field index (40) and directly access the array with that index (1). - uint32_t index = dex_field_idx - GetField(0)->GetDexFieldIndex(); - if (index < num_fields) { - ArtField* field = GetField(index); - if (field->GetDexFieldIndex() == dex_field_idx) { - return field; - } - } else { - index = num_fields; - } - // If there is a field, it's down the array. The array is ordered by field - // index, so we know we can stop the search if `dex_field_idx` is greater - // than the current field's index. - for (; index > 0; --index) { - ArtField* field = GetField(index - 1); - if (field->GetDexFieldIndex() == dex_field_idx) { - return field; - } else if (field->GetDexFieldIndex() < dex_field_idx) { - break; - } - } - } - return nullptr; + return (dex_cache == GetDexCache()) ? FindDeclaredField(dex_field_idx) : nullptr; } ArtField* Class::FindDeclaredStaticField(ObjPtr<DexCache> dex_cache, uint32_t dex_field_idx) { |