diff options
Diffstat (limited to 'runtime/mirror/field.cc')
-rw-r--r-- | runtime/mirror/field.cc | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/runtime/mirror/field.cc b/runtime/mirror/field.cc index f4d1e730a3..9a400065a9 100644 --- a/runtime/mirror/field.cc +++ b/runtime/mirror/field.cc @@ -24,7 +24,7 @@ namespace art { namespace mirror { -ArtField* Field::GetArtField() { +ArtField* Field::GetArtField(bool use_dex_cache) { ObjPtr<mirror::Class> declaring_class = GetDeclaringClass(); if (UNLIKELY(declaring_class->IsProxyClass())) { DCHECK(IsStatic()); @@ -38,7 +38,9 @@ ArtField* Field::GetArtField() { } } const ObjPtr<mirror::DexCache> dex_cache = declaring_class->GetDexCache(); - ArtField* art_field = dex_cache->GetResolvedField(GetDexFieldIndex(), kRuntimePointerSize); + ArtField* art_field = use_dex_cache + ? dex_cache->GetResolvedField(GetDexFieldIndex(), kRuntimePointerSize) + : nullptr; if (UNLIKELY(art_field == nullptr)) { if (IsStatic()) { art_field = declaring_class->FindDeclaredStaticField(dex_cache, GetDexFieldIndex()); @@ -46,7 +48,9 @@ ArtField* Field::GetArtField() { art_field = declaring_class->FindInstanceField(dex_cache, GetDexFieldIndex()); } CHECK(art_field != nullptr); - dex_cache->SetResolvedField(GetDexFieldIndex(), art_field, kRuntimePointerSize); + if (use_dex_cache) { + dex_cache->SetResolvedField(GetDexFieldIndex(), art_field, kRuntimePointerSize); + } } CHECK_EQ(declaring_class, art_field->GetDeclaringClass()); return art_field; |