List of usage examples for org.objectweb.asm.util TraceClassVisitor TraceClassVisitor
public TraceClassVisitor(final ClassVisitor classVisitor, final PrintWriter printWriter)
From source file:co.paralleluniverse.fibers.instrument.QuasarInstrumentor.java
License:Open Source License
private byte[] instrumentClass(String className, ClassReader r) { log(LogLevel.INFO, "TRANSFORM: %s %s", className, (db.getClassEntry(className) != null && db.getClassEntry(className).requiresInstrumentation()) ? "request" : ""); final ClassWriter cw = new DBClassWriter(db, r); ClassVisitor cv = (check && EXAMINED_CLASS == null) ? new CheckClassAdapter(cw) : cw; if (EXAMINED_CLASS != null && className.startsWith(EXAMINED_CLASS)) cv = new TraceClassVisitor(cv, new PrintWriter(System.out)); final InstrumentClass ic = new InstrumentClass(cv, db, false); byte[] transformed = null; try {/*from w w w .j av a 2s . c o m*/ r.accept(ic, ClassReader.SKIP_FRAMES); transformed = cw.toByteArray(); } catch (Exception e) { if (ic.hasSuspendableMethods()) { error("Unable to instrument class " + className, e); throw e; } else { if (!MethodDatabase.isProblematicClass(className)) log(LogLevel.DEBUG, "Unable to instrument class " + className); return null; } } if (EXAMINED_CLASS != null) { if (className.startsWith(EXAMINED_CLASS)) { try (OutputStream os = new FileOutputStream(className.replace('/', '.') + ".class")) { os.write(transformed); } catch (IOException e) { throw new RuntimeException(e); } } if (check) { ClassReader r2 = new ClassReader(transformed); ClassVisitor cv2 = new CheckClassAdapter(new TraceClassVisitor(null), true); r2.accept(cv2, 0); } } return transformed; }
From source file:com.alibaba.hotswap.processor.HotswapProcessorFactory.java
License:Open Source License
@SuppressWarnings("unchecked") public static byte[] process(String name, byte[] bytes) throws ClassNotFoundException { ClassMeta classMeta = HotswapRuntime.getClassMeta(name); byte[] classBytes = bytes; for (int i = 0; i < hotswap_processor_holder.size(); i++) { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); ClassVisitor cv = cw;/*ww w .j av a 2 s . co m*/ if (HotswapConfiguration.TRACE != null && name.equals(HotswapConfiguration.TRACE) && (i == hotswap_processor_holder.size() - 1 || i == v_class_processor_index)) { cv = new TraceClassVisitor(cw, new PrintWriter(System.out)); } try { for (Class<?> clazz : hotswap_processor_holder.get(i)) { Constructor<ClassVisitor> c = (Constructor<ClassVisitor>) clazz .getConstructor(ClassVisitor.class); cv = c.newInstance(cv); } } catch (Exception e) { e.printStackTrace(); } ClassReader cr = new ClassReader(classBytes); cr.accept(cv, ClassReader.SKIP_FRAMES); if (i == v_class_processor_index) { // v class byte[] vclassBytes = cw.toByteArray(); classMeta.loadedBytes = vclassBytes; classMeta.vClassName = name.replace("/", ".") + HotswapConstants.V_CLASS_PATTERN + classMeta.loadedIndex; synchronized (classMeta) { classMeta.vClass = classMeta.loader.loadClass(classMeta.vClassName); } } else { classBytes = cw.toByteArray(); } } return classBytes; }
From source file:com.axway.jmb.ModuleBuilder.java
License:Open Source License
public ModuleBuilder(int params, String moduleFullyQualifiedName, ClassWriter cw) { super(ASM5, new TraceClassVisitor(cw, new PrintWriter(System.out)), false); classFullyQualifiedName = Utils.getJavaFullyQualifiedInternalClassName(moduleFullyQualifiedName); buildModule();//from w ww.java 2 s . c om buildModuleConstructor(); }
From source file:com.cinnober.msgcodec.blink.BaseByteCodeGenerator.java
License:Open Source License
public byte[] generateClass(Schema schema, int suffix) { if (!schema.isBound()) { throw new IllegalArgumentException("Schema is not bound"); }/*www .ja v a2 s . c o m*/ ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES); ClassVisitor cv = classWriter; StringWriter traceString = null; if (log.isLoggable(Level.FINER)) { traceString = new StringWriter(); cv = new TraceClassVisitor(cv, new PrintWriter(traceString)); } cv = new CheckClassAdapter(cv); if (schema.getBinding().getGroupTypeAccessor() == JavaClassGroupTypeAccessor.INSTANCE) { generateCodecJ(cv, schema, suffix); } else { generateCodecG(cv, schema, suffix); } byte[] bytes = classWriter.toByteArray(); if (log.isLoggable(Level.FINE)) { log.log(Level.FINE, "Generated codec class " + GENERATED_CLASS_INAME + suffix + " for schema UID: " + schema.getUID()); if (log.isLoggable(Level.FINER)) { log.finer("Generated code (#" + suffix + "):\n" + traceString.toString()); } if (log.isLoggable(Level.FINEST)) { log.finest("Generated bytecode (#" + suffix + "):\n" + ByteArrays.toHex(bytes, 0, bytes.length, 1, 8, 32)); } } return bytes; }
From source file:com.dragome.callbackevictor.serverside.bytecode.transformation.asm.AsmClassTransformer.java
License:Apache License
private ClassVisitor decorateClassVisitor(ClassVisitor visitor, final boolean check, final PrintStream dumpStream) { if (check) {// w ww . j ava2 s . co m visitor = new CheckClassAdapter(visitor); if (null != CHECK_DATA_FLOW) { try { // Currently CheckMethodAdapter throws error, so suppress flow checks CHECK_DATA_FLOW.set(visitor, Boolean.FALSE); } catch (final IllegalAccessException ex) { throw new RuntimeException(ex); } } } if (null != dumpStream) { visitor = new TraceClassVisitor(visitor, new PrintWriter(dumpStream)); } return visitor; }
From source file:com.fjn.helper.frameworkex.asm.test.TraceClassVisitorTest.java
License:Apache License
public static void main(String[] args) throws IOException { ClassReader cr = new ClassReader("com.fjn.helper.frameworkex.asm.test.ClassPrinterTest"); ClassWriter cw = new ClassWriter(cr, 0); PrintWriter pw = new PrintWriter(System.out); TraceClassVisitor traceVisitor = new TraceClassVisitor(cw, pw); cr.accept(traceVisitor, 0);// www. j av a2s . c om cw.toByteArray(); }
From source file:com.google.code.jconts.instrument.util.CodeVisitors.java
License:Apache License
public static ClassVisitor tracer(ClassVisitor writer) { final StringWriter output = new StringWriter(); return new TraceClassVisitor(writer, new PrintWriter(output)) { @Override//ww w . j a va 2 s . com public void visitEnd() { super.visitEnd(); System.err.println("----------------------------------------"); System.err.println("Class code: "); System.err.println(output.toString()); } }; }
From source file:com.google.gwt.dev.javac.TypeOracleMediator.java
License:Open Source License
/** * Collects data about a class which only needs the bytecode and no TypeOracle * data structures. This is used to make the initial shallow identity pass for * creating JRealClassType/JGenericType objects. *///w ww .j av a2s. c o m private CollectClassData processClass(CompiledClass compiledClass) { byte[] classBytes = compiledClass.getBytes(); ClassReader reader = new ClassReader(classBytes); CollectClassData mcv = new CollectClassData(); ClassVisitor cv = mcv; if (TRACE_CLASSES) { cv = new TraceClassVisitor(cv, new PrintWriter(System.out)); } reader.accept(cv, 0); return mcv; }
From source file:com.googlecode.ddom.weaver.dump.DumpPlugin.java
License:Apache License
@Override public ClassVisitor prepareForOutput(ClassRealm realm, ClassVisitor outputClassVisitor, boolean generated, boolean enhanced) { if (generated || enhanced) { return new TraceClassVisitor(outputClassVisitor, new PrintWriter(System.out)); } else {/*from ww w .ja v a2s . c o m*/ return outputClassVisitor; } }
From source file:com.jitlogic.zorka.agent.testspy.support.TestSpyTransformer.java
License:Open Source License
protected ClassVisitor createVisitor(String clazzName, List<SpyDefinition> found, ClassWriter cw) { if (debug) {//from www. jav a2 s .c o m return new SpyClassVisitor(this, clazzName, found, new TraceClassVisitor(cw, new PrintWriter(System.out, true))); } else { return new SpyClassVisitor(this, clazzName, found, cw); } }