|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Object
|
+--org.omegahat.Environment.Compile.DynamicCompiler
|
+--org.omegahat.Environment.GUITools.EvaluableInterfaceGenerator
|
+--org.omegahat.Environment.Language.UserClasses.UserClassGenerator
Used to define and create new Java classes, each of which implements
an Omeghat user-level class via interpreted methods and constructors.
An object of this class is usually instantiated with
a ClassDefinition
object (which should have been evaluated) and this object becomes a
dedicated compiler for this definition. It generates the Java byte-code
containing fields, methods and constructors which are implemented by
calls to the appropriate functions.
| Field Summary | |
protected ClassDefinition |
omegaClassDef
A reference to the object which was used to define the user-level class before being compiled by this object. |
| 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 | |
UserClassGenerator()
Default constructor. |
|
UserClassGenerator(ClassDefinition def)
Constructor taking a ClassDefinition object, which is stored in the
omegaClassDef field for future processing
via a call to make(). |
|
UserClassGenerator(ClassDefinition def,
boolean make)
Constructor taking the partially processed definition of the class, storing it in omegaClassDef
and then optionally generating the Java byte code for the new Java class
used to implement this class defintion. |
|
UserClassGenerator(java.lang.String name,
java.lang.String baseClass,
java.lang.String[] interfaces)
Specify the name of the class to be created, the name of the base class which it will extend and a list of the interfaces classes it will implement. |
|
| Method Summary | |
boolean |
addClassMethod(java.lang.String name,
java.lang.String sig,
Function f)
Method that defines the method for an interpreted function by providing its skeleton and stub for calling the appropriate function. |
jas.CodeAttr |
addConstructor(java.lang.reflect.Constructor constructor)
Add the constructor inherited from the base class, potentially ignoring it if the user-class has overridden it. |
jas.CodeAttr |
addConstructor(java.lang.String sig,
Function constructor)
Add a constructor corresponding to the specified Function definition, arranging to call this function. |
boolean |
addConstructors()
Add the default constructors to the class being defined, either copying those inherited from the parent/base class or providing our own which take a Function
and Evaluator
or just a function. |
boolean |
addEvaluatorField()
Adds the field to store the Evaluator
to use when evaluating an Omegahat function,
and also generates the accessor methods for this field, but with a method returning
a default evaluator from the get method. |
boolean |
addEvaluatorGetMethod(java.lang.String name,
java.lang.String className)
Generates the method to get the Evaluator
associated with the instance of the new class, and if it is null
to obtain this from the Omegahat System.Globals
class which stores the default evaluator. |
boolean |
addEvaluatorGetMethod(java.lang.String name,
java.lang.String className,
int permission)
|
boolean |
addLocalField(LocalVariable var)
Method to add a field to the new class based on the specification in LocalVariable. |
protected boolean |
addStaticFields()
Add the protected but also static field omegahatMethods of class MethodsCollection and
also accessor methods for it. |
boolean |
addStaticInitializer()
This creates a static method in the new class that is called when the class is initialized (first used) and attempts to locate the constructor and method tables for the class. |
int |
createFields(List vars)
|
int |
createMethods(MethodsCollection methods)
|
boolean |
createMethods(java.lang.String name,
Method table)
|
boolean |
make()
The default method to compile the Java class specified by the contents of omegaClassDef, and adding the default class initialization
for the newly defined class which loads the function and constructor tables from
serialized objects identified by the Class resources. |
boolean |
make(boolean classInitialization)
Compile the class definition specified in the current value of omegaClassDef. |
boolean |
make(ClassDefinition def,
boolean initializeClass)
Generate the Java byte-code defining the user-level class, |
java.lang.reflect.Method |
matchOverriddenMethod(Function f)
|
short |
modifier(Modifier mod)
Compute the appropriate Jas modifier from the Omegahat modifier, returning "protected" if mod is null. |
short |
modifier(Modifier mod,
short defaultMod)
Compute the Jas modifier from the Omegahat modifier "expression" object, using the specified default if the modifier is "missing" ( null,
usually a result of not being in the parsed input). |
ClassDefinition |
omegaClassDef()
Accessor to the omegaClassDef field which stores
the parsed and process input for the class specification before it was compiled. |
ClassDefinition |
omegaClassDef(ClassDefinition d)
|
boolean |
overrides(java.lang.reflect.Constructor constructor)
|
java.lang.Class |
returnType(Function f)
Determine the appropriate return type from the specified function definition by consulting it and also the inherited methods of the same name from the base class and their return type. |
java.lang.String |
superClassName()
Retrieves the name of the base class from which we want the new class to inherit, and if this is null, return
java/lang/Object. |
| Methods inherited from class org.omegahat.Environment.GUITools.EvaluableInterfaceGenerator |
addConstructor, addDispatchCall, addInterface, addMethod, addTarget, addTarget, createArgumentList, createArgumentList, createArgumentList, createArgumentList, derivedClassName, getStackSize, init, interfaces, make, numLocalVariables, separator, superClassConstructors, superClassConstructors |
| Methods inherited from class org.omegahat.Environment.Compile.DynamicCompiler |
accessorBody, accessorBody, 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, 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 |
protected ClassDefinition omegaClassDef
| Constructor Detail |
public UserClassGenerator()
public UserClassGenerator(java.lang.String name,
java.lang.String baseClass,
java.lang.String[] interfaces)
throws java.lang.ClassNotFoundException
public UserClassGenerator(ClassDefinition def)
throws java.lang.ClassNotFoundException
ClassDefinition object, which is stored in the
omegaClassDef field for future processing
via a call to make().
public UserClassGenerator(ClassDefinition def,
boolean make)
throws java.lang.ClassNotFoundException
omegaClassDef
and then optionally generating the Java byte code for the new Java class
used to implement this class defintion.
Note that this does not load the class into the JVM.| Method Detail |
protected boolean addStaticFields()
MethodsCollection and
also accessor methods for it.
public boolean make(ClassDefinition def,
boolean initializeClass)
def - the definition of the class read and parsed from a file
and/or generated programmatically.initializeClass - flag indicating whether the static class initialization that
is a call to loadTables()
should be added to the newly generated class, or not.
When the class is generated interactively within an Omegahat session,
the UserClassEvaluator
this step can be avoided (and the serialization of the method and constructor tables)
as the tables are available directly from the
ClassDefinition.public int createFields(List vars)
public int createMethods(MethodsCollection methods)
public boolean createMethods(java.lang.String name,
Method table)
public boolean addClassMethod(java.lang.String name,
java.lang.String sig,
Function f)
The generated method appends each argument to a local
FunctionCallArguments
and then passes the name of the method, its signature (which is used to index the
Function in the associated
Method table),
the argument list and finally the Evaluator
local to the instance of the new class, to the method
dispatchAndEval() in
MethodsCollection.
name - the name of the method being definedsign - the signature of the method being defined based on the types of its parameters.
This is used to index the Function
in the Method table for the
group of methods with this namef - the Function function being
used to implement the new method, providing the signature and return type.public boolean addStaticInitializer()
static {
OmegahatUserClassHelper.loadTables(Class.forName("name of this class"));
}
in the class definition.
The method that is created is named <clinit>public boolean make()
omegaClassDef, and adding the default class initialization
for the newly defined class which loads the function and constructor tables from
serialized objects identified by the Class resources.make in class EvaluableInterfaceGeneratorpublic boolean make(boolean classInitialization)
omegaClassDef.classInitialization - flag indicating whether we should add the static
class initialization code which calls the loadTables() method in OmegahatUserClassHelper.
public boolean addLocalField(LocalVariable var)
throws java.lang.ClassNotFoundException
LocalVariable.public short modifier(Modifier mod)
mod is null.
public short modifier(Modifier mod,
short defaultMod)
null,
usually a result of not being in the parsed input).public jas.CodeAttr addConstructor(java.lang.reflect.Constructor constructor)
addConstructor in class DynamicCompilerconstructor - a constructor object from the parent class from which
the new class is being derived.
public jas.CodeAttr addConstructor(java.lang.String sig,
Function constructor)
public boolean addConstructors()
EvaluableInterfaceGeneratorFunction
and Evaluator
or just a function.addConstructors in class EvaluableInterfaceGeneratorpublic boolean overrides(java.lang.reflect.Constructor constructor)
public boolean addEvaluatorField()
Evaluator
to use when evaluating an Omegahat function,
and also generates the accessor methods for this field, but with a method returning
a default evaluator from the get method.
public boolean addEvaluatorGetMethod(java.lang.String name,
java.lang.String className)
Evaluator
associated with the instance of the new class, and if it is null
to obtain this from the Omegahat System.Globals
class which stores the default evaluator.
public boolean addEvaluatorGetMethod(java.lang.String name,
java.lang.String className,
int permission)
public java.lang.reflect.Method matchOverriddenMethod(Function f)
public java.lang.Class returnType(Function f)
public java.lang.String superClassName()
null, return
java/lang/Object.
Note that this does not require the L and ;
prefix and suffix for a class name identifier.
This class name is stored in its internal form, i.e. with '/' rather than '.' separating the package components.
superClassName in class DynamicCompilerpublic ClassDefinition omegaClassDef()
omegaClassDef field which stores
the parsed and process input for the class specification before it was compiled.public ClassDefinition omegaClassDef(ClassDefinition d)
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||