JML

org.jmlspecs.checker
Class JmlCompilationUnit

java.lang.Object
  extended byorg.multijava.util.Utils
      extended byorg.multijava.util.compiler.Phylum
          extended byorg.multijava.mjc.JPhylum
              extended byorg.jmlspecs.checker.JmlNode
                  extended byorg.jmlspecs.checker.JmlCompilationUnit
All Implemented Interfaces:
Cloneable, Comparable, CompilerPassEnterable, Constants, Constants, Constants, JCompilationUnitType, PhylumType

public class JmlCompilationUnit
extends JmlNode
implements JCompilationUnitType

This class represents a single JML compilation unit (typically a file in a file-based compiler like this) in the AST. The production for a compilation unit is the main entry point in JML parser grammar.


Nested Class Summary
 
Nested classes inherited from class org.jmlspecs.checker.JmlNode
JmlNode.DummyInitializerDeclaration
 
Field Summary
private  Main cachedCompiler
           
private  JTypeDeclarationType[] combinedTypeDeclarations
           
private  JCompilationUnit delegee
          The MultiJava compilation unit decorated by this JML class.
private  boolean finishedSymTab
           
private  boolean finishedTypeCheck
           
static JPackageImportType JMLSPECS_LANG
           
protected  int levelNumber
          See JmlSourceClass for an explanation of the levelNumber field
private  boolean refined
          True if this compilation unit is refined by another compilation unit.
private  JmlRefinePrefix refinePrefix
           
private  JmlCompilationUnit refiningCUnit
           
private  Main.Task task
           
 
Fields inherited from class org.jmlspecs.checker.JmlNode
MJCVISIT_MESSAGE
 
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.jmlspecs.checker.Constants
ACC2_RAC_METHOD, ACC_CODE, ACC_CODE_BIGINT_MATH, ACC_CODE_JAVA_MATH, ACC_CODE_SAFE_MATH, ACC_GHOST, ACC_HELPER, ACC_INSTANCE, ACC_MODEL, ACC_MONITORED, ACC_QUERY, ACC_SECRET, ACC_SPEC_BIGINT_MATH, ACC_SPEC_JAVA_MATH, ACC_SPEC_PROTECTED, ACC_SPEC_PUBLIC, ACC_SPEC_SAFE_MATH, ACC_UNINITIALIZED, ACCESS_FLAG_ARRAY, ACCESS_FLAG_NAMES, AMID_BIGINT_MATH, EVERYTHING, JML_JMLObjectSet, NOT_SPECIFIED, NOTHING, OPE_BACKWARD_IMPLIES, OPE_EQUIV, OPE_EXISTS, OPE_FORALL, OPE_IMPLIES, OPE_L_ARROW, OPE_MAX, OPE_MIN, OPE_NOT_EQUIV, OPE_NUM_OF, OPE_PRODUCT, OPE_R_ARROW, OPE_SUBTYPE, OPE_SUM, SAME, TID_BIGINT, TID_REAL, TID_TYPE, TN_JMLOBJECTSET, TN_JMLTYPE, TN_JMLVALUESET
 
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, 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
JmlCompilationUnit(TokenReference where, JPackageName packageName, CCompilationUnit export, JPackageImportType[] importedPackages, ArrayList importedUnits, JTypeDeclarationType[] typeDeclarations, ArrayList tlMethods, JmlRefinePrefix refinePrefix)
          Constructs a CompilationUnit with the specified top level context
 
