Mercurial > hg > graal-jvmci-8
comparison src/share/vm/runtime/reflectionUtils.hpp @ 3938:e6b1331a51d2
7086585: make Java field injection more flexible
Reviewed-by: jrose, twisti, kvn, coleenp
author | never |
---|---|
date | Sat, 10 Sep 2011 17:29:02 -0700 |
parents | 1d1603768966 |
children | da91efe96a93 |
comparison
equal
deleted
inserted
replaced
3937:c565834fb592 | 3938:e6b1331a51d2 |
---|---|
105 // } | 105 // } |
106 | 106 |
107 | 107 |
108 class FieldStream : public KlassStream { | 108 class FieldStream : public KlassStream { |
109 private: | 109 private: |
110 int length() const { return fields()->length(); } | 110 int length() const { return _klass->java_fields_count(); } |
111 constantPoolOop constants() const { return _klass->constants(); } | 111 |
112 protected: | |
113 typeArrayOop fields() const { return _klass->fields(); } | |
114 public: | 112 public: |
115 FieldStream(instanceKlassHandle klass, bool local_only, bool classes_only) | 113 FieldStream(instanceKlassHandle klass, bool local_only, bool classes_only) |
116 : KlassStream(klass, local_only, classes_only) { | 114 : KlassStream(klass, local_only, classes_only) { |
117 _index = length(); | 115 _index = length(); |
118 next(); | 116 next(); |
119 } | 117 } |
120 | 118 |
121 void next() { _index -= instanceKlass::next_offset; } | 119 void next() { _index -= 1; } |
122 | 120 |
123 // Accessors for current field | 121 // Accessors for current field |
124 AccessFlags access_flags() const { | 122 AccessFlags access_flags() const { |
125 AccessFlags flags; | 123 AccessFlags flags; |
126 flags.set_flags(fields()->ushort_at(index() + instanceKlass::access_flags_offset)); | 124 flags.set_flags(_klass->field_access_flags(_index)); |
127 return flags; | 125 return flags; |
128 } | 126 } |
129 Symbol* name() const { | 127 Symbol* name() const { |
130 int name_index = fields()->ushort_at(index() + instanceKlass::name_index_offset); | 128 return _klass->field_name(_index); |
131 return constants()->symbol_at(name_index); | |
132 } | 129 } |
133 Symbol* signature() const { | 130 Symbol* signature() const { |
134 int signature_index = fields()->ushort_at(index() + | 131 return _klass->field_signature(_index); |
135 instanceKlass::signature_index_offset); | |
136 return constants()->symbol_at(signature_index); | |
137 } | 132 } |
138 // missing: initval() | 133 // missing: initval() |
139 int offset() const { | 134 int offset() const { |
140 return _klass->offset_from_fields( index() ); | 135 return _klass->field_offset( index() ); |
141 } | 136 } |
142 }; | 137 }; |
143 | 138 |
144 class FilteredField { | 139 class FilteredField { |
145 private: | 140 private: |
211 : FieldStream(klass, local_only, classes_only) { | 206 : FieldStream(klass, local_only, classes_only) { |
212 _filtered_fields_count = FilteredFieldsMap::filtered_fields_count((klassOop)klass(), local_only); | 207 _filtered_fields_count = FilteredFieldsMap::filtered_fields_count((klassOop)klass(), local_only); |
213 } | 208 } |
214 int field_count(); | 209 int field_count(); |
215 void next() { | 210 void next() { |
216 _index -= instanceKlass::next_offset; | 211 _index -= 1; |
217 if (has_filtered_field()) { | 212 if (has_filtered_field()) { |
218 while (_index >=0 && FilteredFieldsMap::is_filtered_field((klassOop)_klass(), offset())) { | 213 while (_index >=0 && FilteredFieldsMap::is_filtered_field((klassOop)_klass(), offset())) { |
219 _index -= instanceKlass::next_offset; | 214 _index -= 1; |
220 } | 215 } |
221 } | 216 } |
222 } | 217 } |
223 }; | 218 }; |
224 | 219 |