/** * Makes the given visitor visit the Java class of this {@link ClassReader} * . This class is the one specified in the constructor (see * {@link #ClassReader(byte[]) ClassReader}). * * @param classVisitor * the visitor that must visit this class. * @param flags * option flags that can be used to modify the default behavior * of this class. See {@link #SKIP_DEBUG}, {@link #EXPAND_FRAMES} * , {@link #SKIP_FRAMES}, {@link #SKIP_CODE}. */ public void accept(final ClassVisitor classVisitor, final int flags) { accept(classVisitor, new Attribute[0], flags); }
protected void transformClass(ClassReader cr,ClassWriter cw, ClassNode cn){ ClassVisitor cv = new ModelTransformVisitor(cn, cw, transformers); cr.accept(cv,0); }
public static ClassNode getClassNode(ClassReader cr){ ClassNode cn = new ClassNode(); cr.accept(cn, 0); return cn; }
cr = new ClassReader(args[i]); cr.accept(new TraceClassVisitor(new PrintWriter(System.out)), flags);
cr = new ClassReader(args[i]); cr.accept(new TraceClassVisitor(null, new ASMifier1(), new PrintWriter( System.out)), flags);
cr = new ClassReader(args[i]); cr.accept(new TraceClassVisitor(null, new ASMifier(), new PrintWriter( System.out)), flags);
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(); }
/** * Inspects the target class. Exceptions will be logged and a maker map returned to indicate the lack of debug * information. */ private Map<Member, String[]> inspectClass(Class<?> clazz) { InputStream is = clazz.getResourceAsStream(Classes.getClassFileName(clazz)); if (is == null) { // We couldn't load the class file, which is not fatal as it // simply means this method of discovering parameter names won't work. return NO_DEBUG_INFO_MAP; } try { ClassReader classReader = new ClassReader(is); Map<Member, String[]> map = new ConcurrentHashMap<Member, String[]>(); classReader.accept(new ParameterNameDiscoveringVisitor(clazz, map), 0); return map; } catch (IOException ex) { if (log.isDebugEnabled()) { log.debug("Exception thrown while reading '.class' file for class [" + clazz + "] - unable to determine constructors/methods parameter names", ex); } } finally { try { is.close(); } catch (IOException ex) { // ignore } } return NO_DEBUG_INFO_MAP; }
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; }
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; }
public static void printASMifiedCode(byte[] data,PrintWriter out) { ClassReader cr = new ClassReader(data); cr.accept(new TraceClassVisitor(null, new ASMifier(),out),ClassReader.EXPAND_FRAMES); }
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)); } }); }
@Override public ClassDependency resolveDependentClassNames(Resource resource, byte[] bytes) { ClassReader cr = new ClassReader(bytes); DependencyVisitor visitor = new DependencyVisitor(); cr.accept(visitor,0); String className = Type.getObjectType(cr.getClassName()).getClassName(); String superName = className.equals("java.lang.Object") ? null : Type.getObjectType(cr.getSuperName()).getClassName(); return new SimpleClassDependency(className, superName, visitor.innerClasses, visitor.allClasses); }
computeFrames = true; invalidFrames = false; new ClassReader(out.data).accept(this, ClassReader.SKIP_FRAMES); return toByteArray();