at.dms.kjc
Class JTypeDeclaration

java.lang.Object
  |
  +--at.dms.util.Utils
        |
        +--at.dms.compiler.Phylum
              |
              +--at.dms.kjc.JPhylum
                    |
                    +--at.dms.kjc.JMemberDeclaration
                          |
                          +--at.dms.kjc.JTypeDeclaration
All Implemented Interfaces:
Constants, Constants
Direct Known Subclasses:
JClassDeclaration, JInterfaceDeclaration

public abstract class JTypeDeclaration
extends JMemberDeclaration

This class represents a java class or interface in the syntax tree


Fields inherited from class at.dms.kjc.JMemberDeclaration
ACCESSOR_PREFIX
 
Fields inherited from class at.dms.util.Utils
DBG_LEVEL_HIGH, DBG_LEVEL_LOW, DBG_LEVEL_NO
 
Fields inherited from interface at.dms.kjc.Constants
CMP_VERSION, JAV_CLASS, JAV_CLONE, JAV_CLONEABLE, JAV_CONSTRUCTOR, JAV_ERROR, JAV_EXCEPTION, JAV_INIT, JAV_LENGTH, JAV_NAME_SEPARATOR, JAV_OBJECT, JAV_OUTER_THIS, JAV_RUNTIME, JAV_RUNTIME_EXCEPTION, JAV_STATIC_INIT, JAV_STRING, JAV_STRINGBUFFER, JAV_THIS, JAV_THROWABLE, OPE_BAND, OPE_BNOT, OPE_BOR, OPE_BSR, OPE_BXOR, OPE_EQ, OPE_GE, OPE_GT, OPE_LE, OPE_LNOT, OPE_LT, OPE_MINUS, OPE_NE, OPE_PERCENT, OPE_PLUS, OPE_POSTDEC, OPE_POSTINC, OPE_PREDEC, OPE_PREINC, OPE_SIMPLE, OPE_SL, OPE_SLASH, OPE_SR, OPE_STAR, TID_ARRAY, TID_BOOLEAN, TID_BYTE, TID_CHAR, TID_CLASS, TID_DOUBLE, TID_FLOAT, TID_INT, TID_LONG, TID_SHORT, TID_VOID
 
Fields inherited from interface at.dms.classfile.Constants
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_NBR_FLAGS, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_TRANSIENT, ACC_VOLATILE, ATT_CODE, ATT_CONSTANTVALUE, ATT_DEPRECATED, ATT_EXCEPTIONS, ATT_GENERIC, ATT_INNERCLASSES, ATT_LINENUMBERTABLE, ATT_LOCALVARIABLETABLE, ATT_SOURCEFILE, ATT_SYNTHETIC, CST_CLASS, CST_DOUBLE, CST_FIELD, CST_FLOAT, CST_INTEGER, CST_INTERFACEMETHOD, CST_LONG, CST_METHOD, CST_NAMEANDTYPE, CST_STRING, CST_UTF8, ENV_DEBUG_MODE, ENV_USE_CACHE, JAVA_MAGIC, JAVA_MAJOR, JAVA_MINOR, MAX_CODE_PER_METHOD, 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_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_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, POO_ASCII_CONSTANT, POO_CLASS_CONSTANT, POO_DOUBLE_CONSTANT, POO_FLOAT_CONSTANT, POO_INTEGER_CONSTANT, POO_LONG_CONSTANT, POO_NAT_CONSTANT, POO_REF_CONSTANT, POO_STRING_CONSTANT, TYP_ADDRESS, TYP_DOUBLE, TYP_FLOAT, TYP_INT, TYP_LONG, TYP_REFERENCE, TYP_VOID
 
Constructor Summary
JTypeDeclaration(TokenReference where, int modifiers, java.lang.String ident, CClassType[] interfaces, JFieldDeclaration[] fields, JMethodDeclaration[] methods, JTypeDeclaration[] inners, JPhylum[] initializers, JavadocComment javadoc, JavaStyleComment[] comments)
          Constructs a type declaration in the parsing tree.
 
Method Summary
 void addGeneratedBodyPart(JPhylum bodyPart, boolean keepSeperate)
           
 void addGeneratedField(JFieldDeclaration field, boolean keepSeperate)
           
 void addGeneratedInner(JTypeDeclaration inner, boolean keepSeperate)
          Adds a generated inner method.
 void addGeneratedMethod(JMethodDeclaration method, boolean keepSeperate)
           
 void addOuterThis()
          Any inner class (non-static member class) has an outer-this variable.
 void checkInitializers(CContext context)
          Checks that same interface is not specified more than once.
