1 package org.sourceforge.jemm.client;
2
3 import java.lang.reflect.Field;
4 import java.util.ArrayList;
5 import java.util.Arrays;
6 import java.util.Iterator;
7 import java.util.List;
8
9
10
11
12
13
14
15
16 public class FieldIterator implements Iterator<Field>,Iterable<Field> {
17 Iterator<Field> fields;
18
19 public FieldIterator(Class<?> clazz) {
20 this(clazz,new AcceptAllFilter());
21 }
22
23
24
25
26
27
28
29
30 public FieldIterator(Class<?> clazz,FieldFilter filter) {
31 ClassHierarchyIterator it = new ClassHierarchyIterator(clazz);
32 List<Field> allFields= new ArrayList<Field>();
33 while(it.hasNext()) {
34 List<Field> classFields = Arrays.asList(it.next().getDeclaredFields());
35 allFields.addAll(filterFields(classFields,filter));
36 }
37
38 fields= allFields.iterator();
39 }
40
41 private List<Field> filterFields(List<Field> filterFields, FieldFilter ff) {
42 List<Field> result = new ArrayList<Field>();
43 for(Field f : filterFields) {
44 if(ff.accepts(f))
45 result.add(f);
46 }
47 return result;
48 }
49
50 @Override
51 public boolean hasNext() {
52 return fields.hasNext();
53 }
54
55 @Override
56 public Field next() {
57 return fields.next();
58 }
59
60 @Override
61 public void remove() {
62 fields.remove();
63 }
64
65 public static class AcceptAllFilter implements FieldFilter {
66 @Override
67 public boolean accepts(Field f) {
68 return true;
69 }
70
71 }
72
73 @Override
74 public Iterator<Field> iterator() {
75 return this;
76 }
77 }