mjc

org.multijava.mjc
Class JTypeDeclaration

java.lang.Object
  extended byorg.multijava.util.Utils
      extended byorg.multijava.util.compiler.Phylum
          extended byorg.multijava.mjc.JPhylum
              extended byorg.multijava.mjc.JMemberDeclaration
                  extended byorg.multijava.mjc.JTypeDeclaration
All Implemented Interfaces:
Annotatable, Cloneable, Comparable, CompilerPassEnterable, Constants, Constants, JMemberDeclarationType, JTypeDeclarationType, PhylumType
Direct Known Subclasses:
JClassDeclaration, JInterfaceDeclaration

public abstract class JTypeDeclaration
extends JMemberDeclaration
implements JTypeDeclarationType

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


Nested Class Summary
protected static class JTypeDeclaration.WrapResult
          This nested class is used to return the results from dispatcherWrapMethods
 
Field Summary
protected  CContextType cachedContext
           
private  JConstructorDeclarationType defaultConstructor
           
private  JFieldDeclarationType[] fields
          The fields declared within the type represented by this, extracted from fieldsAndInits at initialization time.
protected  JPhylum[] fieldsAndInits
          The fields and initializers of this type, passed together because the order matters for class and object initialization.
protected  String ident
           
protected  ArrayList inners
          Stores the nested and inner types and private generic functions of the type or generic function represented by this.
protected  JInitializerDeclaration instanceInit
           
protected  CClassType[] interfaces
           
protected  ArrayList methods
           
protected  long modifiers
           
private  JFieldDeclarationType outerThis
           
protected  CSourceClass sourceClass
           
protected  JInitializerDeclaration statInit
           
protected  CTypeVariable[] typevariables
           
protected  boolean uniqueSourceClass
          Used to detect whether there are duplicated declarations on the same name.
 
Fields inherited from class org.multijava.mjc.JMemberDeclaration
 
Fields inherited from class org.multijava.mjc.JPhylum
EMPTY
 
Fields inherited from class org.multijava.util.compiler.Phylum
 
Fields inherited from class org.multijava.util.Utils
DBG_LEVEL_HIGH, DBG_LEVEL_LOW, DBG_LEVEL_NO
 
Fields inherited from interface org.multijava.mjc.Constants
ACC_MODIFIER_FLAGS_MASK, ACC_NON_NULL, ACC_NON_NULL_BY_DEFAULT, ACC_NULLABLE, ACC_NULLABLE_BY_DEFAULT, ACC_PURE, ACCESS_FLAG_ARRAY, ACCESS_FLAG_NAMES, AMID_JAVA_MATH, AMID_MAX, AMID_SAFE_MATH, CMP_VERSION, IMPLICITLY_NON_NULL, JAV_ASSERTION_ERROR, JAV_CLASS, JAV_CLASSLOADER, JAV_CLASSNOTFOUND_EXCEPTION, JAV_CLONE, JAV_CLONEABLE, JAV_CONSTRUCTOR, JAV_ERROR, JAV_EXCEPTION, JAV_INIT, JAV_LENGTH, JAV_NAME_SEPARATOR, JAV_NOCLASSDEFFOUND_ERROR, JAV_OBJECT, JAV_OUTER_THIS, JAV_RMJ_RUNTIME_EXCEPTION, JAV_RUNTIME, JAV_RUNTIME_EXCEPTION, JAV_SERIALIZABLE, JAV_STATIC_INIT, JAV_STRING, JAV_STRINGBUFFER, JAV_SUPER, JAV_THIS, JAV_THROWABLE, MJ_ANCHOR, NULLITY_MODS, OPE_BAND, OPE_BNOT, OPE_BOR, OPE_BSR, OPE_BXOR, OPE_EQ, OPE_GE, OPE_GT, OPE_LAND, OPE_LE, OPE_LNOT, OPE_LOR, 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_MAX, TID_SHORT, TID_VOID, UNIV_ARRAY_TMP, UNIV_TMP
 
