KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > name > dsouflis > aop > tracing > AddTracing


1 package name.dsouflis.aop.tracing;
2
3 import org.apache.bcel.Repository;
4 import org.apache.bcel.classfile.JavaClass;
5 import org.apache.bcel.util.ClassPath;
6
7 /*
8  * AddTracing.java
9  *
10  * Created on April 2, 2002, 6:53 PM
11  */

12
13
14 /** Utility that instruments a class with the same trace output that
15  * {@link TracingClassLoader} uses.  The target class is actually
16  * modified on disk, which enables one to inspect the instrumentation
17  * with <CODE>javap</CODE> or BCEL's <CODE>listclass</CODE>.
18  * @author dsouflis
19  * @version $Revision: 1.4 $
20  */

21 public class AddTracing extends Object JavaDoc {
22
23     /** Prohibits creation of new AddTracing */
24     private AddTracing() {
25     }
26
27     /** The application entry point.&nbsp; Accepts a single argument,
28      * which is a class name.
29      * @param args the command line arguments
30      */

31     public static void main (String JavaDoc args[]) {
32         if(args.length==0) {
33             return;
34         }
35         String JavaDoc className=args[0];
36         addTracing(className);
37     }
38
39     /** Adds tracing instrumentation to a class, using TracingClassLoader's
40      * internal methods directly.
41      * @param className The class to instrument
42      */

43     public static void addTracing(String JavaDoc className) {
44         final java.util.Vector JavaDoc classNames=new java.util.Vector JavaDoc(1);
45         classNames.add(className);
46         ClassMethodFilter flt=new ClassMethodFilter() {
47             public boolean classHasAdvice(String JavaDoc className) {
48                 return classNames.indexOf(className)!=-1;
49             }
50             public boolean methodHasAdvice(String JavaDoc className, String JavaDoc methodName, String JavaDoc signature) {
51                 return true;
52             }
53         };
54         JavaClass clazz=TracingClassLoader.classWithTracing(flt,className);
55         ClassPath.ClassFile cf= Repository.lookupClassFile(className);
56         try {
57             clazz.dump(cf.getPath());
58         }
59         catch(java.io.IOException JavaDoc e) {
60             e.printStackTrace();
61         }
62     }
63 }
Popular Tags