at.dms.kjc
Class JTypeDeclaration

java.lang.Object
  extended by at.dms.util.Utils
      extended by at.dms.compiler.Phylum
          extended by at.dms.kjc.JPhylum
              extended by at.dms.kjc.JMemberDeclaration
                  extended by at.dms.kjc.JTypeDeclaration
All Implemented Interfaces:
Constants, DeepCloneable, Finalizable, Serializable
Direct Known Subclasses:
JClassDeclaration, JInterfaceDeclaration

public abstract class JTypeDeclaration
extends JMemberDeclaration

This class represents a Java class or interface declaration in the syntax tree.

See Also:
Serialized Form

Field Summary
protected  JPhylum[] body
           
protected  JFieldDeclaration[] fields
           
protected  String ident
           
protected  JTypeDeclaration[] inners
           
protected  JInitializerDeclaration instanceInit
           
protected  CClassType[] interfaces
           
protected  JMethodDeclaration[] methods
           
protected  int modifiers
           
protected  CSourceClass sourceClass
           
protected  JInitializerDeclaration statInit
           
 
Fields inherited from class at.dms.util.Utils
EMPTY_LIST, getForLoopCallers
 
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_BIT, TID_BOOLEAN, TID_BYTE, TID_CHAR, TID_CLASS, TID_DOUBLE, TID_FLOAT, TID_INT, TID_LONG, TID_SHORT, TID_VECTOR, TID_VOID, VECTOR_EMPTY
 
Fields inherited from interface at.dms.classfile.Constants
ACC_ABSTRACT, ACC_FINAL, ACC_INLINE, ACC_INTERFACE, ACC_NATIVE, 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
protected JTypeDeclaration()
           
  JTypeDeclaration(TokenReference where, int modifiers, String ident, CClassType[] interfaces, JFieldDeclaration[] fields, JMethodDeclaration[] methods, JTypeDeclaration[] inners, JPhylum[] initializers, JavadocComment javadoc, JavaStyleComment[] comment)
          Constructs a type declaration node in the syntax tree.
 
Method Summary
 void addMethod(JMethodDeclaration method)
          Adds
 void addOuterThis()
           
 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)
          checkTypeBody Check expression and evaluate and alter context
 Object deepClone()
          Returns a deep clone of this object.
protected  void deepCloneInto(JTypeDeclaration other)
          Clones all fields of this into
 void generateInterface(CClass owner, String prefix)
          Defines an intermediate external representation of this class to use internally
 JConstructorDeclaration getDefaultConstructor()
           
 JFieldDeclaration[] getFields()
           
 String getIdent()
           
 JMethodDeclaration[] getMethods()
           
 int getModifiers()
          Returns the declared modifiers for this type.
 CClass getOwner()
           
 boolean isNested()
          Checks whether this type is nested.
 void setDefaultConstructor(JConstructorDeclaration defaultConstructor)
           
 void setIdent(String ident)
           
 void setModifiers(int modifiers)
          Sets the declared modifiers for this type.
 
Methods inherited from class at.dms.kjc.JMemberDeclaration
accept, accept, deepCloneInto, genComments, genComments1, getCClass, getField, getMethod, isDeprecated, setInterface
 
Methods inherited from class at.dms.kjc.JPhylum
assertMutable, check, check, check, check, deepCloneInto, fail, setLineNumber
 
Methods inherited from class at.dms.compiler.Phylum
deepCloneInto, getTokenReference, setTokenReference
 
Methods inherited from class at.dms.util.Utils
asPercent, cellMathEquivalent, cMathEquivalent, cppMathEquivalent, deepCloneInto, equalArrays, fail, getEnvironmentVariable, getExpression, hasPeeks, initArray, initArray, initLiteralArray, intArrayToList, isMathMethod, isUniform, kopi_assert, kopi_assert, makeCountdownForLoop, makeDotFileName, makeForLoop, makeForLoop, makeForLoop, makeForLoopFieldIndex, makeForLoopLocalIndex, nextPow2, passThruParens, peelMarkers, popBeforePeek, readFile, removeUnusedPops, replaceAll, setupDotFileName, simplifyMathMethod, splitQualifiedName, splitQualifiedName, toArray, toIntArray, toVector, voidToInt, writeFile
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

modifiers

protected int modifiers

ident

protected String ident

body

protected JPhylum[] body

fields

protected JFieldDeclaration[] fields

methods

protected JMethodDeclaration[] methods

inners

protected JTypeDeclaration[] inners

interfaces

protected CClassType[] interfaces

statInit

protected JInitializerDeclaration statInit

instanceInit

protected JInitializerDeclaration instanceInit

sourceClass

protected CSourceClass sourceClass
Constructor Detail

JTypeDeclaration

protected JTypeDeclaration()

JTypeDeclaration

public JTypeDeclaration(TokenReference where,
                        int modifiers,
                        String ident,
                        CClassType[] interfaces,
                        JFieldDeclaration[] fields,
                        JMethodDeclaration[] methods,
                        JTypeDeclaration[] inners,
                        JPhylum[] initializers,
                        JavadocComment javadoc,
                        JavaStyleComment[] comment)
Constructs a type declaration node in the syntax tree.

Parameters:
where - the line of this node in the source code
modifiers - the list of modifiers of this class
ident - the simple name of this class
interfaces - the interfaces implemented by this class
fields - the fields defined by this class
methods - the methods defined by this class
inners - the inner classes defined by this class
initializers - the class and instance initializers defined by this class
javadoc - java documentation comments
comment - other comments in the source code
Method Detail

generateInterface

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


getModifiers

public int getModifiers()
Returns the declared modifiers for this type.


setModifiers

public void setModifiers(int modifiers)
Sets the declared modifiers for this type.


addMethod

public void addMethod(JMethodDeclaration method)
Adds
method
to this.


isNested

public boolean isNested()
Checks whether this type is nested. JLS 8 (introduction), JLS 9 (introduction) : A nested type (class or interface) is any type whose declaration occurs within the body of another class or interface. A top level type is a type that is not a nested class.

Returns:
true iff this type is nested

getFields

public JFieldDeclaration[] getFields()

getMethods

public JMethodDeclaration[] getMethods()

getDefaultConstructor

public JConstructorDeclaration getDefaultConstructor()

setDefaultConstructor

public void setDefaultConstructor(JConstructorDeclaration defaultConstructor)

setIdent

public void setIdent(String ident)

getIdent

public String getIdent()

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()

checkTypeBody

public void checkTypeBody(CContext context)
                   throws PositionedError
checkTypeBody Check expression and evaluate and alter context

Parameters:
context - the actual context of analyse
Throws:
PositionedError - Error catched as soon as possible (for subclasses)

getOwner

public CClass getOwner()

deepClone

public Object deepClone()
Returns a deep clone of this object.

Specified by:
deepClone in interface DeepCloneable
Overrides:
deepClone in class JMemberDeclaration

deepCloneInto

protected void deepCloneInto(JTypeDeclaration other)
Clones all fields of this into
other