package net.sf.fjep.autojar; import org.apache.bcel.classfile.ConstantMethodref; import org.apache.bcel.classfile.ConstantNameAndType; import org.apache.bcel.classfile.ConstantPool; import org.apache.bcel.classfile.ConstantString; import org.apache.bcel.classfile.JavaClass; public class ClassVisitorSearchCFN extends ClassVisitor { private String lastConst = null; ClassVisitorSearchCFN(JavaClass javaClass) { super(javaClass); } public void visitConstantMethodref(ConstantMethodref ref) { ConstantPool pool = javaClass.getConstantPool(); String cstr = ref.getClass(pool); if (cstr.equals("java.lang.Class")) { int iname = ref.getNameAndTypeIndex(); String name = ((ConstantNameAndType)pool.getConstant(iname)).getName(pool); if (name.equals("forName")) { System.out.println("found Class.forName('" + javaClass.getClassName() + "')"); ConstantNameAndType cnat = (ConstantNameAndType)pool.getConstant(iname); String cfnStr = cnat.getName(pool); if (lastConst != null) { refClasses.add(lastConst.replace('.', '/')); lastConst = null; } } } } public void visitConstantString(ConstantString constStr) { ConstantPool pool = javaClass.getConstantPool(); String stringText = constStr.getBytes(pool); lastConst = stringText; } }