Fields inherited from interface org.multijava.util.classfile.Constants
ACC_ABSTRACT, 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_VOLATILE, ATT_ANCHOR, ATT_BRIDGE, ATT_CODE, ATT_CONSTANTVALUE, ATT_DEPRECATED, ATT_DISPATCHER, ATT_EXCEPTIONS, ATT_GENERIC, ATT_GENERIC_FUNCTIONS, ATT_INNERCLASSES, ATT_LINENUMBERTABLE, ATT_LOCALVARIABLETABLE, ATT_MM_BODY, ATT_REDIRECTOR, ATT_RMJ_GLUE, ATT_RMJ_SIGNATURE, ATT_RUNTIME_VISIBLE_ANNOTATIONS, ATT_RUNTIME_VISIBLE_PARAMETER_ANNOTATIONS, ATT_SIGNATURE, ATT_SOURCEFILE, ATT_SYNTHETIC, ATT_UNIVERSE_FIELD, ATT_UNIVERSE_METHOD, ATT_UNIVERSE_VERSION, 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_dup2, opc_dup2_x1, opc_dup2_x2, opc_dup_x1, opc_dup_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_ldc2_w, opc_ldc_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, long modifiers, String ident, CTypeVariable[] typevariables, CClassType[] interfaces, ArrayList methods, ArrayList inners, JPhylum[] fieldsAndInits, JavadocComment javadoc, JavaStyleComment[] comments)
          Constructs a type declaration in the parsing tree.
 
Method Summary
 void accumAllTypeSignatures(ArrayList accum)
          Adds the signature CSourceClass of this, and of all nested types, to accum.
 void addMember(JMemberDeclarationType newMember)
          Adds the given member to this type's interface and modifies sourceClass to include the new member
private  void addOuterThis()
          This method establishes a fabricated field to store a reference to an outer class of this.
private  void addRMJMethodAnnotation(CMethod method, CMethod topConcreteMethod, boolean anyInherited)
           
private  void annotateInterfaceMethods(CMethod topConcreteMethod, CMethodSet methods, boolean anyInherited)
           
protected  void annotateInternalInterfaceMethods(CContextType context)
           
private  void annotateInternalInterfaceMethodsFor(CMethod topConcreteMethod, CContextType context)
           
 void cachePassParameters(CContextType context)
          Caches the arguments for the compiler passes.
protected static JMethodDeclarationType checkForDups(JMethodDeclarationType[] methods)
          Returns the first method in the given array of methods that duplicates the signature of an earlier method or null if no duplicates exist.
protected static JMethodDeclarationType checkForSameSignature(JMethodDeclarationType[] methods)
           
 void checkInitializers()
          Invokes the checkInitializers method of the implementing class using previously cached arguments.
 void checkInitializers(CContextType context)
          Checks the static initializers created during the checkInterface pass and performs some other checks that can be performed simply before full blown typechecking.
 void checkInterface()
          Invokes the checkInterface method of the implementing class using previously cached arguments.
 void checkInterface(CContextType context)
          Checks the basic interfaces to make sure things generally look OK.
 int compareTo(Object o)
          Compares this to a given object.
abstract  CClassContextType createContext(CContextType parent)
          Creates a lexical context for typechecking and control flow analysis on this.
protected  JTypeDeclaration.WrapResult dispatcherWrapMethods(CContextType context, JMethodDeclarationType[] methodDecls)
          Builds a collection of methods for code generation.
private  void extractFields()
          Extracts the field declarations from fieldsAndInits.
 JFieldDeclarationType[] fields()
           
 JPhylum[] fieldsAndInits()
          Returns an array of the static and instance initializers for the type represented by this.
 void generateInterface(Main compiler, CClass owner, CMemberHost host, String prefix, boolean isAnon, boolean isMember)
          Generates a CSourceClass class signature singleton for this declaration and then registers the signature with CTopLevel.
 ArrayList getAllMethods()
          Walks up the extends hierarchy and adds all methods to the returned ArrayList.
 JConstructorDeclarationType getDefaultConstructor()
           
 String ident()
          Returns the identifier for this type declaration.
 ArrayList inners()
           
 CClassType[] interfaces()
          Returns the set of interfaces that this type implements or extends.
 boolean isAtTopLevel()
           
 boolean isDeclaredInDifferentSourceFiles()
          Determines whether this class is declared in more than one source file and returns a flag indicating this.
protected  CSourceClass makeSignature(Main compiler, CClass owner, CMemberHost host, String prefix, boolean isAnon, boolean isMember)
          Generates the signature object for this.
 ArrayList methods()
           
