diff options
Diffstat (limited to 'runtime/mirror/var_handle.h')
| -rw-r--r-- | runtime/mirror/var_handle.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/runtime/mirror/var_handle.h b/runtime/mirror/var_handle.h index fd225e0724..3747b3edbd 100644 --- a/runtime/mirror/var_handle.h +++ b/runtime/mirror/var_handle.h @@ -32,6 +32,7 @@ enum class Intrinsics; struct VarHandleOffsets; struct FieldVarHandleOffsets; +struct StaticFieldVarHandleOffsets; struct ArrayElementVarHandleOffsets; struct ByteArrayViewVarHandleOffsets; struct ByteBufferViewVarHandleOffsets; @@ -235,6 +236,26 @@ class MANAGED FieldVarHandle : public VarHandle { DISALLOW_IMPLICIT_CONSTRUCTORS(FieldVarHandle); }; +class MANAGED StaticFieldVarHandle : public FieldVarHandle { + public: + MIRROR_CLASS("Ljava/lang/invoke/StaticFieldVarHandle;"); + + // Used for updating var-handles to obsolete fields. + void VisitTarget(ReflectiveValueVisitor* v) REQUIRES(Locks::mutator_lock_); + + static MemberOffset DeclaringClassOffset() { + return MemberOffset(OFFSETOF_MEMBER(StaticFieldVarHandle, declaring_class_)); + } + + private: + HeapReference<mirror::Class> declaring_class_; + + friend class VarHandleTest; // for var_handle_test. + friend struct art::StaticFieldVarHandleOffsets; // for verifying offset information + DISALLOW_IMPLICIT_CONSTRUCTORS(StaticFieldVarHandle); +}; + + // Represents a VarHandle providing accessors to an array. // The corresponding managed class in libart java.lang.invoke.ArrayElementVarHandle. class MANAGED ArrayElementVarHandle : public VarHandle { |