Source code: com/puppycrawl/tools/checkstyle/bcel/VisitorSet.java
1 //Tested with BCEL-5.1
2 //http://jakarta.apache.org/builds/jakarta-bcel/release/v5.1/
3
4 package com.puppycrawl.tools.checkstyle.bcel;
5
6 import java.util.HashSet;
7 import java.util.Iterator;
8 import java.util.Set;
9
10 import org.apache.bcel.classfile.Code;
11 import org.apache.bcel.classfile.ConstantPool;
12 import org.apache.bcel.classfile.EmptyVisitor;
13 import org.apache.bcel.classfile.Field;
14 import org.apache.bcel.classfile.JavaClass;
15 import org.apache.bcel.classfile.LocalVariable;
16 import org.apache.bcel.classfile.Method;
17 import org.apache.bcel.classfile.Visitor;
18 import org.apache.bcel.generic.InstructionHandle;
19 import org.apache.bcel.generic.InstructionList;
20
21 /**
22 * Manages a set of visitors that are accepted by nodes visited by
23 * a VisitorSet. Any visit to this object is passed on to its managed
24 * visitors.
25 * @author Rick Giles
26 */
27 // TODO: review visitXXX
28 public class VisitorSet
29 extends EmptyVisitor
30 {
31 /** the managed visitors */
32 private Set mVisitors = new HashSet();
33
34 /** Creates a <code>VisitorSet</code> for a set of visitors.
35 * @param aVisitors the set of managed visitors.
36 */
37 public VisitorSet(Set aVisitors)
38 {
39 mVisitors = aVisitors;
40 }
41
42 /**
43 * @see org.apache.bcel.classfile.Visitor#visitCode
44 */
45 public void visitCode(Code aCode)
46 {
47 // perform a deep visit
48 final byte[] code = aCode.getCode();
49 final InstructionList list = new InstructionList(code);
50 final Iterator it = list.iterator();
51 for (Iterator iter = list.iterator(); iter.hasNext();) {
52 InstructionHandle instruction = (InstructionHandle) iter.next();
53 visitInstructionHandle(instruction);
54 }
55 }
56
57 /**
58 * Deep visit of an InstructionHandle
59 * @param aInstruction the InstructionHandle
60 */
61 private void visitInstructionHandle(InstructionHandle aInstruction)
62 {
63 for (Iterator iter = mVisitors.iterator(); iter.hasNext();) {
64 final IDeepVisitor visitor = (IDeepVisitor) iter.next();
65 org.apache.bcel.generic.Visitor v =
66 visitor.getGenericVisitor();
67 aInstruction.accept(v);
68 }
69 }
70
71 /**
72 * @see org.apache.bcel.classfile.Visitor
73 */
74 public void visitConstantPool(ConstantPool aConstantPool)
75 {
76 for (Iterator iter = mVisitors.iterator(); iter.hasNext();) {
77 IDeepVisitor visitor = (IDeepVisitor) iter.next();
78 Visitor v = visitor.getClassFileVisitor();
79 aConstantPool.accept(v);
80 }
81 }
82
83 /**
84 * @see org.apache.bcel.classfile.Visitor
85 */
86 public void visitField(Field aField)
87 {
88 for (Iterator iter = mVisitors.iterator(); iter.hasNext();) {
89 IDeepVisitor visitor = (IDeepVisitor) iter.next();
90 Visitor v = visitor.getClassFileVisitor();
91 aField.accept(v);
92 }
93 }
94
95 /**
96 * @see org.apache.bcel.classfile.Visitor
97 */
98 public void visitJavaClass(JavaClass aJavaClass)
99 {
100 for (Iterator iter = mVisitors.iterator(); iter.hasNext();) {
101 IDeepVisitor visitor = (IDeepVisitor) iter.next();
102 Visitor v = visitor.getClassFileVisitor();
103 aJavaClass.accept(v);
104 }
105 }
106
107 /**
108 * @see org.apache.bcel.classfile.Visitor
109 */
110 public void visitLocalVariable(LocalVariable aLocalVariable)
111 {
112 for (Iterator iter = mVisitors.iterator(); iter.hasNext();) {
113 IDeepVisitor visitor = (IDeepVisitor) iter.next();
114 Visitor v = visitor.getClassFileVisitor();
115 aLocalVariable.accept(v);
116 }
117 }
118
119 /**
120 * @see org.apache.bcel.classfile.Visitor
121 */
122 public void visitMethod(Method aMethod)
123 {
124 for (Iterator iter = mVisitors.iterator(); iter.hasNext();) {
125 IDeepVisitor visitor = (IDeepVisitor) iter.next();
126 Visitor v = visitor.getClassFileVisitor();
127 aMethod.accept(v);
128 }
129 }
130 }