diff options
author | 2019-09-24 14:36:50 -0700 | |
---|---|---|
committer | 2019-10-03 20:44:33 +0000 | |
commit | c84fc3a742b160ce51cbf01c2e5f971ccc0a2c6c (patch) | |
tree | 1380b353e0d3b5015c9d1ef29fd4c2534828f97b /runtime/reflective_value_visitor.cc | |
parent | 8679fd5e938d7bed67d3ab67c55b7f4fb2cdd92a (diff) |
Walk internal ArtField/ArtMethod pointers
During structural class redefinition we sometimes need to update some
of the ArtMethod/ArtField pointers held by runtime frames. This adds
support for doing this through a StackReflectiveHandleScope similar to
the StackHandleScope used for holding object references. This also
updates various places where reflective-handles to ArtMethods and
ArtFields are needed, for example the JniIdManager, field Read/Write
operations and events, field resolution, and the old debugger.
Test: ./test.py --host
Bug: 134162467
Change-Id: I4ea73e85956a07735c6d7b125c5828a4233670bc
Diffstat (limited to 'runtime/reflective_value_visitor.cc')
-rw-r--r-- | runtime/reflective_value_visitor.cc | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/runtime/reflective_value_visitor.cc b/runtime/reflective_value_visitor.cc index 69fd51ff6e..5a288d38be 100644 --- a/runtime/reflective_value_visitor.cc +++ b/runtime/reflective_value_visitor.cc @@ -42,4 +42,13 @@ void JniIdReflectiveSourceInfo<jmethodID>::Describe(std::ostream& os) const { os << " jmethodID=" << reinterpret_cast<uintptr_t>(id_); } +void ReflectiveHandleScopeSourceInfo::Describe(std::ostream& os) const { + ReflectionSourceInfo::Describe(os); + os << " source= (" << source_ << ") "; + if (source_ == nullptr) { + os << "nullptr"; + } else { + os << *source_; + } +} } // namespace art |