Groovy 2.2.0

org.codehaus.groovy.classgen.asm
[Java] Class BytecodeHelper

java.lang.Object
  org.codehaus.groovy.classgen.asm.BytecodeHelper
All Implemented Interfaces:
org.objectweb.asm.Opcodes

public class BytecodeHelper
extends Object

A helper class for bytecode generation with AsmClassGenerator.

Authors:
James Strachan
Bing Ran
Jochen Theodorou
Version:
\$Revision\$


Method Summary
static boolean box(org.objectweb.asm.MethodVisitor mv, ClassNode type)

box top level operand

static boolean box(org.objectweb.asm.MethodVisitor mv, Class type)

Generates the bytecode to autobox the current value on the stack

static void doCast(org.objectweb.asm.MethodVisitor mv, ClassNode type)

static void doCast(org.objectweb.asm.MethodVisitor mv, Class type)

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.

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

static void doReturn(org.objectweb.asm.MethodVisitor mv, ClassNode returnType)

static String formatNameForClassLoading(String name)

load a message on the stack and remove it right away.

static String getClassInternalName(ClassNode t)

static String getClassInternalName(Class t)

static String getClassInternalName(String name)

@return the ASM internal name of the type

static String[] getClassInternalNames(ClassNode[] names)

@return an array of ASM internal names of the type

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 '/'.

static String getGenericsBounds(ClassNode type)

static String getGenericsMethodSignature(MethodNode node)

static String getGenericsSignature(ClassNode node)

static String getMethodDescriptor(ClassNode returnType, Parameter[] parameters)

static String getMethodDescriptor(MethodNode methodNode)

Returns a method descriptor for the given MethodNode.

static String getMethodDescriptor(Class returnType, Class[] paramTypes)

@return the ASM method type descriptor

static String getTypeDescription(Class c)

static String getTypeDescription(ClassNode c)

array types are special: eg.: String[]: classname: [Ljava/lang/String; int[]: [I

static int hashCode(String str)

static boolean isClassLiteralPossible(ClassNode classNode)

Tells if a class node is candidate for class literal bytecode optimization.

static boolean isSameCompilationUnit(ClassNode a, ClassNode b)

Returns true if the two classes share the same compilation unit.

static void load(org.objectweb.asm.MethodVisitor mv, ClassNode type, int idx)

static void negateBoolean(org.objectweb.asm.MethodVisitor mv)

negate a boolean on stack. true->false, false->true

static void pushConstant(org.objectweb.asm.MethodVisitor mv, int value)

static void unbox(org.objectweb.asm.MethodVisitor mv, Class type)

Generates the bytecode to unbox the current value on the stack

static void unbox(org.objectweb.asm.MethodVisitor mv, ClassNode type)

static void visitClassLiteral(org.objectweb.asm.MethodVisitor mv, ClassNode classNode)

Visits a class literal.

 
Methods inherited from class Object
wait, wait, wait, equals, toString, hashCode, getClass, notify, notifyAll
 

Method Detail

box

public static boolean box(org.objectweb.asm.MethodVisitor mv, ClassNode type)
box top level operand


box

public static boolean box(org.objectweb.asm.MethodVisitor mv, Class type)
Generates the bytecode to autobox the current value on the stack


doCast

public static void doCast(org.objectweb.asm.MethodVisitor mv, ClassNode type)


doCast

public static void doCast(org.objectweb.asm.MethodVisitor mv, Class type)


doCastToPrimitive

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


doCastToWrappedType

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


doReturn

public static void doReturn(org.objectweb.asm.MethodVisitor mv, ClassNode returnType)


formatNameForClassLoading

public static String formatNameForClassLoading(String name)
load a message on the stack and remove it right away. Good for put a mark in the generated bytecode for debugging purpose.
Parameters:
msg


getClassInternalName

public static String getClassInternalName(ClassNode t)


getClassInternalName

public static String getClassInternalName(Class t)


getClassInternalName

public static String getClassInternalName(String name)
Returns:
the ASM internal name of the type


getClassInternalNames

public static String[] getClassInternalNames(ClassNode[] names)
Returns:
an array of ASM internal names of the type


getClassLoadingTypeDescription

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


getGenericsBounds

public static String getGenericsBounds(ClassNode type)


getGenericsMethodSignature

public static String getGenericsMethodSignature(MethodNode node)


getGenericsSignature

public static String getGenericsSignature(ClassNode node)


getMethodDescriptor

public static String getMethodDescriptor(ClassNode returnType, Parameter[] parameters)


getMethodDescriptor

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


getMethodDescriptor

public static String getMethodDescriptor(Class returnType, Class[] paramTypes)
Returns:
the ASM method type descriptor


getTypeDescription

public static String getTypeDescription(Class c)


getTypeDescription

public static String getTypeDescription(ClassNode c)
array types are special: eg.: String[]: classname: [Ljava/lang/String; int[]: [I
Returns:
the ASM type description


hashCode

public static int hashCode(String str)


isClassLiteralPossible

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


isSameCompilationUnit

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


load

public static void load(org.objectweb.asm.MethodVisitor mv, ClassNode type, int idx)


negateBoolean

public static void negateBoolean(org.objectweb.asm.MethodVisitor mv)
negate a boolean on stack. true->false, false->true


pushConstant

public static void pushConstant(org.objectweb.asm.MethodVisitor mv, int value)


unbox

public static void unbox(org.objectweb.asm.MethodVisitor mv, Class type)
Generates the bytecode to unbox the current value on the stack


unbox

public static void unbox(org.objectweb.asm.MethodVisitor mv, ClassNode type)


visitClassLiteral

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.


 

Copyright © 2003-2013 The Codehaus. All rights reserved.