protected  JMethodDeclarationType[] methodsToBeWrapped()
          Returns an array of the methods to be considered for refactoring into dispatchers during the translateMJ pass.
 long modifiers()
           
 CClass owner()
          Returns the logical owner of this type.
 void preprocessDependencies()
          Performs preliminary processing on compilation units and types.
abstract  void preprocessDependencies(CContextType context)
          Performs preliminary processing on compilation units and types.
 void preprocessDependencies(CContextType context, CClassType superClassType)
          Performs preliminary processing on compilation units and types.
private  void recordInternalTopMethod(CMethod methodSig, CMethodSet topConcreteMethods)
           
protected  boolean registerSignature()
          Registers the signature of this declaration with the name space manager in CTopLevel.
 void resolveExtMethods(CContextType context)
          Makes sure that all in-scope external generic functions are added to the appropriate augmentation maps before top method searches occur in later passes.
 void resolveSpecializers()
          Resolves value specializer expressions to the compile-time constants they represent.
abstract  void resolveSpecializers(CContextType context)
          Computes the values of specializer expressions used to dispatch on compile-time constants.
 void resolveTopMethods()
          Finds the top method of every declared method.
 void setDefaultConstructor(JConstructorDeclarationType defaultConstructor)
           
 void setFields(JPhylum[] fieldsAndInits)
           
 void setFieldsOnly(JFieldDeclarationType[] fields)
           
 void setIdent(String ident)
           
 void setInners(ArrayList i)
           
 void setMethods(ArrayList m)
           
 void setStatic()
          Marks this type as static.
 void syntheticOuterThisInaccessible()
          Records the fact that even though the class is an inner class, we should not generate an outer this for it, because the outer this is not accessible.
 void translateMJ()
          Invokes the translateMJ method of the implementing class using previously cached arguments.
 void translateMJ(CContextType context)
          Refactors this to include dispatchers for multimethods and other code necessary for running MultiJava code on a standard JVM.
 void typecheck()
          Invokes the typecheck method of the implementing class using previously cached arguments.
 void typecheck(CContextType context)
          Typechecks this type declaration in the context in which it appears.
 CTypeVariable[] typevariables()
          Returns the type variables of this class.
protected  CWarning uniqueSourceWarning()
          Returns the appropriate warning message when another class has been declared whose signature matches the signature of this.
 void unsetStatic()
          Marks this type as non-static.
 
Methods inherited from class org.multijava.mjc.JMemberDeclaration
accept, genComments, getCClass, getField, getMethod, isDeprecated, javadocComment, setInterface
 
Methods inherited from class org.multijava.mjc.JPhylum
check, check, check, check, fail, fail, fail, warn, warn, warn, warn
 
Methods inherited from class org.multijava.util.compiler.Phylum
getTokenReference, setTokenReference
 
Methods inherited from class org.multijava.util.Utils
assertTrue, assertTrue, combineArrays, escapeString, escapeString, fail, fail, getFilePath, hasFlag, hasOtherFlags, parsePathParts, relativePathTo, splitQualifiedName, splitQualifiedName, stripJavaModifiers, stripNonJavaModifiers, stripPrivateModifier, unescapeString, vectorToArray, vectorToIntArray
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.multijava.mjc.JMemberDeclarationType
accept, genComments, getCClass, getField, getMethod, isDeprecated
 
Methods inherited from interface org.multijava.util.compiler.PhylumType
getTokenReference, setTokenReference
 
Methods inherited from interface org.multijava.javadoc.Annotatable
javadocComment
 
Methods inherited from interface org.multijava.mjc.CompilerPassEnterable
accept, getTokenReference
 

Field Detail

cachedContext

protected CContextType cachedContext

modifiers

protected long modifiers

ident

protected String ident

fieldsAndInits

protected JPhylum[] fieldsAndInits
The fields and initializers of this type, passed together because the order matters for class and object initialization. Members of the array should be instances of JFieldDeclarationType or JClassBlock.


fields

private JFieldDeclarationType[] fields
The fields declared within the type represented by this, extracted from fieldsAndInits at initialization time.


methods

protected ArrayList methods

inners

protected ArrayList inners
Stores the nested and inner types and private generic functions of the type or generic function represented by this.


interfaces

protected CClassType[] interfaces

outerThis