Method Summary
 void accept(MjcVisitor p)
          Accepts the specified visitor.
 void acceptDelegee(MjcVisitor p)
           
 CSourceClass[] allTypeSignatures()
          Returns the CSourceClass objects representing the type signatures of the types declared in this compilatoin unit and as nested types.
 void cachePassParameters(Main compiler, Destination destination)
          Caches the arguments for the compiler passes.
 void checkAssignableClauses()
           
 void checkInitializers()
          Invokes the checkInitializers method of the implementing class using previously cached arguments.
 void checkInitializers(Main compiler)
          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(Main compiler)
          Checks the basic interfaces to make sure things generally look OK.
 JTypeDeclarationType[] combinedTypeDeclarations()
           
 void combineSpecifications()
           
 int compareTo(Object o)
          Compares this to a given object.
 boolean declaresGF(String qualifiedName)
          Returns true iff this compilation unit contains a declaration for a generic function with the given fully qualified name.
 boolean declaresType(String qualifiedName)
          Returns true iff this compilation unit contains a declaration for a top-level type with the given fully qualified name.
 File file()
          Returns the file associated with this compilation unit.
 String fileNameIdent()
          Returns the Java identifier associated with the name of the file containing this compilation unit.
 String getFilePath()
           
 Main.Task getSuspendedTask()
           
 MJGenericFunctionDecl[] gfDeclarations()
           
 boolean hasSourceInRefinement()
          Returns true if this compilation unit has a Java source file in the refinement chain.
 JClassOrGFImportType[] importedClasses()
           
 JClassOrGFImportType[] importedGFs()
           
 JPackageImportType[] importedPackages()
           
 JClassOrGFImportType[] importedUnits()
          Returns an array of the class and generic function imports for this compilation unit.
 boolean isRefined()
          Returns true if this compilation is refined by another compilation unit.
 boolean isSymbolTableFinished()
          Returns true if this compilation unit has finished the checkInitializers phase.
 boolean isTypeCheckFinished()
          Returns true if this compilation unit has finished the typecheck phase.
 JPackageName packageName()
           
 String packageNameAsString()
           
 void preprocessDependencies()
          Performs preliminary processing on compilation units and types.
 void preprocessDependencies(Main compiler)
          Performs preliminary processing on compilation units and types.
 JmlCompilationUnit refinedCUnit()
           
 JmlRefinePrefix refinePrefix()
           
 JmlCompilationUnit refiningCUnit()
           
 void resolveSpecializers()
          Resolves value specializer expressions to the compile-time constants they represent.
(package private)  void resolveSpecializers(Main compiler)
          Resolves value specializer expressions to the compile-time constants they represent.
 void resolveTopMethods()
          Finds the top method of every declared method.
 void setImportedPackages(JPackageImportType[] packages)
           
 void setPackage(JPackageName packageName)
           
 void setRefined()
          Sets that this compilation is refined by another compilation unit.
 void setRefiningCUnit(JmlCompilationUnit refiningCUnit)
           
 void setSuspendedTask(Main.Task task)
           
 ArrayList tlMethods()
          Returns the AST subtrees for the augmenting method declarations.
 void translateMJ()
          Invokes the translateMJ method of the implementing class using previously cached arguments.
 void translateMJ(Main compiler)
          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(Main compiler)
          Typechecks this compilation unit.
 JTypeDeclarationType[] typeDeclarations()
           
 
Methods inherited from class org.jmlspecs.checker.JmlNode
enterSpecScope, enterSpecScope, exitSpecScope, exitSpecScope, privacy, privacyString
 
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.CompilerPassEnterable
getTokenReference
 

Field Detail

JMLSPECS_LANG

public static final JPackageImportType JMLSPECS_LANG

cachedCompiler

private Main cachedCompiler

delegee

private JCompilationUnit delegee
The MultiJava compilation unit decorated by this JML class.


refinePrefix

private JmlRefinePrefix refinePrefix

combinedTypeDeclarations

private JTypeDeclarationType[] combinedTypeDeclarations

levelNumber

protected int levelNumber
See JmlSourceClass for an explanation of the levelNumber field


refined

private boolean refined
True if this compilation unit is refined by another compilation unit.


finishedSymTab

private boolean finishedSymTab

finishedTypeCheck

private boolean finishedTypeCheck

refiningCUnit

private JmlCompilationUnit refiningCUnit

task

private Main.Task task
Constructor Detail

JmlCompilationUnit

public JmlCompilationUnit(TokenReference where,
                          JPackageName packageName,
                          CCompilationUnit export,
                          JPackageImportType[] importedPackages,
                          ArrayList importedUnits,
                          JTypeDeclarationType[] typeDeclarations,
                          ArrayList tlMethods,
                          JmlRefinePrefix refinePrefix)
Constructs a CompilationUnit with the specified top level context

