at.dms.kjc
Class CClass

java.lang.Object
  |
  +--at.dms.util.Utils
        |
        +--at.dms.kjc.CMember
              |
              +--at.dms.kjc.CClass
All Implemented Interfaces:
Constants, Constants
Direct Known Subclasses:
CBadClass, CBinaryClass, CSourceClass

public abstract class CClass
extends CMember

This class represents the exported members of a class. (inner classes, methods and fields)


Field Summary
protected static CClass CLS_UNDEFINED
          Special constant that represents an "undefined" class that is used when some class object is needed as a placeholder to generate better error messages.
 
Fields inherited from class at.dms.kjc.CMember
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
CClass(Compiler compiler, CClass owner, java.lang.String sourceFile, int modifiers, java.lang.String ident, java.lang.String qualifiedName, CClassType superClass, boolean deprecated)
          Constructs a class export from file.
 
Method Summary
 void addField(CSourceField field)
          Add a field.
 void addInnerClass(CClassType newInner)
          Add synthetic inner class.
 void addMethod(CSourceMethod newMethod)
          Add synthetic method class.
 void close(CClassType[] interfaces, CField[] fields, CMethod[] methods)
          Ends the definition of this class.
 java.util.List collectAbstractMethods()
          collectAbstractMethods
 void collectInterfaceMethods(java.util.List list)
          Collects all methods in this type that are declared in an interface.
 boolean descendsFrom(CClass from)
          descendsFrom.
 void genClassFile(java.lang.String destination)
          Generate the code in a class file.
 CType[] genConstructorArray(CType[] params)
          Add synthetic parameters to method def.
 void genSyntheticParams(CodeSequence code, JExpression explicitThis)
          Add synthetic parameters to method call.
 void genSyntheticParamsFromExplicitSuper(JExpression[] params, CodeSequence code)
          Add synthetic parameters to method call.
 CMethod[] getAbstractMethods()
          Returns a list of abstract methods
 CClass getCClass()
          Returns this.
 Compiler getCompiler()
          Returns the compiler.
 CField getField(java.lang.String ident)
          Returns the named field.
 int getFieldCount()
          Returns the number of fields in this class.
protected static java.lang.String getIdent(java.lang.String qualifiedName)
          Returns the unqualified, package less and outerclass-name-less name of this class.
 CClassType[] getInnerClasses()
          Returns the InnerClasses of this clas.
 CMethod[] getInterfaceMethods()
          Returns a list of interface methods
 int getOuterLocalsSize()
          Returns the size of the outer-local variables in the variable table.
 java.lang.String getPackage()
          Returns the name of the package of the package this class belongs to.
 java.lang.String getQualifiedName()
          Returns the full name of this class.
 java.lang.String getSourceFile()
          Returns the source file of this class.
 CClass getSuperClass()
          Returns the super class of this class.
 CClassType getType()
          Returns the type of this class.
 boolean hasOuterThis()
           
 boolean isAbstract()
           
 boolean isAccessible(CClass from)
          Checks if this class is accessible from another class.
 boolean isAnonymous()
           
 boolean isDefinedInside(CClass outer)
          Returns true iff this class is defined inside the specified class
 boolean isInnerClass()
           
 boolean isInterface()
          Returns true if this class is an interface.
 CField lookupField(java.lang.String name)
          Searches a field in current class and parent hierarchy as needed.
 CClass lookupMemberClass(java.lang.String name)
          Look up member classes of this class, or of superclasses or interfaces.
 CMethod lookupMethod(CClass caller, java.lang.String name, CType[] params)
          Searches for an accessible, matching method with the provided type parameters.
 CField lookupSuperField(java.lang.String name)
          Searches a field in current class and parent hierarchy as needed.
 CMethod lookupSuperMethod(CClass caller, java.lang.String name, CType[] params)
          Searches for a matching method with the provided type parameters in the superclass and/or interfaces of this type.
 void setHasOuterThis(boolean hasOuterThis)
          Sets hasOuterThis.
 void setInnerClasses(CClassType[] inners)
          End of first pass, we need inner classes/interfaces.
 void setSuperClass(CClassType superClass)
          Sets the super class of this class.
 
Methods inherited from class at.dms.kjc.CMember
getField, getIdent, getJavaName, getMethod, getModifiers, getOwner, getPrefixName, isDeprecated, isFinal, isPrivate, isProtected, isPublic, isStatic, isSynthetic, mustUseAccessorMethod, setModifiers, setSynthetic
 
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
 

Field Detail

CLS_UNDEFINED

protected static CClass CLS_UNDEFINED
Special constant that represents an "undefined" class that is used when some class object is needed as a placeholder to generate better error messages.
Constructor Detail

CClass

public CClass(Compiler compiler,
              CClass owner,
              java.lang.String sourceFile,
              int modifiers,
              java.lang.String ident,
              java.lang.String qualifiedName,
              CClassType superClass,
              boolean deprecated)
Constructs a class export from file.
Method Detail

close

public void close(CClassType[] interfaces,
                  CField[] fields,
                  CMethod[] methods)
Ends the definition of this class.

getCompiler

public Compiler getCompiler()
Returns the compiler.

getCClass

public CClass getCClass()
Returns this.
Overrides:
getCClass in class CMember
Returns:
this.

getOuterLocalsSize

public int getOuterLocalsSize()
Returns the size of the outer-local variables in the variable table.

isInnerClass

public boolean isInnerClass()
Returns:
true if this class is an inner class.

isAbstract

