Example usage for org.objectweb.asm.util TraceClassVisitor TraceClassVisitor

List of usage examples for org.objectweb.asm.util TraceClassVisitor TraceClassVisitor

Introduction

In this page you can find the example usage for org.objectweb.asm.util TraceClassVisitor TraceClassVisitor.

Prototype

public TraceClassVisitor(final ClassVisitor classVisitor, final PrintWriter printWriter) 

Source Link

Document

Constructs a new TraceClassVisitor .

Usage

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);
    }

}