diff options
author | Ian Rogers <irogers@google.com> | 2014-03-21 11:21:29 -0700 |
---|---|---|
committer | Ian Rogers <irogers@google.com> | 2014-03-21 11:25:56 -0700 |
commit | 62f0512bf6d9bc6141358bf22e93afa70dc58b1a (patch) | |
tree | 7fdc0b9be0df2da5ff2575862a24db5c10eae9dc /runtime/mirror/art_field.cc | |
parent | 215f3e60cd97471c0843eae22a041c335e89071c (diff) | |
download | art-62f0512bf6d9bc6141358bf22e93afa70dc58b1a.tar.gz art-62f0512bf6d9bc6141358bf22e93afa70dc58b1a.tar.bz2 art-62f0512bf6d9bc6141358bf22e93afa70dc58b1a.zip |
Improvements to Field.get/set.
Avoid unnecessary repeated computation in Field.get/set.
Refactor FromReflectedField and FromReflectedMethod into common helpers in
mirror::ArtField and mirror::ArtMethod, and make use of thereby avoiding
transitions through JNI.
Avoid JNI use from within FromReflectedField and FromReflectedMethod.
Tidy up Field.get/set wrt moving collector support.
Bug: 12189533
Change-Id: I643ab3474bade4abac3a3ae2b6e373b2bb0891c8
Diffstat (limited to 'runtime/mirror/art_field.cc')
-rw-r--r-- | runtime/mirror/art_field.cc | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/runtime/mirror/art_field.cc b/runtime/mirror/art_field.cc index 7740213cf9..f91cab1036 100644 --- a/runtime/mirror/art_field.cc +++ b/runtime/mirror/art_field.cc @@ -21,7 +21,9 @@ #include "object-inl.h" #include "object_utils.h" #include "runtime.h" +#include "scoped_thread_state_change.h" #include "utils.h" +#include "well_known_classes.h" namespace art { namespace mirror { @@ -29,6 +31,13 @@ namespace mirror { // TODO: get global references for these Class* ArtField::java_lang_reflect_ArtField_ = NULL; +ArtField* ArtField::FromReflectedField(const ScopedObjectAccess& soa, jobject jlr_field) { + mirror::ArtField* f = soa.DecodeField(WellKnownClasses::java_lang_reflect_Field_artField); + mirror::ArtField* field = f->GetObject(soa.Decode<mirror::Object*>(jlr_field))->AsArtField(); + DCHECK(field != nullptr); + return field; +} + void ArtField::SetClass(Class* java_lang_reflect_ArtField) { CHECK(java_lang_reflect_ArtField_ == NULL); CHECK(java_lang_reflect_ArtField != NULL); |