Example usage for org.objectweb.asm ClassWriter visitAttribute

List of usage examples for org.objectweb.asm ClassWriter visitAttribute

Introduction

In this page you can find the example usage for org.objectweb.asm ClassWriter visitAttribute.

Prototype

@Override
    public final void visitAttribute(final Attribute attribute) 

Source Link

Usage

From source file:com.j2biz.pencil.asm.Transformer.java

License:Open Source License

public final byte[] start(ASMClassInfoNode classNode) {
    assert classNode != null;

    // TODO: zuerst den logger initialisieren. bzw. zusaetzliche transformationen ausfhren.
    // erst dann schreiben
    for (final Iterator i = classNode.methods(); i.hasNext();) {
        final MethodInfoNode method = (MethodInfoNode) i.next();
        //         visit(classNode, node, writer);
        beforeWriteMethod(classNode, method);
    }//from  w ww. ja va 2s  .  co m

    init(classNode);

    final ClassWriter writer = new ClassWriter(true, Defaults.SKIP_UNKNOWN_ATTRIBUTES);

    writer.visit(classNode.getVersion(), classNode.getAccessFlags(), classNode.getClassName(),
            classNode.getSuperClassName(), classNode.getInterfaces(), classNode.getJavaSource());

    for (final Iterator i = classNode.innerClassNodes(); i.hasNext();) {
        final InnerClassNode node = (InnerClassNode) i.next();
        visit(classNode, node, writer);
    }

    for (final Iterator i = classNode.fields(); i.hasNext();) {
        final FieldVariableDefinition node = (FieldVariableDefinition) i.next();
        visit(classNode, node, writer);
    }

    for (final Iterator i = classNode.methods(); i.hasNext();) {
        final MethodInfoNode node = (MethodInfoNode) i.next();
        visit(classNode, node, writer);
    }

    Attribute attrs = classNode.getFirstAttribute();
    while (attrs != null) {
        writer.visitAttribute(attrs);
        attrs = attrs.next;
    }

    end();

    return writer.toByteArray();
}