Class InstrSupport


  • public final class InstrSupport
    extends java.lang.Object
    Constants and utilities for byte code instrumentation.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static int ASM_API_VERSION
      ASM API version
      static int DATAFIELD_ACC
      Access modifiers of the field that stores coverage information of a class.
      static java.lang.String DATAFIELD_DESC
      Data type of the field that stores coverage information for a class ( boolean[]).
      static int DATAFIELD_INTF_ACC
      Access modifiers of the field that stores coverage information of a Java 8 interface.
      static java.lang.String DATAFIELD_NAME
      Name of the field that stores coverage information of a class.
      static int INITMETHOD_ACC
      Access modifiers of the initialization method.
      static java.lang.String INITMETHOD_DESC
      Descriptor of the initialization method.
      static java.lang.String INITMETHOD_NAME
      Name of the initialization method.
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static void assertNotInstrumented​(java.lang.String member, java.lang.String owner)
      Ensures that the given member does not correspond to a internal member created by the instrumentation process.
      static org.objectweb.asm.ClassReader classReaderFor​(byte[] b)
      Creates a ClassReader instance for given bytes of class even if its version not yet supported by ASM.
      static int getVersionMajor​(byte[] b)
      Gets major of bytecode version number from given bytes of class.
      static boolean needsFrames​(int version)
      Determines whether the given class file version requires stackmap frames.
      static void push​(org.objectweb.asm.MethodVisitor mv, int value)
      Generates the instruction to push the given int value on the stack.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • ASM_API_VERSION

        public static final int ASM_API_VERSION
        ASM API version
        See Also:
        Constant Field Values
      • DATAFIELD_NAME

        public static final java.lang.String DATAFIELD_NAME
        Name of the field that stores coverage information of a class.
        See Also:
        Constant Field Values
      • DATAFIELD_ACC

        public static final int DATAFIELD_ACC
        Access modifiers of the field that stores coverage information of a class. According to Java Virtual Machine Specification §6.5.putstatic this field must not be final:

        if the field is final, it must be declared in the current class, and the instruction must occur in the <clinit> method of the current class.

        See Also:
        Constant Field Values
      • DATAFIELD_INTF_ACC

        public static final int DATAFIELD_INTF_ACC
        Access modifiers of the field that stores coverage information of a Java 8 interface. According to Java Virtual Machine Specification §4.5:

        Fields of interfaces must have their ACC_PUBLIC, ACC_STATIC, and ACC_FINAL flags set; they may have their ACC_SYNTHETIC flag set and must not have any of the other flags.

        See Also:
        Constant Field Values
      • DATAFIELD_DESC

        public static final java.lang.String DATAFIELD_DESC
        Data type of the field that stores coverage information for a class ( boolean[]).
        See Also:
        Constant Field Values
      • INITMETHOD_NAME

        public static final java.lang.String INITMETHOD_NAME
        Name of the initialization method.
        See Also:
        Constant Field Values
      • INITMETHOD_DESC

        public static final java.lang.String INITMETHOD_DESC
        Descriptor of the initialization method.
        See Also:
        Constant Field Values
      • INITMETHOD_ACC

        public static final int INITMETHOD_ACC
        Access modifiers of the initialization method.
        See Also:
        Constant Field Values
    • Method Detail

      • getVersionMajor

        public static int getVersionMajor​(byte[] b)
        Gets major of bytecode version number from given bytes of class.
        Parameters:
        b - bytes of class
        Returns:
        version of bytecode
      • needsFrames

        public static boolean needsFrames​(int version)
        Determines whether the given class file version requires stackmap frames.
        Parameters:
        version - class file version
        Returns:
        true if frames are required
      • assertNotInstrumented

        public static void assertNotInstrumented​(java.lang.String member,
                                                 java.lang.String owner)
                                          throws java.lang.IllegalStateException
        Ensures that the given member does not correspond to a internal member created by the instrumentation process. This would mean that the class is already instrumented.
        Parameters:
        member - name of the member to check
        owner - name of the class owning the member
        Throws:
        java.lang.IllegalStateException - thrown if the member has the same name than the instrumentation member
      • push

        public static void push​(org.objectweb.asm.MethodVisitor mv,
                                int value)
        Generates the instruction to push the given int value on the stack. Implementation taken from GeneratorAdapter.push(int).
        Parameters:
        mv - visitor to emit the instruction
        value - the value to be pushed on the stack.
      • classReaderFor

        public static org.objectweb.asm.ClassReader classReaderFor​(byte[] b)
        Creates a ClassReader instance for given bytes of class even if its version not yet supported by ASM.
        Parameters:
        b - bytes of class
        Returns:
        ClassReader