private JFieldDeclarationType outerThis

defaultConstructor

private JConstructorDeclarationType defaultConstructor

statInit

protected JInitializerDeclaration statInit

instanceInit

protected JInitializerDeclaration instanceInit

sourceClass

protected CSourceClass sourceClass

uniqueSourceClass

protected boolean uniqueSourceClass
Used to detect whether there are duplicated declarations on the same name.


typevariables

protected CTypeVariable[] typevariables
Constructor Detail

JTypeDeclaration

public JTypeDeclaration(TokenReference where,
                        long modifiers,
                        String ident,
                        CTypeVariable[] typevariables,
                        CClassType[] interfaces,
                        ArrayList methods,
                        ArrayList inners,
                        JPhylum[] fieldsAndInits,
                        JavadocComment javadoc,
                        JavaStyleComment[] comments)
Constructs a type declaration in the parsing tree.

Parameters:
where - the line of this node in the source code
modifiers - the list of modifiers of this class
ident - the short name of this type
typevariables - the type variables of this type
interfaces - the names of this types's interfaces
methods - a list of JMethodDeclarationTypes giving the methods of this type
inners - a list of JTypeDeclarationTypes giving the inner classes (and interfaces) of this type
fieldsAndInits - the fields and initializers of this type, passed together because the order matters for class and object initialization, members of the array should be instances of JFieldDeclarationType or JClassBlock
javadoc - javadoc comments
comments - regular java comments
See Also:
JMethodDeclarationType, JFieldDeclarationType, JClassBlock
Method Detail

generateInterface

public void generateInterface(Main compiler,
                              CClass owner,
                              CMemberHost host,
                              String prefix,
                              boolean isAnon,
                              boolean isMember)
Generates a CSourceClass class signature singleton for this declaration and then registers the signature with CTopLevel.

Specified by:
generateInterface in interface JTypeDeclarationType
Parameters:
compiler - the compiler instance for which this singleton is generated
owner - the class signature singleton for the logical outer class of this, or null if this is a top level declaration
host - the signature singleton of the context in which this is declared, a CCompilationUnit for top-level declarations
prefix - the prefix prepended to this declaration's identifier to achieve the fully qualified name, just the package name (using '/' separators) for top-level classes, package name plus $-delimited outer class names plus synthetic index for inner classes
isAnon - true if this is an anonymous class, in which case the fully qualified name is just prefix
isMember - true if this is a member type, i.e., a nested type that is not a local type or an anonymous class

makeSignature

protected CSourceClass makeSignature(Main compiler,
                                     CClass owner,
                                     CMemberHost host,
                                     String prefix,
                                     boolean isAnon,
                                     boolean isMember)
Generates the signature object for this. Overridden in subclasses for generic function anchor declarations.

Parameters:
compiler - the compiler instance for which this signature is generated
owner - the class signature singleton for the logical outer class of this, or null if this is a top level declaration
host - the signature singleton of the context in which this is declared, a CCompilationUnit for top-level declarations
prefix - the prefix prepended to this declaration's identifier to achieve the fully qualified name, just the package name (using '/' separators) for top-level classes, package name plus $-delimited outer class names plus synthetic index for inner classes
isAnon - true if this is an anonymous class, in which case the fully qualified name is just prefix
isMember - true if this is a member type, i.e., a nested type that is not a local type or an anonymous class

registerSignature

protected boolean registerSignature()
Registers the signature of this declaration with the name space manager in CTopLevel.

requires sourceClass != null;
 

See Also:
CTopLevel.addClass(CClass)

typevariables

public CTypeVariable[] typevariables()
Returns the type variables of this class.


interfaces

public CClassType[] interfaces()
Description copied from interface: JTypeDeclarationType
Returns the set of interfaces that this type implements or extends.

Specified by:
interfaces in interface JTypeDeclarationType

fieldsAndInits

public JPhylum[] fieldsAndInits()
Returns an array of the static and instance initializers for the type represented by this.

Specified by:
fieldsAndInits in interface JTypeDeclarationType

getAllMethods

public ArrayList getAllMethods()
Walks up the extends hierarchy and adds all methods to the returned ArrayList.

Specified by:
getAllMethods in interface JTypeDeclarationType
Returns:
a ArrayList that includes the CMethods for all methods in this class and all direct ancestors

