ClassHierarchyVisitable.java

biz/hammurapi/util/ClassHierarchyVisitable.java

Violations

Inspector Message Severity Location
Java Inspector 048 Copyrights information should be present in each file. 1
Java Inspector 049 Use a Collection instead of arrays Object[] 2 52:38
Java Inspector 089 Undocumented constructor 2 39:9
Java Inspector 089 Undocumented method 2 43:9
Java Inspector 051 It is good practice to call in any case super() in a constructor. 3 39:9

Source code

1/*
2 * hgcommons 9
3 * Hammurapi Group Common Library
4 * Copyright (C) 2003 Hammurapi Group
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 *
20 * URL: http://www.hammurapi.biz/hammurapi-biz/ef/xmenu/hammurapi-group/products/products/hgcommons/index.html
21 * e-Mail: support@hammurapi.biz
22 */
23package biz.hammurapi.util;
24
25import java.util.HashSet;
26import java.util.LinkedList;
27import java.util.Set;
28
29/**
30 * Visits class hierarchy in the order: class, implemented
31 * interfaces, superclass, superclass implemented interfaces, ...
32 * java.lang.Object is always visited last.
33 * @author Pavel Vlasov
34 * @revision $Revision$
35 */
36public class ClassHierarchyVisitable implements Visitable {
37 private Class clazz;
38
39 public ClassHierarchyVisitable(Class clazz) {
40 this.clazz=clazz;
41 }
42
43 public boolean accept(Visitor visitor) {
44 LinkedList queue=new LinkedList();
45 queue.add(clazz);
46 Set visited=new HashSet();
47 visited.add(Object.class);
48
49 while (!queue.isEmpty()) {
50 Class currentClazz=(Class) queue.removeFirst();
51 if (visitor.visit(currentClazz)) {
52 Class[] interfaces = currentClazz.getInterfaces();
53 for (int i=0; i<interfaces.length; i++) {
54 if (visited.add(interfaces[i])) {
55 queue.add(interfaces[i]);
56 }
57 }
58
59 Class superclass = currentClazz.getSuperclass();
60 if (superclass!=null && visited.add(superclass)) {
61 queue.add(superclass);
62 }
63 } else {
64 return false;
65 }
66 }
67
68 return visitor.visit(Object.class);
69 }
70
71}
72