summaryrefslogtreecommitdiff
path: root/runtime/mirror/var_handle.h
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/mirror/var_handle.h')
-rw-r--r--runtime/mirror/var_handle.h21
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 {