[Java] Class BytecodeHelper
- org.codehaus.groovy.classgen.asm.BytecodeHelper
- All Implemented Interfaces and Traits:
- org.objectweb.asm.Opcodes
public class BytecodeHelper extends Object implements org.objectweb.asm.Opcodes
A helper class for bytecode generation with AsmClassGenerator.
Methods Summary
Type Params | Return Type | Name and description |
---|---|---|
public static boolean |
box(org.objectweb.asm.MethodVisitor mv, ClassNode type) Generates the bytecode to autobox the current value on the stack. | |
public static boolean |
box(org.objectweb.asm.MethodVisitor mv, Class type) Generates the bytecode to autobox the current value on the stack. | |
public static void |
convertPrimitiveToBoolean(org.objectweb.asm.MethodVisitor mv, ClassNode type) Converts a primitive type to boolean. | |
public static void |
doCast(org.objectweb.asm.MethodVisitor mv, ClassNode type) | |
public static void |
doCast(org.objectweb.asm.MethodVisitor mv, Class type) | |
public static void |
doCastToPrimitive(org.objectweb.asm.MethodVisitor mv, ClassNode sourceType, ClassNode targetType) Given a wrapped number type (Byte, Integer, Short, ...), generates bytecode to convert it to a primitive number (int, long, double) using calls to wrapped. | |
public static void |
doCastToWrappedType(org.objectweb.asm.MethodVisitor mv, ClassNode sourceType, ClassNode targetType) Given a primitive number type (byte, integer, short, ...), generates bytecode to convert it to a wrapped number (Integer, Long, Double) using calls to [WrappedType].valueOf | |
public static void |
doReturn(org.objectweb.asm.MethodVisitor mv, ClassNode type) | |
public static String |
formatNameForClassLoading(String name) returns a name that Class.forName() can take. | |
public static String |
getClassInternalName(ClassNode t)
| |
public static String |
getClassInternalName(Class t)
| |
public static String |
getClassInternalName(String name)
| |
public static String[] |
getClassInternalNames(ClassNode[] names)
| |
public static String |
getClassLoadingTypeDescription(ClassNode c) array types are special: eg.: String[]: classname: [Ljava.lang.String; Object: classname: java.lang.Object int[] : classname: [I unlike getTypeDescription '.' is not replaced by '/'. | |
public static String |
getGenericsBounds(ClassNode type) | |
public static String |
getGenericsMethodSignature(MethodNode node) | |
public static String |
getGenericsSignature(ClassNode node) | |
public static String |
getMethodDescriptor(MethodNode methodNode) Returns a method descriptor for the given MethodNode. | |
public static String |
getMethodDescriptor(ClassNode returnType, Parameter[] parameters)
| |
public static String |
getMethodDescriptor(ClassNode returnType, ClassNode[] parameterTypes)
| |
public static String |
getMethodDescriptor(Class returnType, Class[] paramTypes)
| |
public static String |
getTypeDescription(Class c) | |
public static String |
getTypeDescription(ClassNode c) array types are special: eg.: String[]: classname: [Ljava/lang/String; int[]: [I | |
public static int |
hashCode(String str) Computes a hash code for a string. | |
public static boolean |
isClassLiteralPossible(ClassNode classNode) Tells if a class node is candidate for class literal bytecode optimization. | |
public static boolean |
isSameCompilationUnit(ClassNode a, ClassNode b) Returns true if the two classes share the same compilation unit. | |
public static void |
load(org.objectweb.asm.MethodVisitor mv, ClassNode type, int idx) | |
public static void |
negateBoolean(org.objectweb.asm.MethodVisitor mv) Negate a boolean on stack. | |
public static void |
pushConstant(org.objectweb.asm.MethodVisitor mv, int value) | |
public static void |
store(org.objectweb.asm.MethodVisitor mv, ClassNode type, int idx) | |
public static void |
unbox(org.objectweb.asm.MethodVisitor mv, ClassNode type) Generates the bytecode to unbox the current value on the stack. | |
public static void |
unbox(org.objectweb.asm.MethodVisitor mv, Class type) Generates the bytecode to unbox the current value on the stack. | |
public static void |
visitClassLiteral(org.objectweb.asm.MethodVisitor mv, ClassNode classNode) Visits a class literal. |
Inherited Methods Summary
Methods inherited from class | Name |
---|---|
class Object | wait, wait, wait, equals, toString, hashCode, getClass, notify, notifyAll |
Method Detail
@Deprecated public static boolean box(org.objectweb.asm.MethodVisitor mv, ClassNode type)
Generates the bytecode to autobox the current value on the stack.
@Deprecated public static boolean box(org.objectweb.asm.MethodVisitor mv, Class type)
Generates the bytecode to autobox the current value on the stack.
public static void convertPrimitiveToBoolean(org.objectweb.asm.MethodVisitor mv, ClassNode type)
Converts a primitive type to boolean.
- Parameters:
-
mv
- method visitor -
type
- primitive type to convert
public static void doCast(org.objectweb.asm.MethodVisitor mv, ClassNode type)
public static void doCast(org.objectweb.asm.MethodVisitor mv, Class type)
public static void doCastToPrimitive(org.objectweb.asm.MethodVisitor mv, ClassNode sourceType, ClassNode targetType)
Given a wrapped number type (Byte, Integer, Short, ...), generates bytecode to convert it to a primitive number (int, long, double) using calls to wrapped.[targetType]Value()
- Parameters:
-
mv
- method visitor -
sourceType
- the wrapped number type -
targetType
- the primitive target type
public static void doCastToWrappedType(org.objectweb.asm.MethodVisitor mv, ClassNode sourceType, ClassNode targetType)
Given a primitive number type (byte, integer, short, ...), generates bytecode to convert it to a wrapped number (Integer, Long, Double) using calls to [WrappedType].valueOf
- Parameters:
-
mv
- method visitor -
sourceType
- the primitive number type -
targetType
- the wrapped target type
public static void doReturn(org.objectweb.asm.MethodVisitor mv, ClassNode type)
public static String formatNameForClassLoading(String name)
returns a name that Class.forName() can take. Notably for arrays: [I, [Ljava.lang.String; etc Regular object type: java.lang.String
public static String getClassInternalName(ClassNode t)
- Returns:
- the ASM internal name of the type
public static String getClassInternalName(Class t)
- Returns:
- the ASM internal name of the type
public static String getClassInternalName(String name)
- Returns:
- the ASM internal name of the type
public static String[] getClassInternalNames(ClassNode[] names)
- Returns:
- an array of ASM internal names of the type
public static String getClassLoadingTypeDescription(ClassNode c)
array types are special: eg.: String[]: classname: [Ljava.lang.String; Object: classname: java.lang.Object int[] : classname: [I unlike getTypeDescription '.' is not replaced by '/'. it seems that makes problems for the class loading if '.' is replaced by '/'
- Returns:
- the ASM type description for class loading
public static String getGenericsBounds(ClassNode type)
public static String getGenericsMethodSignature(MethodNode node)
public static String getGenericsSignature(ClassNode node)
public static String getMethodDescriptor(MethodNode methodNode)
Returns a method descriptor for the given MethodNode.
- Parameters:
-
methodNode
- the method node for which to create the descriptor
- Returns:
- a method descriptor as defined in section JVMS section 4.3.3
public static String getMethodDescriptor(ClassNode returnType, Parameter[] parameters)
- Returns:
- the ASM method type descriptor
public static String getMethodDescriptor(ClassNode returnType, ClassNode[] parameterTypes)
- Returns:
- the ASM method type descriptor
public static String getMethodDescriptor(Class returnType, Class[] paramTypes)
- Returns:
- the ASM method type descriptor
public static String getTypeDescription(Class c)
public static String getTypeDescription(ClassNode c)
array types are special: eg.: String[]: classname: [Ljava/lang/String; int[]: [I
- Returns:
- the ASM type description
public static int hashCode(String str)
Computes a hash code for a string. The purpose of this hashcode is to be constant independently of the JDK being used.
- Parameters:
-
str
- the string for which to compute the hashcode
- Returns:
- hashcode of the string
public static boolean isClassLiteralPossible(ClassNode classNode)
Tells if a class node is candidate for class literal bytecode optimization. If so, bytecode may use LDC instructions instead of static constant Class fields to retrieve class literals.
- Parameters:
-
classNode
- the classnode for which we want to know if bytecode optimization is possible
- Returns:
- true if the bytecode can be optimized
public static boolean isSameCompilationUnit(ClassNode a, ClassNode b)
Returns true if the two classes share the same compilation unit.
- Parameters:
-
a
- class a -
b
- class b
- Returns:
- true if both classes share the same compilation unit
public static void load(org.objectweb.asm.MethodVisitor mv, ClassNode type, int idx)
public static void negateBoolean(org.objectweb.asm.MethodVisitor mv)
Negate a boolean on stack.
public static void pushConstant(org.objectweb.asm.MethodVisitor mv, int value)
public static void store(org.objectweb.asm.MethodVisitor mv, ClassNode type, int idx)
public static void unbox(org.objectweb.asm.MethodVisitor mv, ClassNode type)
Generates the bytecode to unbox the current value on the stack.
public static void unbox(org.objectweb.asm.MethodVisitor mv, Class type)
Generates the bytecode to unbox the current value on the stack.
public static void visitClassLiteral(org.objectweb.asm.MethodVisitor mv, ClassNode classNode)
Visits a class literal. If the type of the classnode is a primitive type, the generated bytecode will be a GETSTATIC Integer.TYPE. If the classnode is not a primitive type, we will generate a LDC instruction.
© 2003-2020 The Apache Software Foundation
Licensed under the Apache license.
https://docs.groovy-lang.org/3.0.7/html/gapi/org/codehaus/groovy/classgen/asm/BytecodeHelper.html