org.omegahat.Environment.Interpreter
Class CastFunctionCall

java.lang.Object
  |
  +--org.omegahat.Environment.Compile.DynamicCompiler
        |
        +--org.omegahat.Environment.GUITools.EvaluableInterfaceGenerator
              |
              +--org.omegahat.Environment.Interpreter.CastFunctionCall
All Implemented Interfaces:
jas.RuntimeConstants

public class CastFunctionCall
extends EvaluableInterfaceGenerator

This class is used to invoke interpreted calls to methods in a class other than the source object's own class, implemented by dynamically generating byte-code to perform the call. This is when evaluating objects of class MethodCall when the qualifier is of class CastExpression. The usual reflectance facilities won't work as the internal JVM implementation of the Method.invoke method uses invokevirtual


Field Summary
static int Counter
          Counter for the number of times this class is utilized, providing a unique identifier for the newly generated class to avoid duplicate loading.
static java.lang.String IntermediateMethodName
          The name of the method in the newly generated intermediate class that performs the call of interest.
protected  java.lang.Object value
          The value returned from the call of interest implemented by the class generated from an instance of this one.
 
Fields inherited from class org.omegahat.Environment.GUITools.EvaluableInterfaceGenerator
interfaces, separator, signaturePrefix, signatureSuffix, useSuperClassConstructors
 
Fields inherited from class org.omegahat.Environment.Compile.DynamicCompiler
BOTH, classDef, className, debug, GET, output, packageName, SET, superClassName
 
Fields inherited from interface jas.RuntimeConstants
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_SUPER, ACC_SYNCHRONIZED, ACC_TRANSIENT, ACC_VOLATILE, CONSTANT_CLASS, CONSTANT_DOUBLE, CONSTANT_FIELD, CONSTANT_FLOAT, CONSTANT_INTEGER, CONSTANT_INTERFACEMETHOD, CONSTANT_LONG, CONSTANT_METHOD, CONSTANT_NAMEANDTYPE, CONSTANT_STRING, CONSTANT_UNICODE, CONSTANT_UTF8, JAVA_MAGIC, JAVA_MINOR_VERSION, JAVA_VERSION, opc_aaload, opc_aastore, opc_aconst_null, opc_aload, opc_aload_0, opc_aload_1, opc_aload_2, opc_aload_3, opc_anewarray, opc_areturn, opc_arraylength, opc_astore, opc_astore_0, opc_astore_1, opc_astore_2, opc_astore_3, opc_athrow, opc_baload, opc_bastore, opc_bipush, opc_breakpoint, opc_caload, opc_castore, opc_checkcast, opc_d2f, opc_d2i, opc_d2l, opc_dadd, opc_daload, opc_dastore, opc_dcmpg, opc_dcmpl, opc_dconst_0, opc_dconst_1, opc_ddiv, opc_dead, opc_dload, opc_dload_0, opc_dload_1, opc_dload_2, opc_dload_3, opc_dmul, opc_dneg, opc_drem, opc_dreturn, opc_dstore, opc_dstore_0, opc_dstore_1, opc_dstore_2, opc_dstore_3, opc_dsub, opc_dup, opc_dup_x1, opc_dup_x2, opc_dup2, opc_dup2_x1, opc_dup2_x2, opc_f2d, opc_f2i, opc_f2l, opc_fadd, opc_faload, opc_fastore, opc_fcmpg, opc_fcmpl, opc_fconst_0, opc_fconst_1, opc_fconst_2, opc_fdiv, opc_fload, opc_fload_0, opc_fload_1, opc_fload_2, opc_fload_3, opc_fmul, opc_fneg, opc_frem, opc_freturn, opc_fstore, opc_fstore_0, opc_fstore_1, opc_fstore_2, opc_fstore_3, opc_fsub, opc_getfield, opc_getstatic, opc_goto, opc_goto_w, opc_i2b, opc_i2c, opc_i2d, opc_i2f, opc_i2l, opc_i2s, opc_iadd, opc_iaload, opc_iand, opc_iastore, opc_iconst_0, opc_iconst_1, opc_iconst_2, opc_iconst_3, opc_iconst_4, opc_iconst_5, opc_iconst_m1, opc_idiv, opc_if_acmpeq, opc_if_acmpne, opc_if_icmpeq, opc_if_icmpge, opc_if_icmpgt, opc_if_icmple, opc_if_icmplt, opc_if_icmpne, opc_ifeq, opc_ifge, opc_ifgt, opc_ifle, opc_iflt, opc_ifne, opc_ifnonnull, opc_ifnull, opc_iinc, opc_iload, opc_iload_0, opc_iload_1, opc_iload_2, opc_iload_3, opc_imul, opc_ineg, opc_instanceof, opc_int2byte, opc_int2char, opc_int2short, opc_invokeinterface, opc_invokenonvirtual, opc_invokespecial, opc_invokestatic, opc_invokevirtual, opc_ior, opc_irem, opc_ireturn, opc_ishl, opc_ishr, opc_istore, opc_istore_0, opc_istore_1, opc_istore_2, opc_istore_3, opc_isub, opc_iushr, opc_ixor, opc_jsr, opc_jsr_w, opc_l2d, opc_l2f, opc_l2i, opc_label, opc_ladd, opc_laload, opc_land, opc_lastore, opc_lcmp, opc_lconst_0, opc_lconst_1, opc_ldc, opc_ldc_w, opc_ldc2_w, opc_ldiv, opc_lload, opc_lload_0, opc_lload_1, opc_lload_2, opc_lload_3, opc_lmul, opc_lneg, opc_lookupswitch, opc_lor, opc_lrem, opc_lreturn, opc_lshl, opc_lshr, opc_lstore, opc_lstore_0, opc_lstore_1, opc_lstore_2, opc_lstore_3, opc_lsub, opc_lushr, opc_lxor, opc_monitorenter, opc_monitorexit, opc_multianewarray, opc_new, opc_newarray, opc_nop, opc_pop, opc_pop2, opc_putfield, opc_putstatic, opc_ret, opc_return, opc_saload, opc_sastore, opc_sipush, opc_swap, opc_tableswitch, opc_try, opc_wide, opc_xxxunusedxxx, opcLengths, opcNames, T_BOOLEAN, T_BYTE, T_CHAR, T_CLASS, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT
 