methods

public ArrayList methods()
Specified by:
methods in interface JTypeDeclarationType

setMethods

public void setMethods(ArrayList m)

inners

public ArrayList inners()
Specified by:
inners in interface JTypeDeclarationType

setInners

public void setInners(ArrayList i)
Specified by:
setInners in interface JTypeDeclarationType

isAtTopLevel

public boolean isAtTopLevel()
Specified by:
isAtTopLevel in interface JTypeDeclarationType
Returns:
true if this class is at top level

fields

public JFieldDeclarationType[] fields()
Specified by:
fields in interface JTypeDeclarationType

getDefaultConstructor

public JConstructorDeclarationType getDefaultConstructor()
Specified by:
getDefaultConstructor in interface JTypeDeclarationType

setDefaultConstructor

public void setDefaultConstructor(JConstructorDeclarationType defaultConstructor)
Specified by:
setDefaultConstructor in interface JTypeDeclarationType

setIdent

public void setIdent(String ident)
Specified by:
setIdent in interface JTypeDeclarationType

ident

public String ident()
Returns the identifier for this type declaration.

Specified by:
ident in interface JTypeDeclarationType
Returns:
the unqualified identifier for this type declaration

addMember

public void addMember(JMemberDeclarationType newMember)
Adds the given member to this type's interface and modifies sourceClass to include the new member

Specified by:
addMember in interface JTypeDeclarationType
Parameters:
newMember - a member to be added to this type

setFields

public void setFields(JPhylum[] fieldsAndInits)

setFieldsOnly

public void setFieldsOnly(JFieldDeclarationType[] fields)

owner

public CClass owner()
Returns the logical owner of this type.

Specified by:
owner in interface JTypeDeclarationType

modifiers

public long modifiers()
Specified by:
modifiers in interface JTypeDeclarationType

setStatic

public void setStatic()
Marks this type as static.

 also 
 requires (* this.generateInterface(...) has not been invoked *);
 requires_redundantly sourceClass == null;
 ensures hasFlag(modifiers,ACC_STATIC);
 

Specified by:
setStatic in interface JTypeDeclarationType

unsetStatic

public void unsetStatic()
Marks this type as non-static.

 also 
 ensures !hasFlag(modifiers,ACC_STATIC);
 

Specified by:
unsetStatic in interface JTypeDeclarationType

syntheticOuterThisInaccessible

public void syntheticOuterThisInaccessible()
Records the fact that even though the class is an inner class, we should not generate an outer this for it, because the outer this is not accessible. The sourceClass field should not be null.

Specified by:
syntheticOuterThisInaccessible in interface JTypeDeclarationType

accumAllTypeSignatures

public void accumAllTypeSignatures(ArrayList accum)
Adds the signature CSourceClass of this, and of all nested types, to accum.

Specified by:
accumAllTypeSignatures in interface JTypeDeclarationType

preprocessDependencies

public abstract void preprocessDependencies(CContextType context)
                                     throws PositionedError
Performs preliminary processing on compilation units and types. Processes type imports so external methods' receiver types can be analyzed and supertypes can be resolved. Groups external methods by name, corresponding to the anchor classes that will eventually be generated. Mutates the name space management in CTopLevel to record a CGenericFunctionCollection singleton for each anchor class.

Specified by:
preprocessDependencies in interface JTypeDeclarationType
Throws:
PositionedError

preprocessDependencies

public void preprocessDependencies(CContextType context,
                                   CClassType superClassType)
                            throws PositionedError
Performs preliminary processing on compilation units and types. Processes type imports so external methods' receiver types can be analyzed and supertypes can be resolved. Groups external methods by name, corresponding to the anchor classes that will eventually be generated. Mutates the name space management in CTopLevel to record a CGenericFunctionCollection singleton for each anchor class.

Throws:
PositionedError

checkInterface

public void checkInterface(CContextType context)
                    throws PositionedError
Checks the basic interfaces to make sure things generally look OK. This pass gathers information about the type signatures of everything (imported class files, classes being compiled, methods, fields, etc...) needed for the later passes. This information is stored in a CCompilationUnit instance and instances of CMember that are bound to the AST. Also adds things like the default constructor and the initializer method to the AST (these are suppressed during pretty-printing).

