org.objectweb.asm.util
Class ASMifier

java.lang.Object
  extended by org.objectweb.asm.util.Printer
      extended by org.objectweb.asm.util.ASMifier

public class ASMifier
extends Printer

A Printer that prints the ASM code to generate the classes if visits.

Author:
Eric Bruneton

Field Summary
protected  int id
          Identifier of the annotation visitor variable in the produced code.
protected  Map<Label,String> labelNames
          The label names.
protected  String name
          The name of the visitor variable in the produced code.
 
Fields inherited from class org.objectweb.asm.util.Printer
api, buf, HANDLE_TAG, OPCODES, text, TYPES
 
Constructor Summary
  ASMifier()
          Constructs a new ASMifier.
protected ASMifier(int api, String name, int id)
          Constructs a new ASMifier.
 
Method Summary
protected  void appendConstant(Object cst)
          Appends a string representation of the given constant to the given buffer.
protected  void appendLabel(Label l)
          Appends the name of the given label to buf.
protected  ASMifier createASMifier(String name, int id)
           
protected  void declareLabel(Label l)
          Appends a declaration of the given label to buf.
static void main(String[] args)
          Prints the ASM source code to generate the given class to the standard output.
 void visit(int version, int access, String name, String signature, String superName, String[] interfaces)
          Class header.
 void visit(String name, Object value)
          Annotation value.
 ASMifier visitAnnotation(String desc, boolean visible)
           
 ASMifier visitAnnotation(String name, String desc)
          Nested annotation value.
 ASMifier visitAnnotationDefault()
          Method default annotation.
 void visitAnnotationEnd()
          Annotation end.
 ASMifier visitArray(String name)
          Annotation array value.
 void visitAttribute(Attribute attr)
           
 ASMifier visitClassAnnotation(String desc, boolean visible)
          Class annotation.
 void visitClassAttribute(Attribute attr)
          Class attribute.
 void visitClassEnd()
          Class end.
 void visitCode()
          Method start.
 void visitEnum(String name, String desc, String value)
          Annotation enum value.
 ASMifier visitField(int access, String name, String desc, String signature, Object value)
          Class field.
 ASMifier visitFieldAnnotation(String desc, boolean visible)
          Field annotation.
 void visitFieldAttribute(Attribute attr)
          Field attribute.
 void visitFieldEnd()
          Field end.
 void visitFieldInsn(int opcode, String owner, String name, String desc)
          Method instruction.
 void visitFrame(int type, int nLocal, Object[] local, int nStack, Object[] stack)
          Method stack frame.
 void visitIincInsn(int var, int increment)
          Method instruction.
 void visitInnerClass(String name, String outerName, String innerName, int access)
          Class inner name.
 void visitInsn(int opcode)
          Method instruction.
 void visitIntInsn(int opcode, int operand)
          Method instruction.
 void visitInvokeDynamicInsn(String name, String desc, Handle bsm, Object... bsmArgs)
          Method instruction.
 void visitJumpInsn(int opcode, Label label)
          Method instruction.
 void visitLabel(Label label)
          Method label.
 void visitLdcInsn(Object cst)
          Method instruction.
 void visitLineNumber(int line, Label start)
          Method debug info.
 void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index)
          Method debug info.
 void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels)
          Method instruction.
 void visitMaxs(int maxStack, int maxLocals)
          Method max stack and max locals.
 ASMifier visitMethod(int access, String name, String desc, String signature, String[] exceptions)
          Class method.
 ASMifier visitMethodAnnotation(String desc, boolean visible)
          Method annotation.
 void visitMethodAttribute(Attribute attr)
          Method attribute.
 void visitMethodEnd()
          Method end.
 void visitMethodInsn(int opcode, String owner, String name, String desc)
          Method instruction.
 void visitMultiANewArrayInsn(String desc, int dims)
          Method instruction.
 void visitOuterClass(String owner, String name, String desc)
          Class outer class.
 ASMifier visitParameterAnnotation(int parameter, String desc, boolean visible)
          Method parameter annotation.
 void visitSource(String file, String debug)
          Class source.
 void visitTableSwitchInsn(int min, int max, Label dflt, Label... labels)
          Method instruction.
 void visitTryCatchBlock(Label start, Label end, Label handler, String type)
          Method exception handler.
 void visitTypeInsn(int opcode, String type)
          Method instruction.
 void visitVarInsn(int opcode, int var)
          Method instruction.
 
