KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tc > object > walker > AllFields


1 /*
2  * All content copyright (c) 2003-2007 Terracotta, Inc., except as may otherwise be noted in a separate copyright
3  * notice. All rights reserved.
4  */

5 package com.tc.object.walker;
6
7 import java.lang.reflect.Field JavaDoc;
8 import java.lang.reflect.Modifier JavaDoc;
9 import java.util.Collections JavaDoc;
10 import java.util.HashMap JavaDoc;
11 import java.util.Iterator JavaDoc;
12 import java.util.Map JavaDoc;
13 import java.util.Set JavaDoc;
14 import java.util.TreeSet JavaDoc;
15
16 class AllFields {
17   private static final Class JavaDoc OBJECT = Object JavaDoc.class;
18
19   private final Set JavaDoc fields = new TreeSet JavaDoc();
20
21   Iterator JavaDoc getFields() {
22     return Collections.unmodifiableSet(fields).iterator();
23   }
24
25   static AllFields getAllFields(Object JavaDoc o) {
26     // XXX: cache?
27

28     AllFields allFields = new AllFields();
29
30     Map JavaDoc fieldNames = new HashMap JavaDoc();
31
32     Class JavaDoc c = o.getClass();
33     while (c != OBJECT) {
34       Field JavaDoc[] fields = c.getDeclaredFields();
35       for (int i = 0; i < fields.length; i++) {
36         Field JavaDoc f = fields[i];
37
38         if (Modifier.isStatic(f.getModifiers())) {
39           continue;
40         }
41
42         FieldData key = new FieldData(f);
43
44         FieldData prev = (FieldData) fieldNames.put(f.getName(), key);
45         if (prev != null) {
46           key.setShadowed(true);
47           prev.setShadowed(true);
48         }
49
50         allFields.fields.add(key);
51       }
52
53       c = c.getSuperclass();
54     }
55
56     return allFields;
57
58   }
59
60 }
Popular Tags