org.objectweb.asm.util

Class CheckMethodAdapter

public class CheckMethodAdapter extends MethodAdapter

A MethodAdapter that checks that its methods are properly used. More precisely this method adapter checks each instruction individually, i.e., each visit method checks some preconditions based only on its arguments - such as the fact that the given opcode is correct for a given visit method. This adapter can also perform some basic data flow checks (more precisely those that can be performed without the full class hierarchy - see BasicVerifier). For instance in a method whose signature is void m (), the invalid instruction IRETURN, or the invalid sequence IADD L2I will be detected if the data flow checks are enabled. These checks are enabled by using the (int,String,String,MethodVisitor,Map) constructor. They are not performed if any other constructor is used.

Author: Eric Bruneton

Constructor Summary
CheckMethodAdapter(MethodVisitor mv)
Constructs a new CheckMethodAdapter object.
CheckMethodAdapter(MethodVisitor mv, Map labels)
Constructs a new CheckMethodAdapter object.
CheckMethodAdapter(int access, String name, String desc, MethodVisitor mv, Map labels)
Constructs a new CheckMethodAdapter object.
Method Summary
AnnotationVisitorvisitAnnotation(String desc, boolean visible)
AnnotationVisitorvisitAnnotationDefault()
voidvisitAttribute(Attribute attr)
voidvisitCode()
voidvisitEnd()
voidvisitFieldInsn(int opcode, String owner, String name, String desc)
voidvisitFrame(int type, int nLocal, Object[] local, int nStack, Object[] stack)
voidvisitIincInsn(int var, int increment)
voidvisitInsn(int opcode)
voidvisitIntInsn(int opcode, int operand)
voidvisitJumpInsn(int opcode, Label label)
voidvisitLabel(Label label)
voidvisitLdcInsn(Object cst)
voidvisitLineNumber(int line, Label start)
voidvisitLocalVariable(String name, String desc, String signature, Label start, Label end, int index)
voidvisitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels)
voidvisitMaxs(int maxStack, int maxLocals)
voidvisitMethodInsn(int opcode, String owner, String name, String desc)
voidvisitMultiANewArrayInsn(String desc, int dims)
AnnotationVisitorvisitParameterAnnotation(int parameter, String desc, boolean visible)
voidvisitTableSwitchInsn(int min, int max, Label dflt, Label[] labels)
voidvisitTryCatchBlock(Label start, Label end, Label handler, String type)
voidvisitTypeInsn(int opcode, String type)
voidvisitVarInsn(int opcode, int var)

Constructor Detail

CheckMethodAdapter

public CheckMethodAdapter(MethodVisitor mv)
Constructs a new CheckMethodAdapter object. This method adapter will not perform any data flow check (see (int,String,String,MethodVisitor,Map)).

Parameters: mv the method visitor to which this adapter must delegate calls.

CheckMethodAdapter

public CheckMethodAdapter(MethodVisitor mv, Map labels)
Constructs a new CheckMethodAdapter object. This method adapter will not perform any data flow check (see (int,String,String,MethodVisitor,Map)).

Parameters: mv the method visitor to which this adapter must delegate calls. labels a map of already visited labels (in other methods).

CheckMethodAdapter

public CheckMethodAdapter(int access, String name, String desc, MethodVisitor mv, Map labels)
Constructs a new CheckMethodAdapter object. This method adapter will perform basic data flow checks. For instance in a method whose signature is void m (), the invalid instruction IRETURN, or the invalid sequence IADD L2I will be detected.

Parameters: access the method's access flags. name the method's name. desc the method's descriptor (see Type). mv the method visitor to which this adapter must delegate calls. labels a map of already visited labels (in other methods).

Method Detail

visitAnnotation

public AnnotationVisitor visitAnnotation(String desc, boolean visible)

visitAnnotationDefault

public AnnotationVisitor visitAnnotationDefault()

visitAttribute

public void visitAttribute(Attribute attr)

visitCode

public void visitCode()

visitEnd

public void visitEnd()

visitFieldInsn

public void visitFieldInsn(int opcode, String owner, String name, String desc)

visitFrame

public void visitFrame(int type, int nLocal, Object[] local, int nStack, Object[] stack)

visitIincInsn

public void visitIincInsn(int var, int increment)

visitInsn

public void visitInsn(int opcode)

visitIntInsn

public void visitIntInsn(int opcode, int operand)

visitJumpInsn

public void visitJumpInsn(int opcode, Label label)

visitLabel

public void visitLabel(Label label)

visitLdcInsn

public void visitLdcInsn(Object cst)

visitLineNumber

public void visitLineNumber(int line, Label start)

visitLocalVariable

public void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index)

visitLookupSwitchInsn

public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels)

visitMaxs

public void visitMaxs(int maxStack, int maxLocals)

visitMethodInsn

public void visitMethodInsn(int opcode, String owner, String name, String desc)

visitMultiANewArrayInsn

public void visitMultiANewArrayInsn(String desc, int dims)

visitParameterAnnotation

public AnnotationVisitor visitParameterAnnotation(int parameter, String desc, boolean visible)

visitTableSwitchInsn

public void visitTableSwitchInsn(int min, int max, Label dflt, Label[] labels)

visitTryCatchBlock

public void visitTryCatchBlock(Label start, Label end, Label handler, String type)

visitTypeInsn

public void visitTypeInsn(int opcode, String type)

visitVarInsn

public void visitVarInsn(int opcode, int var)