Methods inherited from class org.objectweb.asm.util.Printer
appendString, getText, print
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

name

protected final String name
The name of the visitor variable in the produced code.


id

protected final int id
Identifier of the annotation visitor variable in the produced code.


labelNames

protected Map<Label,String> labelNames
The label names. This map associates String values to Label keys. It is used only in ASMifierMethodVisitor.

Constructor Detail

ASMifier

public ASMifier()
Constructs a new ASMifier. Subclasses must not use this constructor. Instead, they must use the ASMifier(int, String, int) version.


ASMifier

protected ASMifier(int api,
                   String name,
                   int id)
Constructs a new ASMifier.

Parameters:
api - the ASM API version implemented by this class. Must be one of Opcodes.ASM4.
name - the name of the visitor variable in the produced code.
id - identifier of the annotation visitor variable in the produced code.
Method Detail

main

public static void main(String[] args)
                 throws Exception
Prints the ASM source code to generate the given class to the standard output.

Usage: ASMifier [-debug] <binary class name or class file name>

Parameters:
args - the command line arguments.
Throws:
Exception - if the class cannot be found, or if an IO exception occurs.

visit

public void visit(int version,
                  int access,
                  String name,
                  String signature,
                  String superName,
                  String[] interfaces)
Description copied from class: Printer
Class header. See ClassVisitor.visit(int, int, java.lang.String, java.lang.String, java.lang.String, java.lang.String[]).

Specified by:
visit in class Printer

visitSource

public void visitSource(String file,
                        String debug)
Description copied from class: Printer
Class source. See ClassVisitor.visitSource(java.lang.String, java.lang.String).

Specified by:
visitSource in class Printer

visitOuterClass

public void visitOuterClass(String owner,
                            String name,
                            String desc)
Description copied from class: Printer
Class outer class. See ClassVisitor.visitOuterClass(java.lang.String, java.lang.String, java.lang.String).

Specified by:
visitOuterClass in class Printer

visitClassAnnotation

public ASMifier visitClassAnnotation(String desc,
                                     boolean visible)
Description copied from class: Printer
Class annotation. See ClassVisitor.visitAnnotation(java.lang.String, boolean).

Specified by:
visitClassAnnotation in class Printer

visitClassAttribute

public void visitClassAttribute(Attribute attr)
Description copied from class: Printer
Class attribute. See ClassVisitor.visitAttribute(org.objectweb.asm.Attribute).

Specified by:
visitClassAttribute in class Printer

visitInnerClass

public void visitInnerClass(String name,
                            String outerName,
                            String innerName,
                            int access)
Description copied from class: Printer
Class inner name. See ClassVisitor.visitInnerClass(java.lang.String, java.lang.String, java.lang.String, int).

Specified by:
visitInnerClass in class Printer

visitField

public ASMifier visitField(int access,
                           String name,
                           String desc,
                           String signature,
                           Object value)
Description copied from class: Printer
Class field. See ClassVisitor.visitField(int, java.lang.String, java.lang.String, java.lang.String, java.lang.Object).

Specified by:
visitField in class Printer

visitMethod

public ASMifier visitMethod(int access,
                            String name,
                            String desc,
                            String signature,
                            String[] exceptions)
Description copied from class: Printer
Class method. See ClassVisitor.visitMethod(int, java.lang.String, java.lang.String, java.lang.String, java.lang.String[]).

Specified by:
visitMethod in class Printer

visitClassEnd

public void visitClassEnd()
Description copied from class: Printer
Class end. See ClassVisitor.visitEnd().

Specified by:
visitClassEnd in class Printer

visit

public void visit(String name,
                  Object value)
Description copied from class: Printer
Annotation value. See AnnotationVisitor.visit(java.lang.String, java.lang.Object).

Specified by:
visit in class Printer

visitEnum

public void visitEnum(String name,
                      String desc,
                      String value)
Description copied from class: Printer
Annotation enum value. See AnnotationVisitor.visitEnum(java.lang.String, java.lang.String, java.lang.String).

Specified by:
visitEnum in class Printer

visitAnnotation

public ASMifier visitAnnotation(String name,
                                String desc)
Description copied from class: Printer
Nested annotation value. See AnnotationVisitor.visitAnnotation(java.lang.String, java.lang.String).

Specified by:
visitAnnotation in class Printer

visitArray