abstract  void checkInterface(CContext context)
          Second pass (quick), check interface looks good
protected  void checkInterface(CContext context, CClassType superClass)
          Second pass (quick), check interface looks good
 void checkTypeBody(CContext context)
          Check expression and evaluate and alter context.
abstract  CClassContext createContext(CContext parent)
          createContext.
 void generateInterface(Compiler compiler, CClass owner, java.lang.String prefix)
          Defines an intermediate external representation of this class to use internally.
 JPhylum[] getBody()
          Returns bodies as array.
 java.util.List getBodyList()
          Returns bodies as list.
 JConstructorDeclaration getDefaultConstructor()
          Returns the default constructor for this type.
 java.util.List getFieldList()
          Returns source-declared fields as list.
 JFieldDeclaration[] getFields()
          Returns fields as array.
 java.util.List getGeneratedFieldList()
          Returns generated fields as list.
 java.util.List getGeneratedInnerList()
          Returns generated inner classes as list.
 java.util.List getGeneratedMethodList()
          Returns generated methods as list.
 java.lang.String getIdent()
          Returns the identifier for the type (the name).
 java.util.List getInnerList()
          Returns source-declared inner classes as list.
 JTypeDeclaration[] getInners()
          Returns inner classes as array.
 JInitializerDeclaration getInstanceInitializer()
          Returns instance initializer as syntax-subtree.
 CClassType[] getInterfaces()
          Returns the interfaces implemented by this type.
 java.util.List getMethodList()
          Returns source-declared methods as list.
 JMethodDeclaration[] getMethods()
           
 int getModifiers()
          Returns modifiers of type.
 CClass getOwner()
          Returns owner of type.
 CSourceClass getSourceClass()
          Returns export of type.
 JInitializerDeclaration getStaticInitializer()
          Returns static initializer as syntax-subtree.
 boolean isAtTopLevel()
          Returns true if this class is at top level, false if not.
 void setDefaultConstructor(JConstructorDeclaration constructor)
          Sets the default constructor for this type.
 void setIdent(java.lang.String ident)
          Sets the identifier for the type (the name).
 void setInstanceInitializer(JInitializerDeclaration initializer)
          Sets the instance initializer.
 void setInterfaces(CClassType[] interfaces)
          Sets the interfaces implemented by this type.
 void setModifiers(int modifiers)
          Changes modifiers of type.
 void setStaticInitializer(JInitializerDeclaration initializer)
          Sets the static initializer.
abstract  void transformType(CContext context)
          Transforms this type before code generation.
 
Methods inherited from class at.dms.kjc.JMemberDeclaration
accept, checkOrder, genComments, getCClass, getField, getMethod, getModifierName, isDeprecated, isSynthetic, setInterface, setSynthetic
 
Methods inherited from class at.dms.kjc.JPhylum
check, check, check, check, fail
 
Methods inherited from class at.dms.compiler.Phylum
getTokenReference, setTokenReference
 
Methods inherited from class at.dms.util.Utils
assert, assert, fail, fail, hasFlag, hasMoreThanOneFlag, hasOtherFlags, splitQualifiedName, splitQualifiedName, vectorToArray, vectorToIntArray
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

JTypeDeclaration

public JTypeDeclaration(TokenReference where,
                        int modifiers,
                        java.lang.String ident,
                        CClassType[] interfaces,
                        JFieldDeclaration[] fields,
                        JMethodDeclaration[] methods,
                        JTypeDeclaration[] inners,
                        JPhylum[] initializers,
                        JavadocComment javadoc,
                        JavaStyleComment[] comments)
Constructs a type declaration in the parsing tree.
Parameters:
where - the line of this node in the source code
parent - the parent in which this class is defined
modifiers - the list of modifiers of this class
ident - the short name of this class
interfaces - the names of this types's interfaces
javadoc - is this type declaration deprecated
Method Detail

generateInterface

public void generateInterface(Compiler compiler,
                              CClass owner,
                              java.lang.String prefix)
Defines an intermediate external representation of this class to use internally.

isAtTopLevel

public boolean isAtTopLevel()
Returns true if this class is at top level, false if not. Possible reasons for not being at top level: being an inner class or interface.

getFieldList

public java.util.List getFieldList()
Returns source-declared fields as list.

getGeneratedFieldList