public boolean isAbstract()
Returns:
true if this member is abstract.

isAnonymous

public boolean isAnonymous()
Returns:
true if this class is anonymous.

hasOuterThis

public boolean hasOuterThis()
Returns:
true if this class is has an outer this.

setHasOuterThis

public void setHasOuterThis(boolean hasOuterThis)
Sets hasOuterThis.

isInterface

public boolean isInterface()
Returns true if this class is an interface.
Returns:
true if this class is an interface.

getQualifiedName

public java.lang.String getQualifiedName()
Returns the full name of this class.
Overrides:
getQualifiedName in class CMember
Returns:
the full name of this class.

getPackage

public java.lang.String getPackage()
Returns the name of the package of the package this class belongs to.
Returns:
the name of the package of the package this class belongs to.

getSuperClass

public CClass getSuperClass()
Returns the super class of this class.

setSuperClass

public void setSuperClass(CClassType superClass)
Sets the super class of this class.

getType

public CClassType getType()
Returns the type of this class.

getSourceFile

public java.lang.String getSourceFile()
Returns the source file of this class.
Returns:
The source file of this class.

getField

public CField getField(java.lang.String ident)
Returns the named field.
Parameters:
ident - The name of the field to get.
Returns:
The field with the same name as the value of ident.

getFieldCount

public int getFieldCount()
Returns the number of fields in this class.

getInnerClasses

public CClassType[] getInnerClasses()
Returns the InnerClasses of this clas.
Returns:
the InnerClasses.

setInnerClasses

public void setInnerClasses(CClassType[] inners)
End of first pass, we need inner classes/interfaces.

addMethod

public void addMethod(CSourceMethod newMethod)
Add synthetic method class.

addInnerClass

public void addInnerClass(CClassType newInner)
Add synthetic inner class.

descendsFrom

public boolean descendsFrom(CClass from)
descendsFrom.
Parameters:
from - an other CClass
Returns:
true if this class inherit from "from" or equals "from"

isDefinedInside

public boolean isDefinedInside(CClass outer)
Returns true iff this class is defined inside the specified class
Parameters:
outer - another class

lookupMemberClass

public CClass lookupMemberClass(java.lang.String name)
                         throws UnpositionedError
Look up member classes of this class, or of superclasses or interfaces.
Parameters:
name - A TypeName (6.5.2)

lookupField

public CField lookupField(java.lang.String name)
                   throws UnpositionedError
Searches a field in current class and parent hierarchy as needed.
Parameters:
name - The simple name of the field.
Throws:
UnpositionedError - This error will be positioned soon.

lookupSuperField

public CField lookupSuperField(java.lang.String name)
                        throws UnpositionedError
Searches a field in current class and parent hierarchy as needed.
Parameters:
name - the simple name of the field
Throws:
UnpositionedError - this error will be positioned soon

lookupMethod

public CMethod lookupMethod(CClass caller,
                            java.lang.String name,
                            CType[] params)
                     throws UnpositionedError
Searches for an accessible, matching method with the provided type parameters. Looks in parent hierarchy as needed.
Parameters:
caller - The class of the method call expression, which is used to determine whether a matching method is accessible. If it is not accessible, the search goes on for another matching method. This parameter may be null to look up any matching method, regardless of accessibility.
name - Method name.
params - Method parameters.
Throws:
UnpositionedError - This error will be positioned soon.

lookupSuperMethod

public CMethod lookupSuperMethod(CClass caller,
                                 java.lang.String name,
                                 CType[] params)
                          throws UnpositionedError
Searches for a matching method with the provided type parameters in the superclass and/or interfaces of this type.
Parameters:
caller - The class of the method call expression, which is used to determine whether a matching method is accessible. If it is not accessible, the search goes on for another matching method. This parameter may be null to look up any matching method, regardless of accessibility.
name - Method name.
params - Method parameters.
Throws:
UnpositionedError - This error will be positioned soon.

getAbstractMethods

public CMethod[] getAbstractMethods()
Returns a list of abstract methods

getInterfaceMethods

public CMethod[] getInterfaceMethods()
Returns a list of interface methods

collectAbstractMethods

public java.util.List collectAbstractMethods()
collectAbstractMethods

collectInterfaceMethods

public void collectInterfaceMethods(java.util.List list)
Collects all methods in this type that are declared in an interface. Looks in parent hierarchy as needed.
Parameters:
list - Where the collected methods are placed.

getIdent

protected static java.lang.String getIdent(java.lang.String qualifiedName)
Returns the unqualified, package less and outerclass-name-less name of this class.
Returns:
The unqualified, package less and outerclass-name-less name of this class.

isAccessible

public boolean isAccessible(CClass from)
Checks if this class is accessible from another class.
Overrides:
isAccessible in class CMember
Returns:
true If this class is accessible from the class from.

addField

public void addField(CSourceField field)
Add a field.

genClassFile

public void genClassFile(java.lang.String destination)
                  throws java.io.IOException,
                         ClassFileFormatException
Generate the code in a class file.
Parameters:
destination - the root directory of the class hierarchy.

genConstructorArray

public CType[] genConstructorArray(CType[] params)
Add synthetic parameters to method def.

genSyntheticParams

public void genSyntheticParams(CodeSequence code,
                               JExpression explicitThis)
Add synthetic parameters to method call.

genSyntheticParamsFromExplicitSuper

public void genSyntheticParamsFromExplicitSuper(JExpression[] params,
                                                CodeSequence code)
Add synthetic parameters to method call.