Package bsh
Class ClassGeneratorUtil
java.lang.Object
bsh.ClassGeneratorUtil
- All Implemented Interfaces:
bsh.org.objectweb.asm.Constants
ClassGeneratorUtil utilizes the ASM (www.objectweb.org) bytecode generator
by Eric Bruneton in order to generate class "stubs" for BeanShell at
runtime.
Stub classes contain all of the fields of a BeanShell scripted class
as well as two "callback" references to BeanShell namespaces: one for
static methods and one for instance methods. Methods of the class are
delegators which invoke corresponding methods on either the static or
instance bsh object and then unpack and return the results. The static
namespace utilizes a static import to delegate variable access to the
class' static fields. The instance namespace utilizes a dynamic import
(i.e. mixin) to delegate variable access to the class' instance variables.
Constructors for the class delegate to the static initInstance() method of
ClassGeneratorUtil to initialize new instances of the object. initInstance()
invokes the instance intializer code (init vars and instance blocks) and
then delegates to the corresponding scripted constructor method in the
instance namespace. Constructors contain special switch logic which allows
the BeanShell to control the calling of alternate constructors (this() or
super() references) at runtime.
Specially named superclass delegator methods are also generated in order to
allow BeanShell to access overridden methods of the superclass (which
reflection does not normally allow).
- Author:
- Pat Niemeyer
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic class
A ConstructorArgs object holds evaluated arguments for a constructor call as well as the index of a possible alternate selector to invoke. -
Field Summary
Fields inherited from interface bsh.org.objectweb.asm.Constants
AALOAD, AASTORE, ACC_ABSTRACT, ACC_DEPRECATED, 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_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
-
Constructor Summary
ConstructorsConstructorDescriptionClassGeneratorUtil
(Modifiers classModifiers, String className, String packageName, Class superClass, Class[] interfaces, Variable[] vars, DelayedEvalBshMethod[] bshmethods, NameSpace classStaticNameSpace, boolean isInterface) -
Method Summary
Modifier and TypeMethodDescriptionbyte[]
Generate the class bytecode for this class.getConstructorArgs
(String superClassName, This classStaticThis, Object[] consArgs, int index) Evaluate the arguments (if any) for the constructor specified by the constructor index.static void
initInstance
(GeneratedClass instance, String className, Object[] args) Initialize an instance of the class.
-
Constructor Details
-
Method Details
-
generateClass
public byte[] generateClass()Generate the class bytecode for this class. -
getConstructorArgs
public static ClassGeneratorUtil.ConstructorArgs getConstructorArgs(String superClassName, This classStaticThis, Object[] consArgs, int index) Evaluate the arguments (if any) for the constructor specified by the constructor index. Return the ConstructorArgs object which contains the actual arguments to the alternate constructor and also the index of that constructor for the constructor switch.- Parameters:
consArgs
- the arguments to the constructor. These are necessary in the evaluation of the alt constructor args. e.g. Foo(a) { super(a); }- Returns:
- the ConstructorArgs object containing a constructor selector and evaluated arguments for the alternate constructor
-
initInstance
Initialize an instance of the class. This method is called from the generated class constructor to evaluate the instance initializer and scripted constructor in the instance namespace.
-