summaryrefslogtreecommitdiff
path: root/runtime/mirror/field.cc
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/mirror/field.cc')
-rw-r--r--runtime/mirror/field.cc10
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;