org.objectweb.fractal.julia.asm
Class AttributeControllerClassGenerator

java.lang.Object
  extended by org.objectweb.fractal.julia.asm.AbstractClassGenerator
      extended by org.objectweb.fractal.julia.asm.AttributeControllerClassGenerator
All Implemented Interfaces:
Opcodes, ClassGenerator

public class AttributeControllerClassGenerator
extends AbstractClassGenerator

A class generator to generate AttributeController classes. This generator produces classes that implement a given set of attribute controller interfaces, i.e., interfaces with only getXXX and setXXX methods. The methods that are generated to implement these interfaces store and retrieve values in private fields of the generated class, two for each method pair.

More precisely, the code generated for the IAttributes interface below is the following:

 public interface IAttributes extends AttributeController {
   int getI ();
   void setI (int i);
 }

 public class XYZ
   implements IAttributes, CloneableAttributeController, Generated
 {

   private int I;
   private boolean _I; // true if I has been set

   public int getI () {
     return I;
   }

   public void setI (int i) {
     I = i;
     _I = true;
   }

   public void cloneFcAttributes (AttributeController ac) {
     if (_I) {
       ((IAttributes)ac).setI(I);
     }
   }

   public String getFcGeneratorParameters () {
     return "(... ... (IAttributes))";
   }
 }
 


Field Summary
 
Fields inherited from class org.objectweb.fractal.julia.asm.AbstractClassGenerator
classLoader, cw, interfaces, loader, name, parameters, superClass
 
Fields inherited from interface org.objectweb.asm.Opcodes
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
AttributeControllerClassGenerator()
           
 
Method Summary
protected  void generateDefaultMethods()
          Calls the overriden method and generates the header of the cloneFcAttributes method.
protected  void generateInterfaceMethods()
          Calls the overriden method and finishes the generation of the cloneFcAttributes method.
protected  void generateMethod(Method m)
          Generates a getter or setter method, and the corresponding fields if they are not already generated.
protected  List getImplementedInterfaces()
          Adds CloneableAttributeController to the list returned by the overriden method.
protected  void parseArgs(Tree args)
          Initializes this class generator with the given arguments.
 
Methods inherited from class org.objectweb.fractal.julia.asm.AbstractClassGenerator
computeMaxs, generateClass, generateConstructor, generateHeader, getOpcodeOffset, getSize, getSource
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AttributeControllerClassGenerator

public AttributeControllerClassGenerator()
Method Detail

parseArgs

protected void parseArgs(Tree args)
Initializes this class generator with the given arguments. This method requires arguments of the form "(objectDescriptor (itfName1 ... itfNameN))", where itfName1 ... itfNameN are the names of the interfaces it must implement.

Overrides:
parseArgs in class AbstractClassGenerator
Parameters:
args - the descriptor of the class to be generated.

getImplementedInterfaces

protected List getImplementedInterfaces()
                                 throws ClassGenerationException
Adds CloneableAttributeController to the list returned by the overriden method.

Overrides:
getImplementedInterfaces in class AbstractClassGenerator
Returns:
the names of all the interfaces implemented by the generated class.
Throws:
ClassGenerationException - if a problem occurs.

generateDefaultMethods

protected void generateDefaultMethods()
                               throws ClassGenerationException
Calls the overriden method and generates the header of the cloneFcAttributes method.

Overrides:
generateDefaultMethods in class AbstractClassGenerator
Throws:
ClassGenerationException - if a problem occurs.

generateInterfaceMethods

protected void generateInterfaceMethods()
                                 throws ClassGenerationException
Calls the overriden method and finishes the generation of the cloneFcAttributes method.

Overrides:
generateInterfaceMethods in class AbstractClassGenerator
Throws:
ClassGenerationException - if a problem occurs.

generateMethod

protected void generateMethod(Method m)
Generates a getter or setter method, and the corresponding fields if they are not already generated. If the given method is a setter method, this method also adds code corresponding to this attribute to the cloneFcAttributes method.

Specified by:
generateMethod in class AbstractClassGenerator
Parameters:
m - the method to be generated.
Throws:
ClassGenerationException - if a problem occurs.