org.codehaus.groovy.classgen
Class BytecodeHelper

java.lang.Object
  extended byorg.codehaus.groovy.classgen.BytecodeHelper
All Implemented Interfaces:
org.objectweb.asm.Constants

public class BytecodeHelper
extends java.lang.Object
implements org.objectweb.asm.Constants

A helper class for bytecode generation with AsmClassGenerator.

Version:
$Revision: 1.18 $
Author:
James Strachan, Bing Ran

Field Summary
private  org.objectweb.asm.CodeVisitor cv
           
 
Fields inherited from interface org.objectweb.asm.Constants
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, V1_1, V1_2, V1_3, V1_4, V1_5
 
Constructor Summary
BytecodeHelper(org.objectweb.asm.CodeVisitor cv)
           
 
Method Summary
 void box(java.lang.Class type)
          Generates the bytecode to autobox the current value on the stack
 void box(java.lang.String type)
           
 void boxBoolean()
          convert boolean to Boolean
static java.lang.Class boxOnPrimitive(java.lang.Class cls)
           
 void doCast(java.lang.Class type)
           
 void doCast(java.lang.String type)
           
 void dup()
           
static java.lang.String formatNameForClassLoading(java.lang.String name)
          returns a name that Class.forName() can take.
static java.lang.String getClassInternalName(java.lang.String name)
           
static java.lang.String[] getClassInternalNames(java.lang.String[] names)
           
static java.lang.String getClassRegularName(java.lang.String name)
           
 org.objectweb.asm.CodeVisitor getCodeVisitor()
           
static java.lang.String getMethodDescriptor(java.lang.Class returnType, java.lang.Class[] paramTypes)
           
static java.lang.String getMethodDescriptor(MetaMethod metamethod)
           
static java.lang.String getMethodDescriptor(java.lang.reflect.Method meth)
           
static java.lang.String getMethodDescriptor(java.lang.String returnTypeName, Parameter[] paramTypeNames)
           
static java.lang.String getObjectTypeForPrimitive(java.lang.String type)
           
static java.lang.String getTypeDescription(java.lang.Class type)
           
static java.lang.String getTypeDescription(java.lang.String name)
          array types are special: eg.: String[]: classname: [Ljava/lang/String; int[]: [I
 void invoke(java.lang.reflect.Method meth)
          create the bytecode to invoke a method
static boolean isPrimitiveType(java.lang.String type)
           
 void load(java.lang.String type, int idx)
           
 void load(Variable v)
           
(package private)  void loadConstant(java.lang.Object value)
          load the constant on the operand stack.
 void loadThis()
           
 void loadVar(Variable variable, boolean holder)
          load the value of the variable on the operand stack.
 void mark(java.lang.String msg)
          load a message on the stack and remove it right away.
protected  void pushConstant(boolean value)
           
protected  void pushConstant(int value)
           
 void putField(FieldNode fld)
           
 void putField(FieldNode fld, java.lang.String ownerName)
           
 void quickBoxIfNecessary(java.lang.Class cls)
          box the primitive value on the stack
 void quickUnboxIfNecessary(java.lang.Class cls)
          unbox the ref on the stack
 void store(java.lang.String type, int idx)
           
 void store(Variable v)
           
 void store(Variable v, boolean markStart)
           
 void storeVar(Variable variable, boolean holder)
           
 void unbox(java.lang.Class type)
          Generates the bytecode to unbox the current value on the stack
 void unbox(java.lang.String type)
          Generates the bytecode to unbox the current value on the stack
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

cv

private org.objectweb.asm.CodeVisitor cv
Constructor Detail

BytecodeHelper

public BytecodeHelper(org.objectweb.asm.CodeVisitor cv)
Method Detail

getCodeVisitor

public org.objectweb.asm.CodeVisitor getCodeVisitor()

box

public void box(java.lang.Class type)
Generates the bytecode to autobox the current value on the stack


quickBoxIfNecessary

public void quickBoxIfNecessary(java.lang.Class cls)
box the primitive value on the stack

Parameters:
cls -

quickUnboxIfNecessary

public void quickUnboxIfNecessary(java.lang.Class cls)
unbox the ref on the stack

Parameters:
cls -

box

public void box(java.lang.String type)

unbox

public void unbox(java.lang.Class type)
Generates the bytecode to unbox the current value on the stack


unbox

public void unbox(java.lang.String type)
Generates the bytecode to unbox the current value on the stack


isPrimitiveType

public static boolean isPrimitiveType(java.lang.String type)

getTypeDescription

public static java.lang.String getTypeDescription(java.lang.String name)
array types are special: eg.: String[]: classname: [Ljava/lang/String; int[]: [I

Returns:
the ASM type description

getClassInternalName

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

getClassRegularName

public static java.lang.String getClassRegularName(java.lang.String name)
Returns:
the regular class name of the type

getMethodDescriptor

public static java.lang.String getMethodDescriptor(java.lang.String returnTypeName,
                                                   Parameter[] paramTypeNames)
Returns:
the ASM method type descriptor

getMethodDescriptor

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

getMethodDescriptor

public static java.lang.String getMethodDescriptor(java.lang.reflect.Method meth)

getTypeDescription

public static java.lang.String getTypeDescription(java.lang.Class type)

getClassInternalNames

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

pushConstant

protected void pushConstant(boolean value)

pushConstant

protected void pushConstant(int value)

doCast

public void doCast(java.lang.String type)

doCast

public void doCast(java.lang.Class type)

load

public void load(java.lang.String type,
                 int idx)

load

public void load(Variable v)

store

public void store(java.lang.String type,
                  int idx)

store

public void store(Variable v,
                  boolean markStart)

store

public void store(Variable v)

getObjectTypeForPrimitive

public static java.lang.String getObjectTypeForPrimitive(java.lang.String type)

loadConstant

void loadConstant(java.lang.Object value)
load the constant on the operand stack. primitives auto-boxed.


loadVar

public void loadVar(Variable variable,
                    boolean holder)
load the value of the variable on the operand stack. unbox it if it's a reference

Parameters:
variable -
holder -

storeVar

public void storeVar(Variable variable,
                     boolean holder)

putField

public void putField(FieldNode fld)

putField

public void putField(FieldNode fld,
                     java.lang.String ownerName)

loadThis

public void loadThis()

boxOnPrimitive

public static java.lang.Class boxOnPrimitive(java.lang.Class cls)

invoke

public void invoke(java.lang.reflect.Method meth)
create the bytecode to invoke a method

Parameters:
meth - the method object to invoke

boxBoolean

public void boxBoolean()
convert boolean to Boolean


getMethodDescriptor

public static java.lang.String getMethodDescriptor(MetaMethod metamethod)

mark

public void mark(java.lang.String msg)
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 -

formatNameForClassLoading

public static java.lang.String formatNameForClassLoading(java.lang.String name)
returns a name that Class.forName() can take. Notablely for arrays: [I, [Ljava.lang.String; etc Regular object type: java.lang.String

Parameters:
name -
Returns:

dup

public void dup()


Copyright © 2003-2005 The Codehaus. All Rights Reserved.