public static void cleanJavassistClassPath() { for (ClassClassPath ccp : ccps) { ClassPool.getDefault().removeClassPath(ccp); } ccps.clear(); } }
/** * Constructs a web server. * * @param port port number */ public AppletServer(int port) throws IOException, NotFoundException, CannotCompileException { this(ClassPool.getDefault(), new StubGenerator(), port); }
private ClassPool getClassPool(Type rootComponent) { ClassPool pool = rootComponent.clazz.getClassPool(); return pool != null ? pool : ClassPool.getDefault(); }
public static void addJavassistClassPath(Class<?> clazz) { ClassClassPath ccp = new ClassClassPath(clazz); ccps.add(ccp); ClassPool.getDefault().insertClassPath(ccp); }
/** * Singleton. */ private ScopedClassPoolRepositoryImpl() { classpool = ClassPool.getDefault(); // FIXME This doesn't look correct ClassLoader cl = Thread.currentThread().getContextClassLoader(); classpool.insertClassPath(new LoaderClassPath(cl)); }
private static Type lookupType(String name) { try { return new Type(ClassPool.getDefault().get(name)); } catch (NotFoundException e) { throw new RuntimeException(e); } }
/** * Main method. * * @param args <code>args[0]</code> is the class file name. */ public static void main(String[] args) throws Exception { if (args.length != 1) { System.err.println("Usage: java javassist.tools.framedump <fully-qualified class name>"); return; } ClassPool pool = ClassPool.getDefault(); CtClass clazz = pool.get(args[0]); System.out.println("Frame Dump of " + clazz.getName() + ":"); FramePrinter.print(clazz, System.out); } }
/** * Constructs a new class loader. */ public Loader() throws CannotCompileException, NotFoundException { super(); delegateLoadingOf("javassist.tools.reflect.Loader"); reflection = new Reflection(); ClassPool pool = ClassPool.getDefault(); addTranslator(pool, reflection); }
@Override public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException { if (!transformedClassSet.contains(className.replace("/", "."))) { return null; } System.out.println("###restoring class " + className.replace("/", ".")); try { JavassistUtils.addJavassistClassPath(classBeingRedefined); CtClass cc = ClassPool.getDefault().get(className.replace("/", ".")); cc.defrost(); cc.detach(); } catch (NotFoundException e) { e.printStackTrace(); } finally { JavassistUtils.cleanJavassistClassPath(); } return classfileBuffer; }
public CtClass getCtClass() { CtClass clazz = component.getCtClass(); if (clazz == null) return null; ClassPool pool = clazz.getClassPool(); if (pool == null) pool = ClassPool.getDefault(); String name = arrayName(clazz.getName(), dims); try { return pool.get(name); } catch (NotFoundException e) { throw new RuntimeException(e); } }
ClassPool pool = ClassPool.getDefault(); implementor.start(pool);
@Override public byte[] transform(TransformDescriptor injectDescriptor) { TraceExceptionTransformDescriptor descriptor = (TraceExceptionTransformDescriptor) injectDescriptor; try { // 通过包名获取类文件 CtClass cc = ClassPool.getDefault().get(descriptor.getNeedInjectClassName()); // 获得无参构造方法 CtConstructor[] constructors = cc.getConstructors(); for (CtConstructor constructor : constructors) { constructor.insertAfter(MacroUtils.safeInsertTemplate("printStackTrace(com.github.jobop.anylog.tools.Trace.out);")); } return cc.toBytecode(); } catch (NotFoundException e) { ExceptionUtils.addThrowable(e); e.printStackTrace(); } catch (CannotCompileException e) { ExceptionUtils.addThrowable(e); e.printStackTrace(); } catch (IOException e) { ExceptionUtils.addThrowable(e); e.printStackTrace(); // 忽略异常处理 } return null; }
@Override public byte[] transform(TransformDescriptor injectDescriptor) { LineLogTransformDescriptor descriptor = (LineLogTransformDescriptor) injectDescriptor; try { // 通过包名获取类文件 CtClass cc = ClassPool.getDefault().get(descriptor.getNeedInjectClassName()); cc.defrost(); // 获得指定方法名的方法 CtMethod m = cc.getDeclaredMethod(descriptor.getMethodName()); m.insertAt(Integer.valueOf(descriptor.getLineNum()), MacroUtils.safeInsertTemplate(descriptor.getLineCode() + ";")); return cc.toBytecode(); } catch (NotFoundException e) { ExceptionUtils.addThrowable(e); e.printStackTrace(); } catch (CannotCompileException e) { ExceptionUtils.addThrowable(e); e.printStackTrace(); } catch (IOException e) { ExceptionUtils.addThrowable(e); e.printStackTrace(); } return null; } }
@Override public byte[] transform(TransformDescriptor injectDescriptor) { ElapsedTimeTransformDescriptor descriptor = (ElapsedTimeTransformDescriptor) injectDescriptor; try { // 通过包名获取类文件 CtClass cc = ClassPool.getDefault().get(descriptor.getNeedInjectClassName()); cc.defrost(); // 获得指定方法名的方法 CtMethod m = cc.getDeclaredMethod(descriptor.getMethodName()); String logName=descriptor.getNeedInjectClassName()+"."+descriptor.getMethodName(); m.insertBefore(MacroUtils.safeInsertTemplate("com.github.jobop.anylog.common.profiler.Profiler.start(\""+logName+"\","+descriptor.getElaspeTime()+");")); m.insertAfter(MacroUtils.safeInsertTemplate("com.github.jobop.anylog.common.profiler.Profiler.stop(\""+logName+"\");"), true); return cc.toBytecode(); } catch (NotFoundException e) { ExceptionUtils.addThrowable(e); e.printStackTrace(); } catch (CannotCompileException e) { ExceptionUtils.addThrowable(e); e.printStackTrace(); } catch (IOException e) { ExceptionUtils.addThrowable(e); e.printStackTrace(); } return null; } }