jist.runtime
Class ClassTraversal

java.lang.Object
  extended by jist.runtime.ClassTraversal

public class ClassTraversal
extends java.lang.Object

Facilitates traversal and and modification of a BCEL JavaClass structure. The traversal does not visit all elements of the class, only the ones that are important for JiST. Specifically, it visits (with upcalls) the class, fields, method and each instruction.

Since:
JIST1.0
Version:
$Id: ClassTraversal.java,v 1.12 2004/10/22 04:37:21 barr Exp $
Author:
Rimon Barr <barr+jist@cs.cornell.edu>

Nested Class Summary
static class ClassTraversal.Empty
          Provides a default (empty) implementation of the Visitor.
static interface ClassTraversal.Visitor
          ClassTraversal upcall interface.
 
Field Summary
private  ClassTraversal.Visitor jcti
          Traversal upcall instance.
 
Constructor Summary
ClassTraversal(ClassTraversal.Visitor jcti)
          Create a new traversal object and initialize it with given traversal upcall.
 
Method Summary
 org.apache.bcel.classfile.JavaClass processClass(org.apache.bcel.classfile.JavaClass jc)
          Accept a class for traversal and processing, and return the resulting (possibly modified) class.
protected  org.apache.bcel.generic.ClassGen processClassGen(org.apache.bcel.generic.ClassGen cg)
          Traverse and process a class.
protected  org.apache.bcel.generic.FieldGen processFieldGen(org.apache.bcel.generic.ClassGen cg, org.apache.bcel.generic.FieldGen fg)
          Traverse and process a field.
protected  void processInstruction(org.apache.bcel.generic.ClassGen cg, org.apache.bcel.generic.MethodGen mg, org.apache.bcel.generic.InstructionHandle[] ihs, int i)
          Traverse and process an instruction.
protected  org.apache.bcel.generic.MethodGen processMethodGen(org.apache.bcel.generic.ClassGen cg, org.apache.bcel.generic.MethodGen mg)
          Traverse and process a method.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

jcti

private ClassTraversal.Visitor jcti
Traversal upcall instance.

Constructor Detail

ClassTraversal

public ClassTraversal(ClassTraversal.Visitor jcti)
Create a new traversal object and initialize it with given traversal upcall.

Parameters:
jcti - object to receive upcalls during traversal
Method Detail

processClass

public org.apache.bcel.classfile.JavaClass processClass(org.apache.bcel.classfile.JavaClass jc)
                                                 throws java.lang.ClassNotFoundException
Accept a class for traversal and processing, and return the resulting (possibly modified) class.

Parameters:
jc - BCEL JavaClass structure to traverse and process
Returns:
resulting BCEL JavaClass structure (possibly modified)
Throws:
java.lang.ClassNotFoundException

processClassGen

protected org.apache.bcel.generic.ClassGen processClassGen(org.apache.bcel.generic.ClassGen cg)
                                                    throws java.lang.ClassNotFoundException
Traverse and process a class. Upcalls are made before and after traversal for class-level processing. Traversal involves recursive descent to each method and field of the class.

Parameters:
cg - BCEL class generator object
Returns:
processed BCEL class generator object
Throws:
java.lang.ClassNotFoundException

processFieldGen

protected org.apache.bcel.generic.FieldGen processFieldGen(org.apache.bcel.generic.ClassGen cg,
                                                           org.apache.bcel.generic.FieldGen fg)
                                                    throws java.lang.ClassNotFoundException
Traverse and process a field. A single upcall is made for field-level processing.

Parameters:
cg - BCEL class generator object
fg - BCEL field generator object
Returns:
processed BCEL field generator object
Throws:
java.lang.ClassNotFoundException

processMethodGen

protected org.apache.bcel.generic.MethodGen processMethodGen(org.apache.bcel.generic.ClassGen cg,
                                                             org.apache.bcel.generic.MethodGen mg)
                                                      throws java.lang.ClassNotFoundException
Traverse and process a method. Upcalls are made both before and after traversal for method-level processing. Traversal involves recursive descent to each individual instruction. upcalls for each individual instruction, for instruction-level processing.

Parameters:
cg - BCEL class generator object
mg - BCEL method generator object
Returns:
processed BCEL method generator object
Throws:
java.lang.ClassNotFoundException

processInstruction

protected void processInstruction(org.apache.bcel.generic.ClassGen cg,
                                  org.apache.bcel.generic.MethodGen mg,
                                  org.apache.bcel.generic.InstructionHandle[] ihs,
                                  int i)
                           throws java.lang.ClassNotFoundException
Traverse and process an instruction. A single upcall is made for instruction-level processing.

Parameters:
cg - BCEL class generator object
mg - BCEL field generator object
ihs - array of BCEL instruction handles
i - instruction handle index
Throws:
java.lang.ClassNotFoundException