Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

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 }