hotspot/src/share/vm/runtime/reflectionUtils.hpp
changeset 8076 96d498ec7ae1
parent 7397 5b173b4ca846
child 8921 14bfe81f2a9d
equal deleted inserted replaced
8075:582dd25571b2 8076:96d498ec7ae1
    98 // A FieldStream streams over all fields in a class, superclasses and (super)interfaces.
    98 // A FieldStream streams over all fields in a class, superclasses and (super)interfaces.
    99 // Streaming is done in reverse order (subclasses first, fields in reverse order)
    99 // Streaming is done in reverse order (subclasses first, fields in reverse order)
   100 // Usage:
   100 // Usage:
   101 //
   101 //
   102 //    for (FieldStream st(k, false, false); !st.eos(); st.next()) {
   102 //    for (FieldStream st(k, false, false); !st.eos(); st.next()) {
   103 //      symbolOop field_name = st.name();
   103 //      Symbol* field_name = st.name();
   104 //      ...
   104 //      ...
   105 //    }
   105 //    }
   106 
   106 
   107 
   107 
   108 class FieldStream : public KlassStream {
   108 class FieldStream : public KlassStream {
   124   AccessFlags access_flags() const {
   124   AccessFlags access_flags() const {
   125     AccessFlags flags;
   125     AccessFlags flags;
   126     flags.set_flags(fields()->ushort_at(index() + instanceKlass::access_flags_offset));
   126     flags.set_flags(fields()->ushort_at(index() + instanceKlass::access_flags_offset));
   127     return flags;
   127     return flags;
   128   }
   128   }
   129   symbolOop name() const {
   129   Symbol* name() const {
   130     int name_index = fields()->ushort_at(index() + instanceKlass::name_index_offset);
   130     int name_index = fields()->ushort_at(index() + instanceKlass::name_index_offset);
   131     return constants()->symbol_at(name_index);
   131     return constants()->symbol_at(name_index);
   132   }
   132   }
   133   symbolOop signature() const {
   133   Symbol* signature() const {
   134     int signature_index = fields()->ushort_at(index() +
   134     int signature_index = fields()->ushort_at(index() +
   135                                        instanceKlass::signature_index_offset);
   135                                        instanceKlass::signature_index_offset);
   136     return constants()->symbol_at(signature_index);
   136     return constants()->symbol_at(signature_index);
   137   }
   137   }
   138   // missing: initval()
   138   // missing: initval()
   195 // fields in reverse order)
   195 // fields in reverse order)
   196 //
   196 //
   197 // Usage:
   197 // Usage:
   198 //
   198 //
   199 //    for (FilteredFieldStream st(k, false, false); !st.eos(); st.next()) {
   199 //    for (FilteredFieldStream st(k, false, false); !st.eos(); st.next()) {
   200 //      symbolOop field_name = st.name();
   200 //      Symbol* field_name = st.name();
   201 //      ...
   201 //      ...
   202 //    }
   202 //    }
   203 
   203 
   204 class FilteredFieldStream : public FieldStream {
   204 class FilteredFieldStream : public FieldStream {
   205  private:
   205  private: