EMMA Coverage Report (generated Thu Jan 20 11:39:44 EST 2011)
[all classes][com.hammurapi.common]

COVERAGE SUMMARY FOR SOURCE FILE [ClassHierarchyVisitable.java]

nameclass, %method, %block, %line, %
ClassHierarchyVisitable.java100% (1/1)100% (2/2)100% (78/78)100% (19/19)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class ClassHierarchyVisitable100% (1/1)100% (2/2)100% (78/78)100% (19/19)
ClassHierarchyVisitable (Class): void 100% (1/1)100% (6/6)100% (3/3)
accept (Visitor): boolean 100% (1/1)100% (72/72)100% (16/16)

1/*
2@license.text@
3 */
4package com.hammurapi.common;
5 
6import java.util.HashSet;
7import java.util.LinkedList;
8import java.util.Set;
9 
10/**
11 * Visits class hierarchy in the order: class, implemented
12 * interfaces, superclass, superclass implemented interfaces, ...
13 * java.lang.Object is always visited last.
14 * @author Pavel Vlasov
15 * @revision $Revision$
16 */
17public class ClassHierarchyVisitable implements Visitable<Class<?>> {
18        private Class<?> clazz;
19        
20        public ClassHierarchyVisitable(Class<?> clazz) {
21                this.clazz=clazz;
22        }
23        
24        public boolean accept(Visitor<Class<?>> visitor) {
25                LinkedList<Class<?>> queue=new LinkedList<Class<?>>();
26                queue.add(clazz);
27                Set<Class<?>> visited=new HashSet<Class<?>>();
28                visited.add(Object.class);
29                
30                while (!queue.isEmpty()) {
31                        Class<?> currentClazz = queue.removeFirst();
32                        if (visitor.visit(currentClazz)) {
33                                Class<?>[] interfaces = currentClazz.getInterfaces();
34                                for (int i=0; i<interfaces.length; i++) {
35                                        if (visited.add(interfaces[i])) {
36                                                queue.add(interfaces[i]);
37                                        }
38                                }
39                                
40                                Class<?> superclass = currentClazz.getSuperclass();
41                                if (superclass!=null && visited.add(superclass)) {
42                                        queue.add(superclass);
43                                }
44                        } else {
45                                return false;
46                        }
47                }
48                
49                return visitor.visit(Object.class);
50        }
51 
52}

[all classes][com.hammurapi.common]
EMMA 2.0.5312 EclEmma Fix 2 (C) Vladimir Roubtsov