1 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 20 public class CoverageClassLoader extends ClassLoader { 21 22 private final static String [] blacklist = new String [] { 23 }; 24 25 protected Class loadClass(String class_name, boolean resolve) 26 throws ClassNotFoundException { 27 Logger.getInstance().debug("Loading class " + class_name); return super.loadClass(class_name, resolve); 29 } 30 31 34 public CoverageClassLoader(java.lang.ClassLoader deferTo) { 35 super(deferTo, blacklist); 36 Logger.getInstance().debug(this.getClass() + " instanciated"); } 38 39 public CoverageClassLoader() { 40 super(blacklist); 41 Logger.getInstance().debug(this.getClass() + " instanciated"); } 43 44 private boolean onBlackList(JavaClass jclass) { 45 String packageName = jclass.getPackageName(); 46 String [] blackList = new String [] { 47 "java", "sun", "javax", "org.apache.bcel", "de.uka.ipd.coverage", "junit", "org.eclipse", }; 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() + ": "); Logger.getInstance().debug("\tweaving bytecode..."); ByteCodeModifyer.weaveCallbacks(classGen); 75 Logger.getInstance().debug("\tdone."); } 77 return classGen.getJavaClass(); 78 } 79 80 81 82 83 } 84 | Popular Tags |