protected byte[] instrumentClass(ClassNode cn, ClassReader cr, boolean methodBodyOnly) { MonitoredClassVisitor visitor = new MonitoredClassVisitor(cn ,new ClassWriter(cr, ClassWriter.COMPUTE_FRAMES), methodBodyOnly); cr.accept(visitor, ClassReader.EXPAND_FRAMES); byte[] data = visitor.getClassData(); return data; }
protected byte[] instrumentClass(ClassNode cn, ClassReader cr, boolean methodBodyOnly) { TxClassVisitor visitor = new TxClassVisitor(cn, new ClassWriter(cr, ClassWriter.COMPUTE_FRAMES), methodBodyOnly); cr.accept(visitor, ClassReader.EXPAND_FRAMES); return visitor.getClassData(); }
protected byte[] instrumentClass(ClassNode cn, ClassReader cr, List<AopMethod> methods) { AopClassVisitor visitor = new AopClassVisitor(cn ,new ClassWriter(cr, ClassWriter.COMPUTE_FRAMES), methods); cr.accept(visitor, ClassReader.EXPAND_FRAMES); byte[] data = visitor.getClassData(); return data; }
@Override protected void processClass(AppInstrumentContext context, AppInstrumentClass ic, ClassInfo ci, boolean methodBodyOnly) { if(ASM.isAnnotationPresent(ci.cn, NonEntity.class)){ return; } boolean isModel = false; String superName = ci.cr.getSuperName(); if(MODEL_CLASS_NAME.equals(superName)){ isModel = true; }else if(!superName.equals("java/lang/Object")){ for(;;){ superName = readSuperName(ci.rs, superName); if(null == superName || superName.equals("java/lang/Object")){ break; } if(superName.equals(MODEL_CLASS_NAME)){ isModel = true; break; } } } if(isModel){ ClassWriter cw = new ClassWriter(ci.cr,ClassWriter.COMPUTE_FRAMES); instrument(context, ic, ci.cr, cw); } }
public static void pintASMifiedCode(Class cls) { Resource r = Resources.getResource(cls); Try.throwUnchecked(() -> { try(InputStream is = r.getInputStream()) { ClassReader cr = new ClassReader(is); ClassWriter cw = new ClassWriter(cr,ClassWriter.COMPUTE_FRAMES); cr.accept(cw, 0); ASM.printASMifiedCode(cw.toByteArray(), new PrintWriter(System.out)); } }); }
String typeClassNameInternal = typeClassName.replace('.', '/'); ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);