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

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

Introduction

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

Prototype

public CheckClassAdapter(final ClassVisitor classVisitor) 

Source Link

Document

Constructs a new CheckClassAdapter .

Usage

From source file:Test1.java

License:Apache License

private static void implementInterface(ClassNode cn) throws Exception {

    // MethodNode fromMethod = new MethodNode(ACC_PUBLIC, "fromData",
    // "(Ljava/io/DataInput;)V", null, new String[] {
    // "java/io/IOException",
    // "java/lang/ClassNotFoundException" });
    // mv = cw.visitMethod(ACC_PUBLIC, "toData", "(Ljava/io/DataOutput;)V",
    // null, new String[] { "java/io/IOException" });
    MethodNode toMethod = new MethodNode(ACC_PUBLIC, "toData", "(Ljava/io/DataOutput;)V", null,
            new String[] { "java/io/IOException" });
    InsnList instToMethod = toMethod.instructions;
    for (int i = 0; i < cn.fields.size(); i++) {
        FieldNode fn = (FieldNode) cn.fields.get(i);
        toMethod(cn.name, fn, instToMethod);
    }/*w w  w  .ja v  a 2 s  .  c o m*/
    instToMethod.add(new InsnNode(RETURN));
    cn.methods.add(toMethod);

    ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
    cn.accept(cw);
    byte[] bt = cw.toByteArray();

    ClassReader cr = new ClassReader(bt);
    CheckClassAdapter ca = new CheckClassAdapter(cw);
    FileOutputStream fo = new FileOutputStream("d:/x1.log");
    PrintWriter pw = new PrintWriter(fo);
    ca.verify(cr, true, pw);

    ByteArrayClassLoader bacl = new ByteArrayClassLoader(bt);

    Class cls = bacl.loadClass("ynd.test.Ac01");
    DataSerializable di = (DataSerializable) cls.newInstance();
    di.toData(null);
}

From source file:boilerplate.processor.BinaryProcessor.java

License:Open Source License

public void processBinary(Binary binary) throws IOException {
    String type = binary.getClassName();
    type = type.replace('.', '/');
    byte[] data = binary.loadBytes();

    ClassReader reader = new ClassReader(data);
    ClassWriter writer = new ClassWriter(reader, ClassWriter.COMPUTE_FRAMES);

    ClassVisitor visitor = writer;//ww  w.j a  va 2s . c  om
    visitor = new CheckClassAdapter(visitor);
    // visitor = new TraceClassVisitor(visitor, new
    // PrintWriter(System.out));
    visitor = new ToStringAdapter(logger, type, visitor);
    visitor = new EqualsAdapter(logger, type, visitor);

    reader.accept(visitor, 0);

    data = writer.toByteArray();
    binary.saveBytes(data);
}

From source file:co.cask.cdap.internal.asm.Debugs.java

License:Apache License