public ASMifier visitArray(String name)
Description copied from class: Printer
Annotation array value. See AnnotationVisitor.visitArray(java.lang.String).

Specified by:
visitArray in class Printer

visitAnnotationEnd

public void visitAnnotationEnd()
Description copied from class: Printer
Annotation end. See AnnotationVisitor.visitEnd().

Specified by:
visitAnnotationEnd in class Printer

visitFieldAnnotation

public ASMifier visitFieldAnnotation(String desc,
                                     boolean visible)
Description copied from class: Printer
Field annotation. See FieldVisitor.visitAnnotation(java.lang.String, boolean).

Specified by:
visitFieldAnnotation in class Printer

visitFieldAttribute

public void visitFieldAttribute(Attribute attr)
Description copied from class: Printer
Field attribute. See FieldVisitor.visitAttribute(org.objectweb.asm.Attribute).

Specified by:
visitFieldAttribute in class Printer

visitFieldEnd

public void visitFieldEnd()
Description copied from class: Printer
Field end. See FieldVisitor.visitEnd().

Specified by:
visitFieldEnd in class Printer

visitAnnotationDefault

public ASMifier visitAnnotationDefault()
Description copied from class: Printer
Method default annotation. See MethodVisitor.visitAnnotationDefault().

Specified by:
visitAnnotationDefault in class Printer

visitMethodAnnotation

public ASMifier visitMethodAnnotation(String desc,
                                      boolean visible)
Description copied from class: Printer
Method annotation. See MethodVisitor.visitAnnotation(java.lang.String, boolean).

Specified by:
visitMethodAnnotation in class Printer

visitParameterAnnotation

public ASMifier visitParameterAnnotation(int parameter,
                                         String desc,
                                         boolean visible)
Description copied from class: Printer
Method parameter annotation. See MethodVisitor.visitParameterAnnotation(int, java.lang.String, boolean).

Specified by:
visitParameterAnnotation in class Printer

visitMethodAttribute

public void visitMethodAttribute(Attribute attr)
Description copied from class: Printer
Method attribute. See MethodVisitor.visitAttribute(org.objectweb.asm.Attribute).

Specified by:
visitMethodAttribute in class Printer

visitCode

public void visitCode()
Description copied from class: Printer
Method start. See MethodVisitor.visitCode().

Specified by:
visitCode in class Printer

visitFrame

public void visitFrame(int type,
                       int nLocal,
                       Object[] local,
                       int nStack,
                       Object[] stack)
Description copied from class: Printer
Method stack frame. See MethodVisitor.visitFrame(int, int, java.lang.Object[], int, java.lang.Object[]).

Specified by:
visitFrame in class Printer

visitInsn

public void visitInsn(int opcode)
Description copied from class: Printer
Method instruction. See MethodVisitor.visitInsn(int) .

Specified by:
visitInsn in class Printer

visitIntInsn

public void visitIntInsn(int opcode,
                         int operand)
Description copied from class: Printer
Method instruction. See MethodVisitor.visitIntInsn(int, int).

Specified by:
visitIntInsn in class Printer

visitVarInsn

public void visitVarInsn(int opcode,
                         int var)
Description copied from class: Printer
Method instruction. See MethodVisitor.visitVarInsn(int, int).

Specified by:
visitVarInsn in class Printer

visitTypeInsn

public void visitTypeInsn(int opcode,
                          String type)
Description copied from class: Printer
Method instruction. See MethodVisitor.visitTypeInsn(int, java.lang.String).

Specified by:
visitTypeInsn in class Printer

visitFieldInsn

public void visitFieldInsn(int opcode,
                           String owner,
                           String name,
                           String desc)
Description copied from class: Printer
Method instruction. See MethodVisitor.visitFieldInsn(int, java.lang.String, java.lang.String, java.lang.String).

Specified by:
visitFieldInsn in class Printer

visitMethodInsn

public void visitMethodInsn(int opcode,
                            String owner,
                            String name,
                            String desc)
Description copied from class: Printer
Method instruction. See MethodVisitor.visitMethodInsn(int, java.lang.String, java.lang.String, java.lang.String).

Specified by:
visitMethodInsn in class Printer

visitInvokeDynamicInsn

public void visitInvokeDynamicInsn(String name,
                                   String desc,
                                   Handle bsm,
                                   Object... bsmArgs)
Description copied from class: Printer
Method instruction. See MethodVisitor.visitInvokeDynamicInsn(java.lang.String, java.lang.String, org.objectweb.asm.Handle, java.lang.Object...).