Parameters:
where - the position of this token
packageName - the package to which this c.u. belongs
importedPackages - the packages imported by this c.u.
importedUnits - the classes and external members imported by this compilation unit
typeDeclarations - the classes and interfaces declared in this c.u.
tlMethods - the MultiJava top-level declarations in this c.u.
refinePrefix - the refine-prefix annotation for this c.u.
Method Detail

packageNameAsString

public String packageNameAsString()
Specified by:
packageNameAsString in interface JCompilationUnitType
Returns:
the package name of this compilation unit

file

public File file()
Description copied from interface: JCompilationUnitType
Returns the file associated with this compilation unit.

Specified by:
file in interface JCompilationUnitType

getFilePath

public String getFilePath()

fileNameIdent

public String fileNameIdent()
Description copied from interface: JCompilationUnitType
Returns the Java identifier associated with the name of the file containing this compilation unit. For example, if the file is named "typecheck.java" then this method returns "typecheck".

Specified by:
fileNameIdent in interface JCompilationUnitType
Returns:
the Java identifier associated with the file containing this

packageName

public JPackageName packageName()
Specified by:
packageName in interface JCompilationUnitType

setPackage

public void setPackage(JPackageName packageName)

importedPackages

public JPackageImportType[] importedPackages()
Specified by:
importedPackages in interface JCompilationUnitType

setImportedPackages

public void setImportedPackages(JPackageImportType[] packages)

importedClasses

public JClassOrGFImportType[] importedClasses()
Specified by:
importedClasses in interface JCompilationUnitType

typeDeclarations

public JTypeDeclarationType[] typeDeclarations()
Specified by:
typeDeclarations in interface JCompilationUnitType

gfDeclarations

public MJGenericFunctionDecl[] gfDeclarations()
Specified by:
gfDeclarations in interface JCompilationUnitType

allTypeSignatures

public CSourceClass[] allTypeSignatures()
Returns the CSourceClass objects representing the type signatures of the types declared in this compilatoin unit and as nested types.

Specified by:
allTypeSignatures in interface JCompilationUnitType

declaresType

public boolean declaresType(String qualifiedName)
Returns true iff this compilation unit contains a declaration for a top-level type with the given fully qualified name.

Specified by:
declaresType in interface JCompilationUnitType
Parameters:
qualifiedName - a fully qualified name with parts separated by '/' not '.'

declaresGF

public boolean declaresGF(String qualifiedName)
Returns true iff this compilation unit contains a declaration for a generic function with the given fully qualified name.

Specified by:
declaresGF in interface JCompilationUnitType
Parameters:
qualifiedName - a fully qualified name with parts separated by '/' not '.'

tlMethods

public ArrayList tlMethods()
Description copied from interface: JCompilationUnitType
Returns the AST subtrees for the augmenting method declarations. Each element of the list is of type MJTopLevelMethodDeclaration

Specified by:
tlMethods in interface JCompilationUnitType

importedGFs

public JClassOrGFImportType[] importedGFs()
Specified by:
importedGFs in interface JCompilationUnitType

importedUnits

public JClassOrGFImportType[] importedUnits()
Description copied from interface: JCompilationUnitType
Returns an array of the class and generic function imports for this compilation unit. Typically code should use importedClasses or importedGFs instead. This method is available as a testing harness since the other two methods report empty results until after the preprocessDependencies pass.

Specified by:
importedUnits in interface JCompilationUnitType

refiningCUnit

public JmlCompilationUnit refiningCUnit()

refinedCUnit

public JmlCompilationUnit refinedCUnit()

getSuspendedTask

public Main.Task getSuspendedTask()

setSuspendedTask

public void setSuspendedTask(Main.Task task)

refinePrefix

public JmlRefinePrefix refinePrefix()

isRefined

public boolean isRefined()
Returns true if this compilation is refined by another compilation unit.


isSymbolTableFinished

public boolean isSymbolTableFinished()
Returns true if this compilation unit has finished the checkInitializers phase.


isTypeCheckFinished

public boolean isTypeCheckFinished()
Returns true if this compilation unit has finished the typecheck phase.


setRefiningCUnit

