summaryrefslogtreecommitdiff
path: root/runtime/mirror/field.cc
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2017-03-14 14:18:46 +0000
committer Vladimir Marko <vmarko@google.com> 2017-03-14 19:03:20 +0000
commitf44d36c8423f81cbb5e9f55d8813e26ffa1a7f3b (patch)
tree324b41485ce6c414c1a006c72cbcc5ed9f466138 /runtime/mirror/field.cc
parent8d6768d47b66a688d35399d524ad5a5450e9d9d4 (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.cc12
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;
}