Specified by:
checkInterface in interface JTypeDeclarationType
Parameters:
context - the context in which this decl appears
Throws:
PositionedError - an error with reference to the source file

checkForDups

protected static JMethodDeclarationType checkForDups(JMethodDeclarationType[] methods)
Returns the first method in the given array of methods that duplicates the signature of an earlier method or null if no duplicates exist.

requires (* checkInterface has already been called on each element
of methods *);
 


checkForSameSignature

protected static JMethodDeclarationType checkForSameSignature(JMethodDeclarationType[] methods)

uniqueSourceWarning

protected CWarning uniqueSourceWarning()
Returns the appropriate warning message when another class has been declared whose signature matches the signature of this. Overridden in subclass.


resolveExtMethods

public void resolveExtMethods(CContextType context)
Makes sure that all in-scope external generic functions are added to the appropriate augmentation maps before top method searches occur in later passes.


checkInitializers

public void checkInitializers(CContextType context)
                       throws PositionedError
Checks the static initializers created during the checkInterface pass and performs some other checks that can be performed simply before full blown typechecking.

Specified by:
checkInitializers in interface JTypeDeclarationType
Parameters:
context - the context in which this class declaration appears
Throws:
PositionedError - if check fails

isDeclaredInDifferentSourceFiles

public boolean isDeclaredInDifferentSourceFiles()
Determines whether this class is declared in more than one source file and returns a flag indicating this.

ensures (* \result == true if declared in two different source 
files, otherwise \result == false *);
 


resolveTopMethods

public void resolveTopMethods()
                       throws PositionedError
Finds the top method of every declared method. Called after the resolveSpecializers pass. This cannot be done before then because the external generic function mappings are not complete until the end of the checkInterface pass and the constant value specializers are not known until after the resolveSpecializers pass. This must be done before the typecheck pass so that all specialized argument positions for generic functions are known for ambiguity checking.

Specified by:
resolveTopMethods in interface JTypeDeclarationType
Throws:
PositionedError

resolveSpecializers

public abstract void resolveSpecializers(CContextType context)
                                  throws PositionedError
Computes the values of specializer expressions used to dispatch on compile-time constants.

Specified by:
resolveSpecializers in interface JTypeDeclarationType
Parameters:
context - the context in which this class declaration appears
Throws:
PositionedError - if the check fails

addOuterThis

private void addOuterThis()
This method establishes a fabricated field to store a reference to an outer class of this. It is designed to be a helper method to the checkInterface method of this. The fabricated field is stored in the outerThis field of this declaration and is also passed to sourceClass for code generation. If this declaration is immediately enclosed by an external method then the fabricated field will reference the _this_ synthetic receiver argument of the external method. The value of the field in either case is set at run-time via a synthetic parameter of this class's constructor.


createContext

public abstract CClassContextType createContext(CContextType parent)
Creates a lexical context for typechecking and control flow analysis on this.

Specified by:
createContext in interface JTypeDeclarationType

typecheck

public void typecheck(CContextType context)
               throws PositionedError
Typechecks this type declaration in the context in which it appears. Mutates the context to record the information learned during checking. Actually just updates the context by adding a CSourceClass representation of this. Overriding methods in subclasses of this handle the actual checks.

Specified by:
typecheck in interface JTypeDeclarationType
Parameters:
context - the context in which this type declaration appears
Throws:
PositionedError - if any checks fail

translateMJ

public void translateMJ(CContextType context)
Refactors this to include dispatchers for multimethods and other code necessary for running MultiJava code on a standard JVM.

Specified by:
translateMJ in interface JTypeDeclarationType

methodsToBeWrapped

protected JMethodDeclarationType[] methodsToBeWrapped()
Returns an array of the methods to be considered for refactoring into dispatchers during the translateMJ pass.

See Also:
translateMJ(CContextType)

dispatcherWrapMethods

protected final JTypeDeclaration.WrapResult dispatcherWrapMethods(CContextType context,
                                                                  JMethodDeclarationType[] methodDecls)

Builds a collection of methods for code generation. Finds the sets of multimethods that belong to the same generic function or otherwise require a dispatcher method and generates such a method for each set. Regular Java methods (those not requiring a dispatcher) and generated methods (e.g., default constructors) are also included in the result. An array of inner dispatcher classes, one for each overridden external generic function, is also part of the result.

