ABLE 2.3.0 07/13/2005 14:21:00

com.ibm.able.rules
Class AbleByteCodeClassBuilder

java.lang.Object
  extended bycom.ibm.able.rules.AbleByteCodeClassBuilder
All Implemented Interfaces:
com.ibm.jikesbt.BT_Opcodes, java.io.Serializable

public class AbleByteCodeClassBuilder
extends java.lang.Object
implements com.ibm.jikesbt.BT_Opcodes, java.io.Serializable

This class is used to construct inner classes defined using the ABLE Rule Language. It uses the JikesBT toolkit to dynamically construct the class bytecodes in memory for use by the associated inference engines.

See Also:
Serialized Form

Field Summary
protected  byte[] lastClassBytes
          The bytecodes of the last created class.
protected  java.util.Vector myDeclaredInnerClassesOrder
           
protected  java.util.Hashtable myInnerClassDefs
          The list of inner class names (keys) and class definitions
protected  java.util.Hashtable myInnerClasses
          The list of inner classes (Java Class objects)
protected  AbleRuleSet myRuleSet
          The Ruleset that owns this class.
 
Fields inherited from interface com.ibm.jikesbt.BT_Opcodes
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_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_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_i2d, opc_i2f, opc_i2l, 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_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_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_wide, opc_xxxunusedxxx
 
Constructor Summary
AbleByteCodeClassBuilder(AbleRuleSet theRuleSet)
          Create a new bytecode class builder.
AbleByteCodeClassBuilder(AbleRuleSet theRuleSet, java.lang.ClassLoader parent)
          Create a new bytecode class builder.
 
Method Summary
 void addClassDef(java.lang.String theClassName, com.ibm.able.rules.AbleByteCodeClass theClassDef)
          Add a generated inner class definiton to the environment
 void appendRepositoryClassPath(java.lang.String thePath)
           
 java.lang.Class createClassWithFields(java.lang.String theClassName, java.lang.String theSuperClassName, java.lang.String[] theFieldInfo)
          Create a Class object that contains fields of the specified types and specified names.
 void emptyRepositoryClasses()
          Empty the repository of created classes.
 byte[] getClassBytes()
          Retrieve the bytecode array of the last created class.
 java.lang.ClassLoader getClassLoader()
          Retrieve the classloader .
 java.util.Hashtable getInnerClasses()
          Retrieve the list of inner classes defined for this ruleset
 java.util.Vector getInnerClassesOrder()
          Retrieve the list of inner classes defined for this ruleset
 com.ibm.jikesbt.BT_Repository getRepository()
          Returns the repository.
 void prependRepositoryClassPath(java.lang.String thePath)
           
 void resetRepositoryClassPath()
          Remove paths previously added to the CLASSPATH.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

lastClassBytes

protected byte[] lastClassBytes
The bytecodes of the last created class.


myRuleSet

protected AbleRuleSet myRuleSet
The Ruleset that owns this class.


myInnerClasses

protected java.util.Hashtable myInnerClasses
The list of inner classes (Java Class objects)


myDeclaredInnerClassesOrder

protected java.util.Vector myDeclaredInnerClassesOrder

myInnerClassDefs

protected java.util.Hashtable myInnerClassDefs
The list of inner class names (keys) and class definitions

Constructor Detail

AbleByteCodeClassBuilder

public AbleByteCodeClassBuilder(AbleRuleSet theRuleSet)
Create a new bytecode class builder.


AbleByteCodeClassBuilder

public AbleByteCodeClassBuilder(AbleRuleSet theRuleSet,
                                java.lang.ClassLoader parent)
Create a new bytecode class builder.

Method Detail

createClassWithFields

public java.lang.Class createClassWithFields(java.lang.String theClassName,
                                             java.lang.String theSuperClassName,
                                             java.lang.String[] theFieldInfo)
                                      throws java.lang.ClassFormatError
Create a Class object that contains fields of the specified types and specified names.

Parameters:
theClassName - The name to be given to the newly created class.

theSuperClassName - The name of the class to be extended (if any); can be null, and if so, java.lang.Object is used as the super class.

theFieldInfo - A list of data members to be created in the new class. There must be an even number of elements in the array, and the array must be made up of pairs as follows:

element[i] (0, 2, 4, etc) is a string and specifies the class type of the field; this must be one of: "boolean", "byte", "char", "double", "float", "int", "long", "short", "java.lang.Object", "java.lang.String", or "java.util.Vector".

element[i+1] (1, 3, 5, etc) is a string and specifies the name of the field. The name can be any valid Java identifier.

            Example: [ "java.lang.String" "carMake"
                                    "int" "carYear"
                                    "int" "carModel" ]
            

Returns:
the newly created Class object.
Throws:
java.lang.ClassFormatError - if the Class cannot be dynamically defined.

getClassBytes

public byte[] getClassBytes()
Retrieve the bytecode array of the last created class.


emptyRepositoryClasses

public void emptyRepositoryClasses()
Empty the repository of created classes.


prependRepositoryClassPath

public void prependRepositoryClassPath(java.lang.String thePath)

appendRepositoryClassPath

public void appendRepositoryClassPath(java.lang.String thePath)

resetRepositoryClassPath

public void resetRepositoryClassPath()
Remove paths previously added to the CLASSPATH.


getRepository

public com.ibm.jikesbt.BT_Repository getRepository()
Returns the repository.


getClassLoader

public java.lang.ClassLoader getClassLoader()
Retrieve the classloader .


getInnerClasses

public java.util.Hashtable getInnerClasses()
Retrieve the list of inner classes defined for this ruleset

Returns:
a collection of inner classes.

getInnerClassesOrder

public java.util.Vector getInnerClassesOrder()
Retrieve the list of inner classes defined for this ruleset

Returns:
a collection of inner classes in the order they were defined.

addClassDef

public void addClassDef(java.lang.String theClassName,
                        com.ibm.able.rules.AbleByteCodeClass theClassDef)
Add a generated inner class definiton to the environment

Parameters:
theClassName - - the name of the inner class
theClassDef - - the class definition (includes bytecodes) of the inner class

ABLE 2.3.0 07/13/2005 14:21:00

(C) Copyright IBM Corporation 1999, 2005