Package org.objectweb.asm.util
Class CheckMethodAdapter
- java.lang.Object
-
- org.objectweb.asm.MethodVisitor
-
- org.objectweb.asm.util.CheckMethodAdapter
-
public class CheckMethodAdapter extends org.objectweb.asm.MethodVisitor
AMethodVisitor
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 - seeBasicVerifier
). For instance in a method whose signature isvoid 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 theCheckMethodAdapter(int,String,String,MethodVisitor,Map)
constructor. They are not performed if any other constructor is used.- Author:
- Eric Bruneton
-
-
Field Summary
Fields Modifier and Type Field Description int
version
The class version number.
-
Constructor Summary
Constructors Modifier Constructor Description protected
CheckMethodAdapter(int api, int access, java.lang.String name, java.lang.String descriptor, org.objectweb.asm.MethodVisitor methodVisitor, java.util.Map<org.objectweb.asm.Label,java.lang.Integer> labelInsnIndices)
Constructs a newCheckMethodAdapter
object.CheckMethodAdapter(int access, java.lang.String name, java.lang.String descriptor, org.objectweb.asm.MethodVisitor methodVisitor, java.util.Map<org.objectweb.asm.Label,java.lang.Integer> labelInsnIndices)
Constructs a newCheckMethodAdapter
object.protected
CheckMethodAdapter(int api, org.objectweb.asm.MethodVisitor methodVisitor, java.util.Map<org.objectweb.asm.Label,java.lang.Integer> labelInsnIndices)
Constructs a newCheckMethodAdapter
object.CheckMethodAdapter(org.objectweb.asm.MethodVisitor methodvisitor)
Constructs a newCheckMethodAdapter
object.CheckMethodAdapter(org.objectweb.asm.MethodVisitor methodVisitor, java.util.Map<org.objectweb.asm.Label,java.lang.Integer> labelInsnIndices)
Constructs a newCheckMethodAdapter
object.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
visitAnnotableParameterCount(int parameterCount, boolean visible)
org.objectweb.asm.AnnotationVisitor
visitAnnotation(java.lang.String descriptor, boolean visible)
org.objectweb.asm.AnnotationVisitor
visitAnnotationDefault()
void
visitAttribute(org.objectweb.asm.Attribute attribute)
void
visitCode()
void
visitEnd()
void
visitFieldInsn(int opcode, java.lang.String owner, java.lang.String name, java.lang.String descriptor)
void
visitFrame(int type, int numLocal, java.lang.Object[] local, int numStack, java.lang.Object[] stack)
void
visitIincInsn(int var, int increment)
void
visitInsn(int opcode)
org.objectweb.asm.AnnotationVisitor
visitInsnAnnotation(int typeRef, org.objectweb.asm.TypePath typePath, java.lang.String descriptor, boolean visible)
void
visitIntInsn(int opcode, int operand)
void
visitInvokeDynamicInsn(java.lang.String name, java.lang.String descriptor, org.objectweb.asm.Handle bootstrapMethodHandle, java.lang.Object... bootstrapMethodArguments)
void
visitJumpInsn(int opcode, org.objectweb.asm.Label label)
void
visitLabel(org.objectweb.asm.Label label)
void
visitLdcInsn(java.lang.Object value)
void
visitLineNumber(int line, org.objectweb.asm.Label start)
void
visitLocalVariable(java.lang.String name, java.lang.String descriptor, java.lang.String signature, org.objectweb.asm.Label start, org.objectweb.asm.Label end, int index)
org.objectweb.asm.AnnotationVisitor
visitLocalVariableAnnotation(int typeRef, org.objectweb.asm.TypePath typePath, org.objectweb.asm.Label[] start, org.objectweb.asm.Label[] end, int[] index, java.lang.String descriptor, boolean visible)
void
visitLookupSwitchInsn(org.objectweb.asm.Label dflt, int[] keys, org.objectweb.asm.Label[] labels)
void
visitMaxs(int maxStack, int maxLocals)
void
visitMethodInsn(int opcodeAndSource, java.lang.String owner, java.lang.String name, java.lang.String descriptor, boolean isInterface)
void
visitMultiANewArrayInsn(java.lang.String descriptor, int numDimensions)
void
visitParameter(java.lang.String name, int access)
org.objectweb.asm.AnnotationVisitor
visitParameterAnnotation(int parameter, java.lang.String descriptor, boolean visible)
void
visitTableSwitchInsn(int min, int max, org.objectweb.asm.Label dflt, org.objectweb.asm.Label... labels)
org.objectweb.asm.AnnotationVisitor
visitTryCatchAnnotation(int typeRef, org.objectweb.asm.TypePath typePath, java.lang.String descriptor, boolean visible)
void
visitTryCatchBlock(org.objectweb.asm.Label start, org.objectweb.asm.Label end, org.objectweb.asm.Label handler, java.lang.String type)
org.objectweb.asm.AnnotationVisitor
visitTypeAnnotation(int typeRef, org.objectweb.asm.TypePath typePath, java.lang.String descriptor, boolean visible)
void
visitTypeInsn(int opcode, java.lang.String type)
void
visitVarInsn(int opcode, int var)
-
-
-
Constructor Detail
-
CheckMethodAdapter
public CheckMethodAdapter(org.objectweb.asm.MethodVisitor methodvisitor)
Constructs a newCheckMethodAdapter
object. This method adapter will not perform any data flow check (seeCheckMethodAdapter(int,String,String,MethodVisitor,Map)
). Subclasses must not use this constructor. Instead, they must use theCheckMethodAdapter(int, MethodVisitor, Map)
version.- Parameters:
methodvisitor
- the method visitor to which this adapter must delegate calls.
-
CheckMethodAdapter
public CheckMethodAdapter(org.objectweb.asm.MethodVisitor methodVisitor, java.util.Map<org.objectweb.asm.Label,java.lang.Integer> labelInsnIndices)
Constructs a newCheckMethodAdapter
object. This method adapter will not perform any data flow check (seeCheckMethodAdapter(int,String,String,MethodVisitor,Map)
). Subclasses must not use this constructor. Instead, they must use theCheckMethodAdapter(int, MethodVisitor, Map)
version.- Parameters:
methodVisitor
- the method visitor to which this adapter must delegate calls.labelInsnIndices
- the index of the instruction designated by each visited label so far (in other methods). This map is updated with the labels from the visited method.- Throws:
java.lang.IllegalStateException
- If a subclass calls this constructor.
-
CheckMethodAdapter
protected CheckMethodAdapter(int api, org.objectweb.asm.MethodVisitor methodVisitor, java.util.Map<org.objectweb.asm.Label,java.lang.Integer> labelInsnIndices)
Constructs a newCheckMethodAdapter
object. This method adapter will not perform any data flow check (seeCheckMethodAdapter(int,String,String,MethodVisitor,Map)
).- Parameters:
api
- the ASM API version implemented by this CheckMethodAdapter. Must be one ofOpcodes.ASM4
,Opcodes.ASM5
,Opcodes.ASM6
orOpcodes.ASM7
.methodVisitor
- the method visitor to which this adapter must delegate calls.labelInsnIndices
- the index of the instruction designated by each visited label so far (in other methods). This map is updated with the labels from the visited method.
-
CheckMethodAdapter
public CheckMethodAdapter(int access, java.lang.String name, java.lang.String descriptor, org.objectweb.asm.MethodVisitor methodVisitor, java.util.Map<org.objectweb.asm.Label,java.lang.Integer> labelInsnIndices)
Constructs a newCheckMethodAdapter
object. This method adapter will perform basic data flow checks. For instance in a method whose signature isvoid m ()
, the invalid instruction IRETURN, or the invalid sequence IADD L2I will be detected. Subclasses must not use this constructor. Instead, they must use theCheckMethodAdapter(int,int,String,String,MethodVisitor,Map)
version.- Parameters:
access
- the method's access flags.name
- the method's name.descriptor
- the method's descriptor (seeType
).methodVisitor
- the method visitor to which this adapter must delegate calls.labelInsnIndices
- the index of the instruction designated by each visited label so far (in other methods). This map is updated with the labels from the visited method.
-
CheckMethodAdapter
protected CheckMethodAdapter(int api, int access, java.lang.String name, java.lang.String descriptor, org.objectweb.asm.MethodVisitor methodVisitor, java.util.Map<org.objectweb.asm.Label,java.lang.Integer> labelInsnIndices)
Constructs a newCheckMethodAdapter
object. This method adapter will perform basic data flow checks. For instance in a method whose signature isvoid m ()
, the invalid instruction IRETURN, or the invalid sequence IADD L2I will be detected.- Parameters:
api
- the ASM API version implemented by this CheckMethodAdapter. Must be one ofOpcodes.ASM4
,Opcodes.ASM5
,Opcodes.ASM6
orOpcodes.ASM7
.access
- the method's access flags.name
- the method's name.descriptor
- the method's descriptor (seeType
).methodVisitor
- the method visitor to which this adapter must delegate calls.labelInsnIndices
- the index of the instruction designated by each visited label so far (in other methods). This map is updated with the labels from the visited method.
-
-
Method Detail
-
visitParameter
public void visitParameter(java.lang.String name, int access)
- Overrides:
visitParameter
in classorg.objectweb.asm.MethodVisitor
-
visitAnnotation
public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String descriptor, boolean visible)
- Overrides:
visitAnnotation
in classorg.objectweb.asm.MethodVisitor
-
visitTypeAnnotation
public org.objectweb.asm.AnnotationVisitor visitTypeAnnotation(int typeRef, org.objectweb.asm.TypePath typePath, java.lang.String descriptor, boolean visible)
- Overrides:
visitTypeAnnotation
in classorg.objectweb.asm.MethodVisitor
-
visitAnnotationDefault
public org.objectweb.asm.AnnotationVisitor visitAnnotationDefault()
- Overrides:
visitAnnotationDefault
in classorg.objectweb.asm.MethodVisitor
-
visitAnnotableParameterCount
public void visitAnnotableParameterCount(int parameterCount, boolean visible)
- Overrides:
visitAnnotableParameterCount
in classorg.objectweb.asm.MethodVisitor
-
visitParameterAnnotation
public org.objectweb.asm.AnnotationVisitor visitParameterAnnotation(int parameter, java.lang.String descriptor, boolean visible)
- Overrides:
visitParameterAnnotation
in classorg.objectweb.asm.MethodVisitor
-
visitAttribute
public void visitAttribute(org.objectweb.asm.Attribute attribute)
- Overrides:
visitAttribute
in classorg.objectweb.asm.MethodVisitor
-
visitCode
public void visitCode()
- Overrides:
visitCode
in classorg.objectweb.asm.MethodVisitor
-
visitFrame
public void visitFrame(int type, int numLocal, java.lang.Object[] local, int numStack, java.lang.Object[] stack)
- Overrides:
visitFrame
in classorg.objectweb.asm.MethodVisitor
-
visitInsn
public void visitInsn(int opcode)
- Overrides:
visitInsn
in classorg.objectweb.asm.MethodVisitor
-
visitIntInsn
public void visitIntInsn(int opcode, int operand)
- Overrides:
visitIntInsn
in classorg.objectweb.asm.MethodVisitor
-
visitVarInsn
public void visitVarInsn(int opcode, int var)
- Overrides:
visitVarInsn
in classorg.objectweb.asm.MethodVisitor
-
visitTypeInsn
public void visitTypeInsn(int opcode, java.lang.String type)
- Overrides:
visitTypeInsn
in classorg.objectweb.asm.MethodVisitor
-
visitFieldInsn
public void visitFieldInsn(int opcode, java.lang.String owner, java.lang.String name, java.lang.String descriptor)
- Overrides:
visitFieldInsn
in classorg.objectweb.asm.MethodVisitor
-
visitMethodInsn
public void visitMethodInsn(int opcodeAndSource, java.lang.String owner, java.lang.String name, java.lang.String descriptor, boolean isInterface)
- Overrides:
visitMethodInsn
in classorg.objectweb.asm.MethodVisitor
-
visitInvokeDynamicInsn
public void visitInvokeDynamicInsn(java.lang.String name, java.lang.String descriptor, org.objectweb.asm.Handle bootstrapMethodHandle, java.lang.Object... bootstrapMethodArguments)
- Overrides:
visitInvokeDynamicInsn
in classorg.objectweb.asm.MethodVisitor
-
visitJumpInsn
public void visitJumpInsn(int opcode, org.objectweb.asm.Label label)
- Overrides:
visitJumpInsn
in classorg.objectweb.asm.MethodVisitor
-
visitLabel
public void visitLabel(org.objectweb.asm.Label label)
- Overrides:
visitLabel
in classorg.objectweb.asm.MethodVisitor
-
visitLdcInsn
public void visitLdcInsn(java.lang.Object value)
- Overrides:
visitLdcInsn
in classorg.objectweb.asm.MethodVisitor
-
visitIincInsn
public void visitIincInsn(int var, int increment)
- Overrides:
visitIincInsn
in classorg.objectweb.asm.MethodVisitor
-
visitTableSwitchInsn
public void visitTableSwitchInsn(int min, int max, org.objectweb.asm.Label dflt, org.objectweb.asm.Label... labels)
- Overrides:
visitTableSwitchInsn
in classorg.objectweb.asm.MethodVisitor
-
visitLookupSwitchInsn
public void visitLookupSwitchInsn(org.objectweb.asm.Label dflt, int[] keys, org.objectweb.asm.Label[] labels)
- Overrides:
visitLookupSwitchInsn
in classorg.objectweb.asm.MethodVisitor
-
visitMultiANewArrayInsn
public void visitMultiANewArrayInsn(java.lang.String descriptor, int numDimensions)
- Overrides:
visitMultiANewArrayInsn
in classorg.objectweb.asm.MethodVisitor
-
visitInsnAnnotation
public org.objectweb.asm.AnnotationVisitor visitInsnAnnotation(int typeRef, org.objectweb.asm.TypePath typePath, java.lang.String descriptor, boolean visible)
- Overrides:
visitInsnAnnotation
in classorg.objectweb.asm.MethodVisitor
-
visitTryCatchBlock
public void visitTryCatchBlock(org.objectweb.asm.Label start, org.objectweb.asm.Label end, org.objectweb.asm.Label handler, java.lang.String type)
- Overrides:
visitTryCatchBlock
in classorg.objectweb.asm.MethodVisitor
-
visitTryCatchAnnotation
public org.objectweb.asm.AnnotationVisitor visitTryCatchAnnotation(int typeRef, org.objectweb.asm.TypePath typePath, java.lang.String descriptor, boolean visible)
- Overrides:
visitTryCatchAnnotation
in classorg.objectweb.asm.MethodVisitor
-
visitLocalVariable
public void visitLocalVariable(java.lang.String name, java.lang.String descriptor, java.lang.String signature, org.objectweb.asm.Label start, org.objectweb.asm.Label end, int index)
- Overrides:
visitLocalVariable
in classorg.objectweb.asm.MethodVisitor
-
visitLocalVariableAnnotation
public org.objectweb.asm.AnnotationVisitor visitLocalVariableAnnotation(int typeRef, org.objectweb.asm.TypePath typePath, org.objectweb.asm.Label[] start, org.objectweb.asm.Label[] end, int[] index, java.lang.String descriptor, boolean visible)
- Overrides:
visitLocalVariableAnnotation
in classorg.objectweb.asm.MethodVisitor
-
visitLineNumber
public void visitLineNumber(int line, org.objectweb.asm.Label start)
- Overrides:
visitLineNumber
in classorg.objectweb.asm.MethodVisitor
-
visitMaxs
public void visitMaxs(int maxStack, int maxLocals)
- Overrides:
visitMaxs
in classorg.objectweb.asm.MethodVisitor
-
visitEnd
public void visitEnd()
- Overrides:
visitEnd
in classorg.objectweb.asm.MethodVisitor
-
-