public void setRefiningCUnit(JmlCompilationUnit refiningCUnit)

setRefined

public void setRefined()
Sets that this compilation is refined by another compilation unit.


hasSourceInRefinement

public boolean hasSourceInRefinement()
Returns true if this compilation unit has a Java source file in the refinement chain. This method should be called after typechecking.


preprocessDependencies

public void preprocessDependencies(Main compiler)
                            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 JCompilationUnitType
Throws:
PositionedError

compareTo

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

 also
   requires o instanceof JmlCompilationUnit;
   ensures (* \result is ordered according to suffix of the source files *);
 also
   requires o != null && !(o instanceof JmlCompilationUnit);
   signals_only ClassCastException;
 

Specified by:
compareTo in interface Comparable
Parameters:
o - an Object value to compare to this
Returns:
0 if this.equals(o)
Throws:
ClassCastException - if o is incomparable to this

checkInterface

public void checkInterface(Main compiler)
                    throws PositionedError
Description copied from interface: JCompilationUnitType
Checks the basic interfaces to make sure things generally look OK. This pass gathers information about the type signatures of everything (imported generic functions, 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 common initializer methods (which group all field initializers and initializer blocks) to the AST.

Specified by:
checkInterface in interface JCompilationUnitType
Throws:
PositionedError - an error with reference to the source file

checkInitializers

public void checkInitializers(Main compiler)
                       throws PositionedError
Description copied from interface: JCompilationUnitType
Checks the static initializers created during the checkInterface pass and performs some other checks that can be performed simply before full blown typechecking. Among these other checks are those for appropriateness of subclassing, such as inheritance circularities and "reimplementation" of interfaces.

Specified by:
checkInitializers in interface JCompilationUnitType
Parameters:
compiler - the compiler that is calling (passed down through the AST via CContextType subtypes and used for error reporting)
Throws:
PositionedError - if check fails

resolveSpecializers

void resolveSpecializers(Main compiler)
                   throws PositionedError
Resolves value specializer expressions to the compile-time constants they represent. Must come after the checkInitializers phase.

Parameters:
compiler - the compiler that is calling (passed down through the AST via CContextType subtypes and used for error reporting)
Throws:
PositionedError

resolveTopMethods

public void resolveTopMethods()
                       throws PositionedError
Finds the top method of every declared method. Called after the checkInitializers 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 checkInitializers 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 JCompilationUnitType
Throws:
PositionedError

typecheck

public void typecheck(Main compiler)
               throws PositionedError
Description copied from interface: JCompilationUnitType
Typechecks this compilation unit.

Specified by:
typecheck in interface JCompilationUnitType
Parameters:
compiler - the compiler that is calling
Throws:
PositionedError - if a check fails that we cannot recover from

checkAssignableClauses

public void checkAssignableClauses()
                            throws PositionedError
Throws:
PositionedError

translateMJ

public void translateMJ(Main compiler)
Description copied from interface: JCompilationUnitType
Refactors this to include dispatchers for multimethods and other code necessary for running MultiJava code on a standard JVM.

Specified by:
translateMJ in interface JCompilationUnitType

accept

public void accept(MjcVisitor p)
Accepts the specified visitor.

Specified by:
accept in interface JCompilationUnitType
Overrides:
accept in class JmlNode
Parameters:
p - the visitor

acceptDelegee

public void acceptDelegee(MjcVisitor p)

combineSpecifications

public void combineSpecifications()

combinedTypeDeclarations

public JTypeDeclarationType[] combinedTypeDeclarations()

cachePassParameters

public void cachePassParameters(Main compiler,
                                Destination destination)
Caches the arguments for the compiler passes.

Specified by:
cachePassParameters in interface JCompilationUnitType
See Also:

 also
   ensures arePassParametersCached;
 

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: JCompilationUnitType
Resolves value specializer expressions to the compile-time constants they represent. Must come after the checkInitializers phase.

Specified by:
resolveSpecializers in interface JCompilationUnitType
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

JML

JML is Copyright (C) 1998-2002 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. This release depends on code from the MultiJava project and is based in part on the Kopi project Copyright (C) 1990-99 DMS Decision Management Systems Ges.m.b.H.