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.
Author:
Eric Bruneton
  • 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

    • 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