(This method would be private but is declared protected and final to allow for unit testing.)

Parameters:
context - the context in which these method declarations appear, used for finding the top method of each generic function
methodDecls - an array of the methods to be generated
Returns:
an array of the methods to be created during code generation, and an array of the inner dispatcher classes to be created during code generation
See Also:
translateMJ(CContextType)

extractFields

private void extractFields()
Extracts the field declarations from fieldsAndInits.

See Also:
fieldsAndInits

compareTo

public int compareTo(Object o)
              throws ClassCastException
Compares this to a given object.

also
ensures (* \result == lexically ordered according to the type name *);
also
requires o != null && !(o instanceof JTypeDeclaration);
signals_only ClassCastException;
 

Specified by:
compareTo in interface Comparable
Parameters:
o - an Object value to compare to this
Returns:
based on a lexical ordering according to the type name
Throws:
ClassCastException - if o is incomparable to this

cachePassParameters

public void cachePassParameters(CContextType context)
Caches the arguments for the compiler passes.

 also
 ensures arePassParametersCached;
 

Specified by:
cachePassParameters in interface JTypeDeclarationType
See Also:
CompilerPassEnterable

preprocessDependencies

public void preprocessDependencies()
                            throws PositionedError
Performs preliminary processing on compilation units and types. Processes type imports so external methods' receiver types can be analyzed and supertypes can be resolved. Groups external methods by name, corresponding to the anchor classes that will eventually be generated. Mutates the name space management in CTopLevel to record a CGenericFunctionCollection singleton for each anchor class.

Specified by:
preprocessDependencies in interface CompilerPassEnterable
Throws:
PositionedError

checkInterface

public void checkInterface()
                    throws PositionedError
Description copied from interface: CompilerPassEnterable
Invokes the checkInterface method of the implementing class using previously cached arguments.

 requires arePassParametersCached;
 

Specified by:
checkInterface in interface CompilerPassEnterable
Throws:
PositionedError

checkInitializers

public void checkInitializers()
                       throws PositionedError
Description copied from interface: CompilerPassEnterable
Invokes the checkInitializers method of the implementing class using previously cached arguments.

 requires arePassParametersCached;
 

Specified by:
checkInitializers in interface CompilerPassEnterable
Throws:
PositionedError

resolveSpecializers

public void resolveSpecializers()
                         throws PositionedError
Description copied from interface: CompilerPassEnterable
Resolves value specializer expressions to the compile-time constants they represent. Must come after the checkInitializers phase.

Specified by:
resolveSpecializers in interface CompilerPassEnterable
Throws:
PositionedError

typecheck

public void typecheck()
               throws PositionedError
Description copied from interface: CompilerPassEnterable
Invokes the typecheck method of the implementing class using previously cached arguments.

 requires arePassParametersCached;
 

Specified by:
typecheck in interface CompilerPassEnterable
Throws:
PositionedError

translateMJ

public void translateMJ()
Description copied from interface: CompilerPassEnterable
Invokes the translateMJ method of the implementing class using previously cached arguments.

 requires arePassParametersCached;
 

Specified by:
translateMJ in interface CompilerPassEnterable

annotateInternalInterfaceMethods

protected void annotateInternalInterfaceMethods(CContextType context)
                                         throws UnpositionedError
Throws:
UnpositionedError

recordInternalTopMethod

private void recordInternalTopMethod(CMethod methodSig,
                                     CMethodSet topConcreteMethods)
                              throws UnpositionedError
Throws:
UnpositionedError

annotateInternalInterfaceMethodsFor

private void annotateInternalInterfaceMethodsFor(CMethod topConcreteMethod,
                                                 CContextType context)
                                          throws UnpositionedError
Throws:
UnpositionedError

annotateInterfaceMethods

private void annotateInterfaceMethods(CMethod topConcreteMethod,
                                      CMethodSet methods,
                                      boolean anyInherited)

addRMJMethodAnnotation

private void addRMJMethodAnnotation(CMethod method,
                                    CMethod topConcreteMethod,
                                    boolean anyInherited)

mjc

mjc is Copyright (C) 2000-2004 by Iowa State University and is distributed under the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. mjc is based in part on the Kopi project Copyright (C) 1990-99 DMS Decision Management Systems Ges.m.b.H.