if (args[i].endsWith(".class") || args[i].indexOf('\\') > -1 || args[i].indexOf('/') > -1) { cr = new ClassReader(new FileInputStream(args[i])); } else { cr = new ClassReader(args[i]);
if (args[i].endsWith(".class") || args[i].indexOf('\\') > -1 || args[i].indexOf('/') > -1) { cr = new ClassReader(new FileInputStream(args[i])); } else { cr = new ClassReader(args[i]);
if (args[i].endsWith(".class") || args[i].indexOf('\\') > -1 || args[i].indexOf('/') > -1) { cr = new ClassReader(new FileInputStream(args[i])); } else { cr = new ClassReader(args[i]);
/** * 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; }
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)); } }); }
cr = new ClassReader(is); }catch (Exception e) {
@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); }
/** * Reads the internal class of super class. */ protected static String readSuperName(Resource base, String internalClassName){ String classUrl = "classpath:" + internalClassName + Classes.CLASS_FILE_SUFFIX; Resource resource = Resources.getResource(classUrl); if(null != resource && resource.exists()){ InputStream is = null; try{ is = resource.getInputStream(); return new ClassReader(is).getSuperName(); }catch(IOException e) { throw Exceptions.wrap(e); }finally{ IO.close(is); } } return null; }
try (InputStream in = ci.is.getInputStream()) { byte[] bytes = instrumentClass(cn, new ClassReader(in), methods);
@Override protected void processClass(AppInstrumentContext context, AppInstrumentClass ic, ClassInfo ci, boolean methodBodyOnly) { ClassNode cn = ci.cn; if(null != cn.methods) { boolean hasTransactionalMethods = false; for(MethodNode mn : cn.methods) { if(ASM.isAnnotationPresent(mn, Transactional.class)) { hasTransactionalMethods = true; break; } } if(hasTransactionalMethods) { log.debug("Instrument Transactional class : {}", ic.getClassName()); Try.throwUnchecked(() -> { try(InputStream in = ci.is.getInputStream()) { context.updateInstrumented(ic, this, instrumentClass(ci.cn, new ClassReader(in), true), true); } }); } } }
Try.throwUnchecked(() -> { try(InputStream in = ci.is.getInputStream()) { byte[] bytes = instrumentClass(cn, new ClassReader(in), true);
ClassReader cr = new ClassReader(bytes); if(null != ic) { is = new ByteArrayInputStreamSource(ic.getClassData()); cr = new ClassReader(ic.getClassData()); }else{ ic = context.newInstrumentedClass(cr.getClassName());
computeFrames = true; invalidFrames = false; new ClassReader(out.data).accept(this, ClassReader.SKIP_FRAMES); return toByteArray();