KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > de > uka > ipd > coverage > recording > CoverageClassLoader


1 /*
2  * Created on 25.08.2004
3  *
4  * written by Matthias Kempka
5  */

6 package de.uka.ipd.coverage.recording;
7
8 import junit.framework.Test;
9
10 import org.apache.bcel.classfile.JavaClass;
11 import org.apache.bcel.generic.ClassGen;
12 import org.apache.bcel.util.ClassLoader;
13
14 import de.uka.ipd.coverage.utils.Logger;
15
16 /**
17  * Created on 25.08.2004
18  * @author Matthias Kempka
19  */

20 public class CoverageClassLoader extends ClassLoader JavaDoc {
21
22     private final static String JavaDoc[] blacklist = new String JavaDoc[] {
23     };
24     
25     protected Class JavaDoc loadClass(String JavaDoc class_name, boolean resolve)
26             throws ClassNotFoundException JavaDoc {
27         Logger.getInstance().debug("Loading class " + class_name); //$NON-NLS-1$
28
return super.loadClass(class_name, resolve);
29     }
30     
31     /**
32      * @param deferTo
33      */

34     public CoverageClassLoader(java.lang.ClassLoader JavaDoc deferTo) {
35         super(deferTo, blacklist);
36         Logger.getInstance().debug(this.getClass() + " instanciated"); //$NON-NLS-1$
37
}
38     
39     public CoverageClassLoader() {
40         super(blacklist);
41         Logger.getInstance().debug(this.getClass() + " instanciated"); //$NON-NLS-1$
42
}
43     
44     private boolean onBlackList(JavaClass jclass) {
45         String JavaDoc packageName = jclass.getPackageName();
46         String JavaDoc[] blackList = new String JavaDoc[] {
47                 "java", //$NON-NLS-1$
48
"sun", //$NON-NLS-1$
49
"javax", //$NON-NLS-1$
50
"org.apache.bcel", //$NON-NLS-1$
51
"de.uka.ipd.coverage", //$NON-NLS-1$
52
"junit", //$NON-NLS-1$
53
"org.eclipse", //$NON-NLS-1$
54
};
55         for (int i = 0; i < blackList.length; i++) {
56             if (packageName.startsWith(blackList[i])) {
57                 return true;
58             }
59         }
60         JavaClass[] superclasses = jclass.getAllInterfaces();
61         for (int i = 0; i < superclasses.length; i++) {
62             if (Test.class.getName().equals(superclasses[i].getClassName())) {
63                 return true;
64             }
65         }
66         return false;
67     }
68
69     protected JavaClass modifyClass(JavaClass jclass) {
70         ClassGen classGen = new ClassGen(jclass);
71         if (!(onBlackList(jclass))) {
72             Logger.getInstance().debug("Modifying class " + jclass.getClassName() + ": "); //$NON-NLS-1$ //$NON-NLS-2$
73
Logger.getInstance().debug("\tweaving bytecode..."); //$NON-NLS-1$
74
ByteCodeModifyer.weaveCallbacks(classGen);
75             Logger.getInstance().debug("\tdone."); //$NON-NLS-1$
76
}
77         return classGen.getJavaClass();
78     }
79
80
81
82
83 }
84
Popular Tags