Constructor Summary
CastFunctionCall(java.lang.reflect.Method method, java.lang.Object source, java.lang.Object[] args, Evaluator evaluator, boolean call)
           
CastFunctionCall(java.lang.reflect.Method method, java.lang.Object source, java.lang.Object[] args, Evaluator evaluator, boolean call, java.lang.String superClass)
           
 
Method Summary
 java.lang.Object callMethod(java.lang.String methodName, java.lang.Object source, java.lang.Object[] realArgs, Evaluator evaluator)
           
 void makeClass(java.lang.reflect.Method m)
           
 boolean makeMethod(java.lang.reflect.Method method)
          Creates the static method in the new class which performs the actual call of interest to the target class.
 java.lang.Object value()
           
 java.lang.Object value(java.lang.Object value)
           
 
Methods inherited from class org.omegahat.Environment.GUITools.EvaluableInterfaceGenerator
addConstructor, addConstructors, addDispatchCall, addInterface, addMethod, addTarget, addTarget, createArgumentList, createArgumentList, createArgumentList, createArgumentList, derivedClassName, getStackSize, init, interfaces, make, make, numLocalVariables, separator, superClassConstructors, superClassConstructors
 
Methods inherited from class org.omegahat.Environment.Compile.DynamicCompiler
accessorBody, accessorBody, addConstructor, addField, addField, addField, addField, addField, addField, addFieldAccessors, addFieldAccessors, addFieldAccessors, addInheritedConstructors, addReturn, addReturn, classDef, classDef, className, className, className, className, Debug, Debug, file, file, findClass, findClass, initClassDef, loadCode, mapPrimitive, packageName, packageName, primitiveLoadOp, primitiveToClass, returnPrimitive, returnPrimitive, superClassName, superClassName, warning, write, write, write, write, write
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

Counter

public static int Counter
Counter for the number of times this class is utilized, providing a unique identifier for the newly generated class to avoid duplicate loading.

IntermediateMethodName

public static java.lang.String IntermediateMethodName
The name of the method in the newly generated intermediate class that performs the call of interest.

value

protected java.lang.Object value
The value returned from the call of interest implemented by the class generated from an instance of this one.
Constructor Detail

CastFunctionCall

public CastFunctionCall(java.lang.reflect.Method method,
                        java.lang.Object source,
                        java.lang.Object[] args,
                        Evaluator evaluator,
                        boolean call)
                 throws java.lang.Exception

CastFunctionCall

public CastFunctionCall(java.lang.reflect.Method method,
                        java.lang.Object source,
                        java.lang.Object[] args,
                        Evaluator evaluator,
                        boolean call,
                        java.lang.String superClass)
                 throws java.lang.Exception
Method Detail

makeClass

public void makeClass(java.lang.reflect.Method m)

makeMethod

public boolean makeMethod(java.lang.reflect.Method method)
Creates the static method in the new class which performs the actual call of interest to the target class.

callMethod

public java.lang.Object callMethod(java.lang.String methodName,
                                   java.lang.Object source,
                                   java.lang.Object[] realArgs,
                                   Evaluator evaluator)
                            throws java.lang.Exception

value

public java.lang.Object value()

value

public java.lang.Object value(java.lang.Object value)