39 class fieldDescriptor {
40 private:
41 FieldInfo _fieldinfo;
42 constantPoolHandle _cp;
43
44 inline FieldInfo field() const { return _fieldinfo; };
45
46 public:
47 fieldDescriptor() {}
48 fieldDescriptor(InstanceKlass* ik, int index) {
49 reinitialize(ik, index);
50 }
51 inline Symbol* name() const;
52 inline Symbol* signature() const;
53 inline InstanceKlass* field_holder() const {return _cp->pool_holder(); };
54 inline ConstantPool* constants() const;
55
56 AccessFlags access_flags() const { return _fieldinfo.access_flags(); }
57 FieldInfo::FieldFlags field_flags() const { return _fieldinfo.field_flags(); }
58 FieldStatus field_status() const { return field_holder()->fields_status()->at(_fieldinfo.index()); }
59 oop loader() const;
60 // Offset (in bytes) of field from start of instanceOop / Klass*
61 inline int offset() const;
62 Symbol* generic_signature() const;
63 int index() const { return _fieldinfo.index(); }
64 AnnotationArray* annotations() const;
65 AnnotationArray* type_annotations() const;
66
67 // Initial field value
68 inline bool has_initial_value() const;
69 inline int initial_value_index() const;
70 constantTag initial_value_tag() const; // The tag will return true on one of is_int(), is_long(), is_single(), is_double()
71 jint int_initial_value() const;
72 jlong long_initial_value() const;
73 jfloat float_initial_value() const;
74 jdouble double_initial_value() const;
75 oop string_initial_value(TRAPS) const;
76
77 // Field signature type
78 inline BasicType field_type() const;
79
80 // Access flags
81 bool is_private() const { return access_flags().is_private(); }
82 bool is_protected() const { return access_flags().is_protected(); }
83
84 bool is_static() const { return access_flags().is_static(); }
85 bool is_final() const { return access_flags().is_final(); }
86 bool is_stable() const { return field_flags().is_stable(); }
87 bool is_volatile() const { return access_flags().is_volatile(); }
88 bool is_transient() const { return access_flags().is_transient(); }
89
90 bool is_synthetic() const { return access_flags().is_synthetic(); }
91
92 bool is_field_access_watched() const { return field_status().is_access_watched(); }
93 bool is_field_modification_watched() const
94 { return field_status().is_modification_watched(); }
95 bool has_initialized_final_update() const { return field_status().is_initialized_final_update(); }
96 bool has_generic_signature() const { return field_flags().is_generic(); }
97
98 bool is_trusted_final() const;
99
100 inline void set_is_field_access_watched(const bool value);
101 inline void set_is_field_modification_watched(const bool value);
102 inline void set_has_initialized_final_update(const bool value);
103
104 // Initialization
105 void reinitialize(InstanceKlass* ik, int index);
106
107 // Print
108 void print() const;
109 void print_on(outputStream* st) const;
110 void print_on_for(outputStream* st, oop obj);
111 };
112
113 #endif // SHARE_RUNTIME_FIELDDESCRIPTOR_HPP
|
39 class fieldDescriptor {
40 private:
41 FieldInfo _fieldinfo;
42 constantPoolHandle _cp;
43
44 inline FieldInfo field() const { return _fieldinfo; };
45
46 public:
47 fieldDescriptor() {}
48 fieldDescriptor(InstanceKlass* ik, int index) {
49 reinitialize(ik, index);
50 }
51 inline Symbol* name() const;
52 inline Symbol* signature() const;
53 inline InstanceKlass* field_holder() const {return _cp->pool_holder(); };
54 inline ConstantPool* constants() const;
55
56 AccessFlags access_flags() const { return _fieldinfo.access_flags(); }
57 FieldInfo::FieldFlags field_flags() const { return _fieldinfo.field_flags(); }
58 FieldStatus field_status() const { return field_holder()->fields_status()->at(_fieldinfo.index()); }
59 LayoutKind layout_kind() const { return _fieldinfo.layout_kind(); }
60 oop loader() const;
61 // Offset (in bytes) of field from start of instanceOop / Klass*
62 inline int offset() const;
63 Symbol* generic_signature() const;
64 int index() const { return _fieldinfo.index(); }
65 AnnotationArray* annotations() const;
66 AnnotationArray* type_annotations() const;
67
68 // Initial field value
69 inline bool has_initial_value() const;
70 inline int initial_value_index() const;
71 constantTag initial_value_tag() const; // The tag will return true on one of is_int(), is_long(), is_single(), is_double()
72 jint int_initial_value() const;
73 jlong long_initial_value() const;
74 jfloat float_initial_value() const;
75 jdouble double_initial_value() const;
76 oop string_initial_value(TRAPS) const;
77
78 // Field signature type
79 inline BasicType field_type() const;
80
81 // Access flags
82 bool is_private() const { return access_flags().is_private(); }
83 bool is_protected() const { return access_flags().is_protected(); }
84
85 bool is_static() const { return access_flags().is_static(); }
86 bool is_final() const { return access_flags().is_final(); }
87 bool is_stable() const { return field_flags().is_stable(); }
88 bool is_volatile() const { return access_flags().is_volatile(); }
89 bool is_transient() const { return access_flags().is_transient(); }
90 inline bool is_flat() const;
91 inline bool is_null_free_inline_type() const;
92 inline bool has_null_marker() const;
93
94 bool is_synthetic() const { return access_flags().is_synthetic(); }
95
96 bool is_field_access_watched() const { return field_status().is_access_watched(); }
97 bool is_field_modification_watched() const
98 { return field_status().is_modification_watched(); }
99 bool has_initialized_final_update() const { return field_status().is_initialized_final_update(); }
100 bool has_generic_signature() const { return field_flags().is_generic(); }
101
102 bool is_trusted_final() const;
103
104 inline void set_is_field_access_watched(const bool value);
105 inline void set_is_field_modification_watched(const bool value);
106 inline void set_has_initialized_final_update(const bool value);
107
108 // Initialization
109 void reinitialize(InstanceKlass* ik, int index);
110
111 // Print
112 void print() const;
113 void print_on(outputStream* st, int base_offset = 0) const;
114 void print_on_for(outputStream* st, oop obj, int indent = 0, int base_offset = 0);
115 };
116
117 #endif // SHARE_RUNTIME_FIELDDESCRIPTOR_HPP
|