diff options
author | 2019-11-13 09:33:52 -0800 | |
---|---|---|
committer | 2019-11-26 02:11:19 +0000 | |
commit | c47040d31cbcd8cddd5fadb552b4f0f6c94b5bd0 (patch) | |
tree | 50df569420cd6746daadf1487933719d1f86d66b /runtime/mirror/class.h | |
parent | dc540dfffb6863177143d024dd6f491775d77585 (diff) |
Allow structural redefinition on non-final classes.
This adds support for structurally redefining non-final,
non-finalizable classes. The only restriction is that one cannot
redefine a class at the same time as any of its supertypes, if a
structural redefinition is occurring. The structural redefinition may
not remove any fields or methods, change the superclass or change the
implemented interfaces. Adding new methods or fields, both static or
non-static, public, private, protected, or package-private, is
supported.
Test: ./test.py --host
Bug: 134162467
Bug: 144168550
Change-Id: I32e9e854b3e56270170b10e8f5aba9de8f6bfdfa
Diffstat (limited to 'runtime/mirror/class.h')
-rw-r--r-- | runtime/mirror/class.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/runtime/mirror/class.h b/runtime/mirror/class.h index b1186d9b12..f88438bd6d 100644 --- a/runtime/mirror/class.h +++ b/runtime/mirror/class.h @@ -617,6 +617,11 @@ class MANAGED Class final : public Object { // to themselves. Classes for primitive types may not assign to each other. ALWAYS_INLINE bool IsAssignableFrom(ObjPtr<Class> src) REQUIRES_SHARED(Locks::mutator_lock_); + // Checks if 'klass' is a redefined version of this. + bool IsObsoleteVersionOf(ObjPtr<Class> klass) REQUIRES_SHARED(Locks::mutator_lock_); + + ObjPtr<Class> GetObsoleteClass() REQUIRES_SHARED(Locks::mutator_lock_); + template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags, ReadBarrierOption kReadBarrierOption = kWithReadBarrier> ALWAYS_INLINE ObjPtr<Class> GetSuperClass() REQUIRES_SHARED(Locks::mutator_lock_); |