diff options
author | 2017-03-14 14:18:46 +0000 | |
---|---|---|
committer | 2017-03-14 19:03:20 +0000 | |
commit | f44d36c8423f81cbb5e9f55d8813e26ffa1a7f3b (patch) | |
tree | 324b41485ce6c414c1a006c72cbcc5ed9f466138 /runtime/mirror/field.cc | |
parent | 8d6768d47b66a688d35399d524ad5a5450e9d9d4 (diff) |
Revert^2 "Hash-based DexCache field array."
Test: testrunner.py --host --interpreter
Bug: 30627598
This reverts commit 6374c58f2ea403b3a05fb27376110fe4d0fc8e3f.
Change-Id: I275508e288a85d3aa08f7405a1a4f362af43b775
Diffstat (limited to 'runtime/mirror/field.cc')
-rw-r--r-- | runtime/mirror/field.cc | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/runtime/mirror/field.cc b/runtime/mirror/field.cc index f6b64897fa..54034c2bbf 100644 --- a/runtime/mirror/field.cc +++ b/runtime/mirror/field.cc @@ -68,8 +68,16 @@ ArtField* Field::GetArtField() { } } mirror::DexCache* const dex_cache = declaring_class->GetDexCache(); - ArtField* const art_field = dex_cache->GetResolvedField(GetDexFieldIndex(), kRuntimePointerSize); - CHECK(art_field != nullptr); + ArtField* art_field = dex_cache->GetResolvedField(GetDexFieldIndex(), kRuntimePointerSize); + if (UNLIKELY(art_field == nullptr)) { + if (IsStatic()) { + art_field = declaring_class->FindDeclaredStaticField(dex_cache, GetDexFieldIndex()); + } else { + art_field = declaring_class->FindInstanceField(dex_cache, GetDexFieldIndex()); + } + CHECK(art_field != nullptr); + dex_cache->SetResolvedField(GetDexFieldIndex(), art_field, kRuntimePointerSize); + } CHECK_EQ(declaring_class, art_field->GetDeclaringClass()); return art_field; } |