Class CheckMethodAdapter

java.lang.Object
org.objectweb.asm.MethodVisitor
org.objectweb.asm.util.CheckMethodAdapter

public class CheckMethodAdapter extends org.objectweb.asm.MethodVisitor
A MethodVisitor 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 CheckMethodAdapter(int,String,String,MethodVisitor,Map) constructor. They are not performed if any other constructor is used.
  • Field Details

    • version

      public int version
      The class version number.
  • Constructor Details

    • CheckMethodAdapter

      public CheckMethodAdapter(org.objectweb.asm.MethodVisitor methodvisitor)
      Constructs a new CheckMethodAdapter object. This method adapter will not perform any data flow check (see CheckMethodAdapter(int,String,String,MethodVisitor,Map)). Subclasses must not use this constructor. Instead, they must use the CheckMethodAdapter(int, MethodVisitor, Map) version.
      Parameters:
      methodvisitor - the method visitor to which this adapter must delegate calls.
    • CheckMethodAdapter

      public CheckMethodAdapter(org.objectweb.asm.MethodVisitor methodVisitor, Map<org.objectweb.asm.Label,Integer> labelInsnIndices)
      Constructs a new CheckMethodAdapter object. This method adapter will not perform any data flow check (see CheckMethodAdapter(int,String,String,MethodVisitor,Map)). Subclasses must not use this constructor. Instead, they must use the CheckMethodAdapter(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:
      IllegalStateException - If a subclass calls this constructor.
    • CheckMethodAdapter

      protected CheckMethodAdapter(int api, org.objectweb.asm.MethodVisitor methodVisitor, Map<org.objectweb.asm.Label,Integer> labelInsnIndices)
      Constructs a new CheckMethodAdapter object. This method adapter will not perform any data flow check (see CheckMethodAdapter(int,String,String,MethodVisitor,Map)).
      Parameters:
      api - the ASM API version implemented by this CheckMethodAdapter. Must be one of the ASMx values in Opcodes.
      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, String name, String descriptor, org.objectweb.asm.MethodVisitor methodVisitor, Map<org.objectweb.asm.Label,Integer> labelInsnIndices)
      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. Subclasses must not use this constructor. Instead, they must use the CheckMethodAdapter(int,int,String,String,MethodVisitor,Map) version.
      Parameters:
      access - the method's access flags.
      name - the method's name.
      descriptor - the method's descriptor (see Type).
      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, String name, String descriptor, org.objectweb.asm.MethodVisitor methodVisitor, Map<org.objectweb.asm.Label,Integer> labelInsnIndices)
      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:
      api - the ASM API version implemented by this CheckMethodAdapter. Must be one of the ASMx values in Opcodes.
      access - the method's access flags.
      name - the method's name.
      descriptor - the method's descriptor (see Type).
      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 Details

    • setComputeLimits

      public void setComputeLimits(int maxBytes, long maxOperations)
      Sets the maximum number of bytes which can be allocated, and the maximum number of "operations" which can be performed, for the data flow checks (which are only performed if the CheckMethodAdapter(int, String, String, MethodVisitor, Map) or CheckMethodAdapter(int, int, String, String, MethodVisitor, Map) constructors are used). Operations are not formally defined but their total number is deterministic and approximatively proportional to the computation time.

      The default limits should be sufficient for any "normal" class. You only need to set new limits if a LimitExceededException is thrown for some of your classes.

      Parameters:
      maxBytes - the maximum number of bytes which can be allocated. Not all object instantiations are tracked (and garbage collection is ignored), but the most important ones are. The default value is 400MB.
      maxOperations - the maximum number of "operations" that can be performed. The default value is 50 billions.
    • visitParameter

      public void visitParameter(String name, int access)
      Overrides:
      visitParameter in class org.objectweb.asm.MethodVisitor
    • visitAnnotation

      public org.objectweb.asm.AnnotationVisitor visitAnnotation(String descriptor, boolean visible)
      Overrides:
      visitAnnotation in class org.objectweb.asm.MethodVisitor
    • visitTypeAnnotation

      public org.objectweb.asm.AnnotationVisitor visitTypeAnnotation(int typeRef, org.objectweb.asm.TypePath typePath, String descriptor, boolean visible)
      Overrides:
      visitTypeAnnotation in class org.objectweb.asm.MethodVisitor
    • visitAnnotationDefault

      public org.objectweb.asm.AnnotationVisitor visitAnnotationDefault()
      Overrides:
      visitAnnotationDefault in class org.objectweb.asm.MethodVisitor
    • visitAnnotableParameterCount

      public void visitAnnotableParameterCount(int parameterCount, boolean visible)
      Overrides:
      visitAnnotableParameterCount in class org.objectweb.asm.MethodVisitor
    • visitParameterAnnotation

      public org.objectweb.asm.AnnotationVisitor visitParameterAnnotation(int parameter, String descriptor, boolean visible)
      Overrides:
      visitParameterAnnotation in class org.objectweb.asm.MethodVisitor
    • visitAttribute

      public void visitAttribute(org.objectweb.asm.Attribute attribute)
      Overrides:
      visitAttribute in class org.objectweb.asm.MethodVisitor
    • visitCode

      public void visitCode()
      Overrides:
      visitCode in class org.objectweb.asm.MethodVisitor
    • visitFrame

      public void visitFrame(int type, int numLocal, Object[] local, int numStack, Object[] stack)
      Overrides:
      visitFrame in class org.objectweb.asm.MethodVisitor
    • visitInsn

      public void visitInsn(int opcode)
      Overrides:
      visitInsn in class org.objectweb.asm.MethodVisitor
    • visitIntInsn

      public void visitIntInsn(int opcode, int operand)
      Overrides:
      visitIntInsn in class org.objectweb.asm.MethodVisitor
    • visitVarInsn

      public void visitVarInsn(int opcode, int varIndex)
      Overrides:
      visitVarInsn in class org.objectweb.asm.MethodVisitor
    • visitTypeInsn

      public void visitTypeInsn(int opcode, String type)
      Overrides:
      visitTypeInsn in class org.objectweb.asm.MethodVisitor
    • visitFieldInsn

      public void visitFieldInsn(int opcode, String owner, String name, String descriptor)
      Overrides:
      visitFieldInsn in class org.objectweb.asm.MethodVisitor
    • visitMethodInsn

      public void visitMethodInsn(int opcodeAndSource, String owner, String name, String descriptor, boolean isInterface)
      Overrides:
      visitMethodInsn in class org.objectweb.asm.MethodVisitor
    • visitInvokeDynamicInsn

      public void visitInvokeDynamicInsn(String name, String descriptor, org.objectweb.asm.Handle bootstrapMethodHandle, Object... bootstrapMethodArguments)
      Overrides:
      visitInvokeDynamicInsn in class org.objectweb.asm.MethodVisitor
    • visitJumpInsn

      public void visitJumpInsn(int opcode, org.objectweb.asm.Label label)
      Overrides:
      visitJumpInsn in class org.objectweb.asm.MethodVisitor
    • visitLabel

      public void visitLabel(org.objectweb.asm.Label label)
      Overrides:
      visitLabel in class org.objectweb.asm.MethodVisitor
    • visitLdcInsn

      public void visitLdcInsn(Object value)
      Overrides:
      visitLdcInsn in class org.objectweb.asm.MethodVisitor
    • visitIincInsn

      public void visitIincInsn(int varIndex, int increment)
      Overrides:
      visitIincInsn in class org.objectweb.asm.MethodVisitor
    • visitTableSwitchInsn

      public void visitTableSwitchInsn(int min, int max, org.objectweb.asm.Label dflt, org.objectweb.asm.Label... labels)
      Overrides:
      visitTableSwitchInsn in class org.objectweb.asm.MethodVisitor
    • visitLookupSwitchInsn

      public void visitLookupSwitchInsn(org.objectweb.asm.Label dflt, int[] keys, org.objectweb.asm.Label[] labels)
      Overrides:
      visitLookupSwitchInsn in class org.objectweb.asm.MethodVisitor
    • visitMultiANewArrayInsn

      public void visitMultiANewArrayInsn(String descriptor, int numDimensions)
      Overrides:
      visitMultiANewArrayInsn in class org.objectweb.asm.MethodVisitor
    • visitInsnAnnotation

      public org.objectweb.asm.AnnotationVisitor visitInsnAnnotation(int typeRef, org.objectweb.asm.TypePath typePath, String descriptor, boolean visible)
      Overrides:
      visitInsnAnnotation in class org.objectweb.asm.MethodVisitor
    • visitTryCatchBlock

      public void visitTryCatchBlock(org.objectweb.asm.Label start, org.objectweb.asm.Label end, org.objectweb.asm.Label handler, String type)
      Overrides:
      visitTryCatchBlock in class org.objectweb.asm.MethodVisitor
    • visitTryCatchAnnotation

      public org.objectweb.asm.AnnotationVisitor visitTryCatchAnnotation(int typeRef, org.objectweb.asm.TypePath typePath, String descriptor, boolean visible)
      Overrides:
      visitTryCatchAnnotation in class org.objectweb.asm.MethodVisitor
    • visitLocalVariable

      public void visitLocalVariable(String name, String descriptor, String signature, org.objectweb.asm.Label start, org.objectweb.asm.Label end, int index)
      Overrides:
      visitLocalVariable in class org.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, String descriptor, boolean visible)
      Overrides:
      visitLocalVariableAnnotation in class org.objectweb.asm.MethodVisitor
    • visitLineNumber

      public void visitLineNumber(int line, org.objectweb.asm.Label start)
      Overrides:
      visitLineNumber in class org.objectweb.asm.MethodVisitor
    • visitMaxs

      public void visitMaxs(int maxStack, int maxLocals)
      Overrides:
      visitMaxs in class org.objectweb.asm.MethodVisitor
    • visitEnd

      public void visitEnd()
      Overrides:
      visitEnd in class org.objectweb.asm.MethodVisitor