Specified by:
visitInvokeDynamicInsn in class Printer

visitJumpInsn

public void visitJumpInsn(int opcode,
                          Label label)
Description copied from class: Printer
Method instruction. See MethodVisitor.visitJumpInsn(int, org.objectweb.asm.Label).

Specified by:
visitJumpInsn in class Printer

visitLabel

public void visitLabel(Label label)
Description copied from class: Printer
Method label. See MethodVisitor.visitLabel(org.objectweb.asm.Label).

Specified by:
visitLabel in class Printer

visitLdcInsn

public void visitLdcInsn(Object cst)
Description copied from class: Printer
Method instruction. See MethodVisitor.visitLdcInsn(java.lang.Object).

Specified by:
visitLdcInsn in class Printer

visitIincInsn

public void visitIincInsn(int var,
                          int increment)
Description copied from class: Printer
Method instruction. See MethodVisitor.visitIincInsn(int, int).

Specified by:
visitIincInsn in class Printer

visitTableSwitchInsn

public void visitTableSwitchInsn(int min,
                                 int max,
                                 Label dflt,
                                 Label... labels)
Description copied from class: Printer
Method instruction. See MethodVisitor.visitTableSwitchInsn(int, int, org.objectweb.asm.Label, org.objectweb.asm.Label...).

Specified by:
visitTableSwitchInsn in class Printer

visitLookupSwitchInsn

public void visitLookupSwitchInsn(Label dflt,
                                  int[] keys,
                                  Label[] labels)
Description copied from class: Printer
Method instruction. See MethodVisitor.visitLookupSwitchInsn(org.objectweb.asm.Label, int[], org.objectweb.asm.Label[]).

Specified by:
visitLookupSwitchInsn in class Printer

visitMultiANewArrayInsn

public void visitMultiANewArrayInsn(String desc,
                                    int dims)
Description copied from class: Printer
Method instruction. See MethodVisitor.visitMultiANewArrayInsn(java.lang.String, int).

Specified by:
visitMultiANewArrayInsn in class Printer

visitTryCatchBlock

public void visitTryCatchBlock(Label start,
                               Label end,
                               Label handler,
                               String type)
Description copied from class: Printer
Method exception handler. See MethodVisitor.visitTryCatchBlock(org.objectweb.asm.Label, org.objectweb.asm.Label, org.objectweb.asm.Label, java.lang.String).

Specified by:
visitTryCatchBlock in class Printer

visitLocalVariable

public void visitLocalVariable(String name,
                               String desc,
                               String signature,
                               Label start,
                               Label end,
                               int index)
Description copied from class: Printer
Method debug info. See MethodVisitor.visitLocalVariable(java.lang.String, java.lang.String, java.lang.String, org.objectweb.asm.Label, org.objectweb.asm.Label, int).

Specified by:
visitLocalVariable in class Printer

visitLineNumber

public void visitLineNumber(int line,
                            Label start)
Description copied from class: Printer
Method debug info. See MethodVisitor.visitLineNumber(int, org.objectweb.asm.Label).

Specified by:
visitLineNumber in class Printer

visitMaxs

public void visitMaxs(int maxStack,
                      int maxLocals)
Description copied from class: Printer
Method max stack and max locals. See MethodVisitor.visitMaxs(int, int).

Specified by:
visitMaxs in class Printer

visitMethodEnd

public void visitMethodEnd()
Description copied from class: Printer
Method end. See MethodVisitor.visitEnd().

Specified by:
visitMethodEnd in class Printer

visitAnnotation

public ASMifier visitAnnotation(String desc,
                                boolean visible)

visitAttribute

public void visitAttribute(Attribute attr)

createASMifier

protected ASMifier createASMifier(String name,
                                  int id)

appendConstant

protected void appendConstant(Object cst)
Appends a string representation of the given constant to the given buffer.

Parameters:
cst - an Integer, Float, Long, Double or String object. May be null.

declareLabel

protected void declareLabel(Label l)
Appends a declaration of the given label to buf. This declaration is of the form "Label lXXX = new Label();". Does nothing if the given label has already been declared.

Parameters:
l - a label.

appendLabel

protected void appendLabel(Label l)
Appends the name of the given label to buf. The given label must already have a name. One way to ensure this is to always call declared before calling this method.

Parameters:
l - a label.