179 static bool is_filtered_field(Klass* klass, int field_offset) { 180 for (int i=0; i < _filtered_fields->length(); i++) { 181 if (klass == _filtered_fields->at(i)->klass() && 182 field_offset == _filtered_fields->at(i)->field_offset()) { 183 return true; 184 } 185 } 186 return false; 187 } 188 static int filtered_fields_count(Klass* klass, bool local_only) { 189 int nflds = 0; 190 for (int i=0; i < _filtered_fields->length(); i++) { 191 if (local_only && klass == _filtered_fields->at(i)->klass()) { 192 nflds++; 193 } else if (klass->is_subtype_of(_filtered_fields->at(i)->klass())) { 194 nflds++; 195 } 196 } 197 return nflds; 198 } 199 // Enhance Class Redefinition Support 200 static void classes_do(KlassClosure* f) { 201 for (int i = 0; i < _filtered_fields->length(); i++) { 202 f->do_klass(_filtered_fields->at(i)->klass()); 203 } 204 } 205 }; 206 207 208 // A FilteredFieldStream streams over all fields in a class, superclasses and 209 // (super)interfaces. Streaming is done in reverse order (subclasses first, 210 // fields in reverse order) 211 // 212 // Usage: 213 // 214 // for (FilteredFieldStream st(k, false, false); !st.eos(); st.next()) { 215 // Symbol* field_name = st.name(); 216 // ... 217 // } 218 219 class FilteredFieldStream : public FieldStream { 220 private: 221 int _filtered_fields_count; 222 bool has_filtered_field() { return (_filtered_fields_count > 0); } 223 224 public: | 179 static bool is_filtered_field(Klass* klass, int field_offset) { 180 for (int i=0; i < _filtered_fields->length(); i++) { 181 if (klass == _filtered_fields->at(i)->klass() && 182 field_offset == _filtered_fields->at(i)->field_offset()) { 183 return true; 184 } 185 } 186 return false; 187 } 188 static int filtered_fields_count(Klass* klass, bool local_only) { 189 int nflds = 0; 190 for (int i=0; i < _filtered_fields->length(); i++) { 191 if (local_only && klass == _filtered_fields->at(i)->klass()) { 192 nflds++; 193 } else if (klass->is_subtype_of(_filtered_fields->at(i)->klass())) { 194 nflds++; 195 } 196 } 197 return nflds; 198 } 199 }; 200 201 202 // A FilteredFieldStream streams over all fields in a class, superclasses and 203 // (super)interfaces. Streaming is done in reverse order (subclasses first, 204 // fields in reverse order) 205 // 206 // Usage: 207 // 208 // for (FilteredFieldStream st(k, false, false); !st.eos(); st.next()) { 209 // Symbol* field_name = st.name(); 210 // ... 211 // } 212 213 class FilteredFieldStream : public FieldStream { 214 private: 215 int _filtered_fields_count; 216 bool has_filtered_field() { return (_filtered_fields_count > 0); } 217 218 public: |