public static void debugByteCode(ClassDefinition classDefinition, PrintWriter writer) {
    ClassReader reader = new ClassReader(classDefinition.getBytecode());
    reader.accept(new CheckClassAdapter(new TraceClassVisitor(writer)), 0);

    File file = new File("/tmp/" + classDefinition.getInternalName() + ".class");
    file.getParentFile().mkdirs();//from   w  w w .j a v a2 s. c  o  m
    writer.println(file);
    writer.flush();
    try {
        ByteStreams.write(classDefinition.getBytecode(), Files.newOutputStreamSupplier(file));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

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 {// w  w  w.j  a va 2 s .  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.chiralbehaviors.janus.TestCompositeClassGenerator.java

License:Open Source License

public void testGeneratedBits() {
    CompositeClassGenerator generator = new CompositeClassGenerator(Composite1.class);
    byte[] generatedBits = generator.generateClassBits();
    assertNotNull(generatedBits);/*w w w . ja  va2  s.c om*/
    TraceClassVisitor tcv = new TraceClassVisitor(new PrintWriter(System.out));
    CheckClassAdapter cv = new CheckClassAdapter(tcv);
    ClassReader reader = new ClassReader(generatedBits);
    reader.accept(cv, 0);
}

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");
    }//  w w w  .j a  v  a2 s.  co 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) {/*from  w w w.j  a  v  a 2s.c  o 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.enea.jcarder.agent.instrument.ClassTransformer.java

License:GNU General Public License

private byte[] instrument(final ClassLoader classLoader, final byte[] originalClassBuffer,
        final String className) {
    if (className.startsWith("com.enea.jcarder") && !className.startsWith("com.enea.jcarder.testclasses")) {
        return null; // Don't instrument ourself.
    }/*from w  ww .j a  v  a 2 s.  c  om*/
    final String reason = isInstrumentable(className);
    if (reason != null) {
        mLogger.finest("Won't instrument class " + className + ": " + reason);
        return null;
    }
    if (!isCompatibleClassLoader(classLoader)) {
        mLogger.finest(
                "Can't instrument class " + className + " loaded with " + getClassLoaderName(classLoader));
        return null;
    }
    final ClassReader reader = new ClassReader(originalClassBuffer);
    final ClassWriter writer = new ClassWriter(true);
    ClassVisitor visitor = writer;
    if (mInstrumentConfig.getValidateTransfomedClasses()) {
        visitor = new CheckClassAdapter(visitor);
    }
    visitor = new ClassAdapter(mLogger, visitor, className);
    reader.accept(visitor, false);
    byte[] instrumentedClassfileBuffer = writer.toByteArray();
    if (mInstrumentConfig.getDumpClassFiles()) {
        dumpClassToFile(originalClassBuffer, mOriginalClassesDir, className);
        dumpClassToFile(instrumentedClassfileBuffer, mInstrumentedClassesDir, className);
    }
    return instrumentedClassfileBuffer;
}

From source file:com.gargoylesoftware.js.nashorn.internal.tools.nasgen.ScriptClassInstrumentor.java

License:Open Source License

/**
 * External entry point for ScriptClassInfoCollector if run from the command line
 *
 * @param args arguments - one argument is needed, the name of the class to collect info from
 *
 * @throws IOException if there are problems reading class
 *///from   w w  w  .j  a v  a 2s . c o m
public static void main(final String[] args) throws IOException {
    if (args.length != 1) {
        System.err.println("Usage: " + ScriptClassInstrumentor.class.getName() + " <class>");
        System.exit(1);
    }

    final String fileName = args[0].replace('.', '/') + ".class";
    final ScriptClassInfo sci = ClassGenerator.getScriptClassInfo(fileName);
    if (sci == null) {
        System.err.println("No @ScriptClass in " + fileName);
        System.exit(2);
        throw new AssertionError(); //guard against warning that sci is null below
    }

    try {
        sci.verify();
    } catch (final Exception e) {
        System.err.println(e.getMessage());
        System.exit(3);
    }

    final ClassWriter writer = ClassGenerator.makeClassWriter();
    try (final BufferedInputStream bis = new BufferedInputStream(new FileInputStream(fileName))) {
        final ClassReader reader = new ClassReader(bis);
        final CheckClassAdapter checker = new CheckClassAdapter(writer);
        final ScriptClassInstrumentor instr = new ScriptClassInstrumentor(checker, sci);
        reader.accept(instr, 0);
    }

    try (FileOutputStream fos = new FileOutputStream(fileName)) {
        fos.write(writer.toByteArray());
    }
}

From source file:com.gargoylesoftware.js.nashorn.internal.tools.nasgen.ScriptClassJavaInstrumentor.java

License:Open Source License

public static String getString(final String fileName) throws IOException {
    final ScriptClassInfo sci = ClassJavaGenerator.getScriptClassInfo(fileName);
    if (sci == null) {
        System.err.println("No @ScriptClass in " + fileName);
        System.exit(2);//from w w w.ja  v  a2 s . co m
        throw new AssertionError(); //guard against warning that sci is null below
    }

    try {
        sci.verify();
    } catch (final Exception e) {
        System.err.println(e.getMessage());
        System.exit(3);
    }

    final ClassWriter writer = ClassJavaGenerator.makeClassWriter();
    try (final BufferedInputStream bis = new BufferedInputStream(new FileInputStream(fileName))) {
        final ClassReader reader = new ClassReader(bis);
        final CheckClassAdapter checker = new CheckClassAdapter(writer);
        final ScriptClassJavaInstrumentor instr = new ScriptClassJavaInstrumentor(checker, sci);
        reader.accept(instr, 0);
    }

    String name = sci.getJavaName();
    name = name.substring(name.lastIndexOf('/') + 1);
    return ClassJavaGenerator.getCode(name);
}