Class InstrSupport
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final int
ASM API version(package private) static final int
Access flags of the interface initialization method generated by JaCoCo.(package private) static final String
Descriptor of the interface initialization method.(package private) static final String
Name of the interface initialization method.static final int
Access modifiers of the field that stores coverage information of a class.static final String
Data type of the field that stores coverage information for a class (boolean[]
).static final int
Access modifiers of the field that stores coverage information of a Java 8 interface.static final String
Name of the field that stores coverage information of a class.static final int
Access modifiers of the initialization method.static final String
Descriptor of the initialization method.static final String
Name of the initialization method. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic void
assertNotInstrumented
(String member, 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 aClassReader
instance for given bytes of class even if its version not yet supported by ASM.static int
getMajorVersion
(byte[] b) Gets major version number from given bytes of class (unsigned two bytes at offset 6).static int
getMajorVersion
(org.objectweb.asm.ClassReader reader) Gets major version number from givenClassReader
.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.static void
setMajorVersion
(int majorVersion, byte[] b) Sets major version number in given bytes of class (unsigned two bytes at offset 6).
-
Field Details
-
ASM_API_VERSION
public static final int ASM_API_VERSIONASM API version- See Also:
-
DATAFIELD_NAME
Name of the field that stores coverage information of a class.- See Also:
-
DATAFIELD_ACC
public static final int DATAFIELD_ACCAccess 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:
-
DATAFIELD_INTF_ACC
public static final int DATAFIELD_INTF_ACCAccess 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:
-
DATAFIELD_DESC
Data type of the field that stores coverage information for a class (boolean[]
).- See Also:
-
INITMETHOD_NAME
Name of the initialization method.- See Also:
-
INITMETHOD_DESC
Descriptor of the initialization method.- See Also:
-
INITMETHOD_ACC
public static final int INITMETHOD_ACCAccess modifiers of the initialization method.- See Also:
-
CLINIT_NAME
Name of the interface initialization method. According to Java Virtual Machine Specification §2.9:A class or interface has at most one class or interface initialization method and is initialized by invoking that method. The initialization method of a class or interface has the special name
<clinit>
, takes no arguments, and is void.Other methods named
<clinit>
in a class file are of no consequence. They are not class or interface initialization methods. They cannot be invoked by any Java Virtual Machine instruction and are never invoked by the Java Virtual Machine itself.In a class file whose version number is 51.0 or above, the method must additionally have its ACC_STATIC flag set in order to be the class or interface initialization method.
This requirement was introduced in Java SE 7. In a class file whose version number is 50.0 or below, a method named
<clinit>
that is void and takes no arguments is considered the class or interface initialization method regardless of the setting of its ACC_STATIC flag.Class and interface initialization methods are called implicitly by the Java Virtual Machine. The value of their access_flags item is ignored except for the setting of the ACC_STRICT flag.
- See Also:
-
CLINIT_DESC
Descriptor of the interface initialization method.- See Also:
-
CLINIT_ACC
static final int CLINIT_ACCAccess flags of the interface initialization method generated by JaCoCo.- See Also:
-
-
Constructor Details
-
InstrSupport
private InstrSupport()
-
-
Method Details
-
getMajorVersion
public static int getMajorVersion(byte[] b) Gets major version number from given bytes of class (unsigned two bytes at offset 6).- Parameters:
b
- bytes of class- Returns:
- major version of bytecode
- See Also:
-
setMajorVersion
public static void setMajorVersion(int majorVersion, byte[] b) Sets major version number in given bytes of class (unsigned two bytes at offset 6).- Parameters:
majorVersion
- major version of bytecode to setb
- bytes of class- See Also:
-
getMajorVersion
public static int getMajorVersion(org.objectweb.asm.ClassReader reader) Gets major version number from givenClassReader
.- Parameters:
reader
- reader to get information about the class- Returns:
- major version of bytecode
- See Also:
-
ClassReader(byte[], int, int)
getMajorVersion(byte[])
-
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
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 checkowner
- name of the class owning the member- Throws:
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 fromGeneratorAdapter.push(int)
.- Parameters:
mv
- visitor to emit the instructionvalue
- the value to be pushed on the stack.
-
classReaderFor
public static org.objectweb.asm.ClassReader classReaderFor(byte[] b) Creates aClassReader
instance for given bytes of class even if its version not yet supported by ASM.- Parameters:
b
- bytes of class- Returns:
ClassReader
-