public java.util.List getGeneratedFieldList()
Returns generated fields as list.

getFields

public JFieldDeclaration[] getFields()
Returns fields as array.

getMethodList

public java.util.List getMethodList()
Returns source-declared methods as list.

getGeneratedMethodList

public java.util.List getGeneratedMethodList()
Returns generated methods as list.

getMethods

public JMethodDeclaration[] getMethods()

getBodyList

public java.util.List getBodyList()
Returns bodies as list.

getBody

public JPhylum[] getBody()
Returns bodies as array. (Bodies are initializers for fields and static/instance initializers. They are combined to a single instance and/or static initializer)

getInnerList

public java.util.List getInnerList()
Returns source-declared inner classes as list.

getGeneratedInnerList

public java.util.List getGeneratedInnerList()
Returns generated inner classes as list.

getInners

public JTypeDeclaration[] getInners()
Returns inner classes as array.

setInterfaces

public void setInterfaces(CClassType[] interfaces)
Sets the interfaces implemented by this type.

getInterfaces

public CClassType[] getInterfaces()
Returns the interfaces implemented by this type.

getDefaultConstructor

public JConstructorDeclaration getDefaultConstructor()
Returns the default constructor for this type.

setDefaultConstructor

public void setDefaultConstructor(JConstructorDeclaration constructor)
Sets the default constructor for this type.

setIdent

public void setIdent(java.lang.String ident)
Sets the identifier for the type (the name).

getIdent

public java.lang.String getIdent()
Returns the identifier for the type (the name).

setStaticInitializer

public void setStaticInitializer(JInitializerDeclaration initializer)
Sets the static initializer.

getStaticInitializer

public JInitializerDeclaration getStaticInitializer()
Returns static initializer as syntax-subtree.

setInstanceInitializer

public void setInstanceInitializer(JInitializerDeclaration initializer)
Sets the instance initializer.

getInstanceInitializer

public JInitializerDeclaration getInstanceInitializer()
Returns instance initializer as syntax-subtree.

getSourceClass

public CSourceClass getSourceClass()
Returns export of type.

getModifiers

public int getModifiers()
Returns modifiers of type.

setModifiers

public void setModifiers(int modifiers)
Changes modifiers of type. Be careful when to do this; it has no effect after the export of the type has been generated.

getOwner

public CClass getOwner()
Returns owner of type.

transformType

public abstract void transformType(CContext context)
                            throws PositionedError
Transforms this type before code generation.
Throws:
PositionedError - an error with reference to the source file

checkInterface

public abstract void checkInterface(CContext context)
                             throws PositionedError
Second pass (quick), check interface looks good
Throws:
PositionedError - an error with reference to the source file

checkInterface

protected void checkInterface(CContext context,
                              CClassType superClass)
                       throws PositionedError
Second pass (quick), check interface looks good
Throws:
PositionedError - an error with reference to the source file

checkInitializers

public void checkInitializers(CContext context)
                       throws PositionedError
Checks that same interface is not specified more than once.
Throws:
PositionedError - Error catched as soon as possible.

addOuterThis

public void addOuterThis()
Any inner class (non-static member class) has an outer-this variable. So a call to this method isn't necessary; calling it when it makes no sense (on a static member class, for example) results in a runtime assertion exception.

createContext

public abstract CClassContext createContext(CContext parent)
                                     throws UnpositionedError
createContext.
Parameters:
parent - The parent context or null.
Returns:
A CClassContext that represents this context.
Throws:
UnpositionedError - Error catched as soon as possible.

checkTypeBody

public void checkTypeBody(CContext context)
                   throws PositionedError
Check expression and evaluate and alter context.
Parameters:
context - The actual context of analyse.
Returns:
A pure java expression including promote node
Throws:
PositionedError - Error catched as soon as possible (for subclasses)

addGeneratedInner

public void addGeneratedInner(JTypeDeclaration inner,
                              boolean keepSeperate)
Adds a generated inner method. The keepSeperate flag indicates whether it should be stored in a seperate list or if it should be added to the list of source-declared inner classes. The latter is handy for source generators.

addGeneratedField

public void addGeneratedField(JFieldDeclaration field,
                              boolean keepSeperate)

addGeneratedMethod

public void addGeneratedMethod(JMethodDeclaration method,
                               boolean keepSeperate)

addGeneratedBodyPart

public void addGeneratedBodyPart(JPhylum bodyPart,
                                 boolean keepSeperate)