gov.llnl.babel.symbols
Class Extendable

java.lang.Object
  extended by gov.llnl.babel.symbols.ASTNode
      extended by gov.llnl.babel.symbols.SymbolID
          extended by gov.llnl.babel.symbols.Symbol
              extended by gov.llnl.babel.symbols.Extendable
All Implemented Interfaces:
Attributes, IMetadata, java.lang.Cloneable, java.lang.Comparable
Direct Known Subclasses:
Class, Interface

public abstract class Extendable
extends Symbol

Class Extendable is a base class for SIDL symbols of type class and interface. It brings together common methods and implementation for both final classes. Class and interfaces have a set of methods and interface inheritance in common. Classes have the additional property that they can be extended by another class; that functionality is not defined here. Many of the member functions take a boolean argument that selects whether the method refers to this particular extendable only or to this extendable and all of its parents in the SIDL inheritance system. Constraints on the validity of methods added to this object must be checked by the parser. Key design goals include providing mechanisms to: - ensure method lookups in O(1) by both long and short names; - ensure fast return of abstract, static, non-static, local, and both local and parent (or all) methods; - ensure original ordering of methods preserved when returning lists;


Field Summary
 
Fields inherited from class gov.llnl.babel.symbols.Symbol
CLASS, d_context, ENUM, INTERFACE, PACKAGE, s_type, SCOPE, STRUCT
 
Fields inherited from class gov.llnl.babel.symbols.ASTNode
d_frozen
 
Constructor Summary
Extendable(SymbolID id, int type, Comment comment, Context context)
          Create an empty Extendable object that will be constructed by calls to other member functions.
Extendable(SymbolID id, int type, Comment comment, Metadata m, Context context)
          Create an empty Extendable object that will be constructed by calls to other member functions.
 
Method Summary
 void addInvAssertion(Assertion assertion)
          Adds the assertion to the invariant clause of this Extendable.
 void addMethod(Method method)
          Add the specified new method to this object.
protected  void addParentData(Extendable ext)
          Protected method called by parents to add their relevant information, such as methods, interfaces, references, and arrays to this object.
abstract  void addParentInterface(Interface parent)
          Add a new parent interface to this object.
 void addRenamedMethod(Method newM, Method oldM, SymbolID old_sid)
          For From clauses:Add the specified "new" method to the normal method lists, and the "old" method to the d_renamed_parent_methods HashMap.
 void freeze()
           
 java.util.List getAbstractAndLocalMethods()
          Return all abstract methods and all local methods (both abstract and concrete).
 java.util.List getAbstractMethods()
          Return the abstract methods for this class or interface, which includes all parent classes and interfaces.
 java.util.List getAllInvAssertions()
          Returns a List of Assertions consisting of all assertions in the local and inherited invariant clauses.
 java.util.List getAllParentsInOrder()
          Return the parent interfaces and/or classes in hierarchical order from top-most down to direct parents in an List.
 java.util.List getAllPostAssertions(java.lang.String longname)
          Return all postcondition assertions associated with the method in this object, if there is one, in an List with each element in Assertion form.
 java.util.List getAllPreAssertions(java.lang.String longname)
          Return all precondition assertions associated with the method in this object, if there is one, in a List with each entry being in Assertion form.
 java.util.Set getAllSymbolReferences()
          Return the Set of all symbol references for this object, each element of which is in SymbolID form.
 java.util.Set getBasicArrayRefs()
          Return the Set of basic array types for this object, each element of the set being in SymbolID form.
 java.util.List getInvClause()
          Returns a List of Assertions that make up the global invariant clause.
 java.util.List getInvClause(boolean all)
          Returns a List of Assertions that make up the invariant clause.
 int getInvDefaultComplexity()
          Returns the default complexity for the invariants; 0 if no invariants.
 java.util.List getMethods(boolean all)
          Return the methods in this interface as a Collection.
 java.util.List getMethodsWithNonblocking(boolean all)
          Return the methods in this interface as a Collection.
 Method getNewMethod(java.lang.String oldM_name)
          For From clauses: Take the FQN of the renamed method and return the new Method.
 java.util.Set getNewMethods()
          For From clauses: Get all the new method objects of all the renamed methods.
 java.util.List getNonstaticMethods(boolean all)
          Return the Collection non-static methods in this interface.
 int getNumberOfMethods(boolean all)
          Return the number of methods associated with this extendable.
 java.util.Set getObjectDependencies()
           
 java.util.Collection getOverloadedMethodsByName(java.lang.String shortName)
          Get all methods with the same short name as the passed in method name.
 Interface getParentInterface(SymbolID id, boolean all)
          Return Interface if this class has the specified parent interface; otherwise, return FALSE.
 java.util.Collection getParentInterfaces(boolean all)
          Return the parent interfaces in a Collection.
 java.util.Collection getParents(boolean all)
          Return the parent interfaces and/or class in a Collection.
 Method getRenamedMethod(Method newM)
          For From clauses: Find the Parent Method Object for a renamed method.
 java.util.Set getRenamedMethods()
          For From clauses: Get all the orginal Method Objects of all the renamed methods.
 SymbolID getRenamedMethodSymbolID(Method oldM)
          For From clauses: Get the old old method's enclosing symbolID.
 java.util.List getStaticMethods(boolean all)
          Return the static methods in this interface as a Collection.
 java.util.Set getSymbolReferences()
          Return the Set of symbol references for this object, each element of which is in SymbolID form.
 int getTotalContractAssertions(java.lang.String longname)
          Returns the total number of assertions contained within all contract clauses associated with the method -- including invariant clauses.
 int getTotalInvAssertions(boolean all)
          Returns the number of assertions within invariant clause(s) of this Extendable.
 int getTotalPostAssertions(java.lang.String longname)
          Return the total number of postcondition clause assertions for the specified method, if present.
 int getTotalPreAssertions(java.lang.String longname)
          Return the number of precondition assertions associated with the method in this object, if it is present.
 boolean hasAncestor(Extendable ext)
          Return TRUE if this object implements or extends the specified Extendable directly or indirectly.
 boolean hasBuiltinMethodAssertion(int type)
          Returns true if the specified reserved method call is present in any of the assertions; otherwise, returns false.
 boolean hasContracts()
          Returns TRUE if the Extendable has contracts (that contain assertions); otherwise, returns FALSE.
 boolean hasExceptionThrowingMethod(boolean all)
          Return TRUE if any of the methods throws an exception; otherwise, return FALSE.
 boolean hasInvClause(boolean all)
          Returns TRUE if this Extendable has any assertions in its invariant clause; otherwise, returns FALSE.
 boolean hasMethodByLongName(java.lang.String name, boolean all)
          Return TRUE if the specified method exists by long name; otherwise, return FALSE.
 boolean hasMethodByShortName(java.lang.String name, boolean all)
          Return TRUE if the specified method exists by short name; otherwise, return FALSE.
 boolean hasParentInterface(SymbolID id, boolean all)
          Return TRUE if this class has the specified parent interface; otherwise, return FALSE.
 boolean hasParentInterfaces()
          Return true if this extendable inherts from interfaces.
 boolean hasPostconditions()
          Returns TRUE if the Extendable has any postconditions(), explicit or inherited; otherwise, returns FALSE.
 boolean hasPreconditions()
          Returns TRUE if the Extendable has any preconditions(), explicit or inherited; otherwise, returns FALSE.
abstract  boolean hasStaticMethod(boolean all)
          Return TRUE if any of the methods are static methods; otherwise, return FALSE.
 boolean invHasMethodCall()
          Return TRUE if the invariant clause includes a method call; FALSE otherwise.
 boolean invHasResultOrArg()
          Return TRUE if the invariants include a Result or a method argument; FALSE otherwise.
abstract  boolean isAbstract()
          Return TRUE if this object contains any abstract methods; otherwise, return FALSE.
abstract  boolean isInterface()
          Return TRUE if this object represents an interface, FALSE if it is a class.
 boolean isLocal(Method m)
          Return true if and only if the method given is locally defined in this extendable.
 Method lookupMethodByLongName(java.lang.String name, boolean all)
          Return the Method with the specified long method name.
 java.util.Collection lookupMethodByShortName(java.lang.String name, boolean all)
          Return the Collection of methods, each in Method form, that are found to have the specified short method name, if any.
 boolean methodWasRenamed(Method newM)
          For From clauses: Check a parent has a different name for this method.
 void validateContracts(boolean all, boolean skip)
          Validate contracts associated with this object.
 void validateInvClause(boolean all, boolean skip)
          Validates the invariant clause(s).
 void validatePostClause(boolean all, boolean skip)
          Validate postcondition clauses associated with this object.
 void validatePostClause(Method meth, boolean all, boolean skip)
          Validate the postcondition clause associated with this object and the specified method.
 void validatePostClause(java.lang.String longname, boolean all, boolean skip)
          Validate the postcondition assertions associated with this object and the specified method.
 void validatePreClause(boolean all, boolean skip)
          Validate the precondition clauses.
 void validatePreClause(Method meth, boolean all, boolean skip)
          Validate the precondition clause(s) for the specified method.
 void validatePreClause(java.lang.String longname, boolean all, boolean skip)
          Validate the precondition clauses for the specified method.
 
Methods inherited from class gov.llnl.babel.symbols.Symbol
addMetadata, getAttribute, getAttributes, getComment, getDepth, getMetadata, getSymbolID, getSymbolType, getSymbolTypeString, getUserSpecified, hasAttribute, isClass, isPackage, isStruct, minimumDepth, removeAttribute, setAttribute, setAttribute, setComment, setUserSpecified
 
Methods inherited from class gov.llnl.babel.symbols.SymbolID
compareTo, equals, fromXML, getFullName, getShortName, getShortName, getSymbolName, getVersion, hashCode, isSymbolBindC, setFromXML
 
Methods inherited from class gov.llnl.babel.symbols.ASTNode
checkFrozen, clone, protectCollection, protectList, protectMap, protectSet
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface java.lang.Comparable
compareTo
 

Constructor Detail

Extendable

public Extendable(SymbolID id,
                  int type,
                  Comment comment,
                  Context context)
Create an empty Extendable object that will be constructed by calls to other member functions.

Parameters:
id - The symbol id of the new object
type - The value of the type of the new object
comment - The comment associated with the object

Extendable

public Extendable(SymbolID id,
                  int type,
                  Comment comment,
                  Metadata m,
                  Context context)
Create an empty Extendable object that will be constructed by calls to other member functions.

Parameters:
id - The symbol id of the new object
type - The value of the type of the new object
comment - The comment associated with the object
m - Object metadata
Method Detail

isAbstract

public abstract boolean isAbstract()
Return TRUE if this object contains any abstract methods; otherwise, return FALSE. A class is abstract if and only if it has any abstract methods. An interface must always be abstract, even if it contains no methods.


isInterface

public abstract boolean isInterface()
Return TRUE if this object represents an interface, FALSE if it is a class.

Overrides:
isInterface in class Symbol

addMethod

public void addMethod(Method method)
Add the specified new method to this object. No checking is done whether this method is valid for this particular extendable. The new method will over-write any existing method unless the new method is abstract. The references and arrays will also be cached in this object.

Parameters:
method - The method to be added to this object

addRenamedMethod

public void addRenamedMethod(Method newM,
                             Method oldM,
                             SymbolID old_sid)
For From clauses:Add the specified "new" method to the normal method lists, and the "old" method to the d_renamed_parent_methods HashMap. newM and oldM are assumed to have the same signatures and only differ by name.


getRenamedMethod

public Method getRenamedMethod(Method newM)
For From clauses: Find the Parent Method Object for a renamed method.


getRenamedMethods

public java.util.Set getRenamedMethods()
For From clauses: Get all the orginal Method Objects of all the renamed methods.


getNewMethods

public java.util.Set getNewMethods()
For From clauses: Get all the new method objects of all the renamed methods.


methodWasRenamed

public boolean methodWasRenamed(Method newM)
For From clauses: Check a parent has a different name for this method.


getRenamedMethodSymbolID

public SymbolID getRenamedMethodSymbolID(Method oldM)
For From clauses: Get the old old method's enclosing symbolID.


getNewMethod

public Method getNewMethod(java.lang.String oldM_name)
For From clauses: Take the FQN of the renamed method and return the new Method.


getNumberOfMethods

public int getNumberOfMethods(boolean all)
Return the number of methods associated with this extendable.

Parameters:
all - If TRUE, then return the number of local and parent methods; otherwise, return the number of local methods only.

getMethods

public java.util.List getMethods(boolean all)
Return the methods in this interface as a Collection. Each element in the collection is of type Method.

Parameters:
all - If TRUE, then return local and parent methods; otherwise, return only local methods.

getMethodsWithNonblocking

public java.util.List getMethodsWithNonblocking(boolean all)
                                         throws CodeGenerationException
Return the methods in this interface as a Collection. Each element in the collection is of type Method. This list includes methods NONBLOCKING_SEND and NONBLOCKING_RECV methods spawned in response to NONBLOCKING methods.

Parameters:
all - If TRUE, then return local and parent methods; otherwise, return only local methods.
Throws:
CodeGenerationException

getNonstaticMethods

public java.util.List getNonstaticMethods(boolean all)
Return the Collection non-static methods in this interface. Each element in the collection is of type Method.

Parameters:
all - If TRUE, then return local and parent non-static methods; otherwise, return only local non-static methods.

getStaticMethods

public java.util.List getStaticMethods(boolean all)
Return the static methods in this interface as a Collection. Each element in the collection is of type Method.

Parameters:
all - If TRUE, then return local and parent static methods; otherwise, return only local static methods.

getAbstractMethods

public java.util.List getAbstractMethods()
Return the abstract methods for this class or interface, which includes all parent classes and interfaces. Each element in the collection is of type Method.


getAbstractAndLocalMethods

public java.util.List getAbstractAndLocalMethods()
Return all abstract methods and all local methods (both abstract and concrete). This is a special case for Java abstract classes, although maybe it will be useful elsewhere.


isLocal

public boolean isLocal(Method m)
Return true if and only if the method given is locally defined in this extendable.

Parameters:
m - The method of interest.
Returns:
true if m is locally defined in this Extendable.

lookupMethodByLongName

public Method lookupMethodByLongName(java.lang.String name,
                                     boolean all)
Return the Method with the specified long method name. If there is none, return null.

Parameters:
name - The short method name for the method to be located.
all - If TRUE then all local and parent methods are to be searched; otherwise, only local methods are to be searched.

lookupMethodByShortName

public java.util.Collection lookupMethodByShortName(java.lang.String name,
                                                    boolean all)
Return the Collection of methods, each in Method form, that are found to have the specified short method name, if any. If none are found, then return null.

Parameters:
name - The short method name for the method to be located.
all - If TRUE then all local and parent methods are to be searched; otherwise, only local methods are to be searched.

hasMethodByLongName

public boolean hasMethodByLongName(java.lang.String name,
                                   boolean all)
Return TRUE if the specified method exists by long name; otherwise, return FALSE.

Parameters:
name - The long method name for the method to be located.
all - If TRUE then all local and parent methods are to be searched; otherwise, only local methods are to be searched.

hasMethodByShortName

public boolean hasMethodByShortName(java.lang.String name,
                                    boolean all)
Return TRUE if the specified method exists by short name; otherwise, return FALSE. Recall there may be multiple methods with the same short name but here we only care if there is at least one.

Parameters:
name - The short method name to be located
all - If TRUE, then all local and parent methods are to be searched; otherwise, only local methods are to be searched

hasStaticMethod

public abstract boolean hasStaticMethod(boolean all)
Return TRUE if any of the methods are static methods; otherwise, return FALSE.

Parameters:
all - If TRUE, then local and parent methods are to be searched; otherwise, only local methods are to be searched.

hasExceptionThrowingMethod

public boolean hasExceptionThrowingMethod(boolean all)
Return TRUE if any of the methods throws an exception; otherwise, return FALSE.

Parameters:
all - If TRUE, then local and parent methods are to be searched; otherwise, only local methods are to be searched.

addParentInterface

public abstract void addParentInterface(Interface parent)
Add a new parent interface to this object. This method will be implemented by the Class and Interface subclasses.

Parameters:
parent - The parent interface to be added to this object.

hasParentInterfaces

public boolean hasParentInterfaces()
Return true if this extendable inherts from interfaces. BaseInterface does not count for this test.


getParentInterfaces

public java.util.Collection getParentInterfaces(boolean all)
Return the parent interfaces in a Collection. Each member of the collection is an Interface.

Parameters:
all - If TRUE, then all parents are to be returned; otherwise, only direct parents are to be returned.

getAllParentsInOrder

public java.util.List getAllParentsInOrder()
                                    throws CodeGenerationException
Return the parent interfaces and/or classes in hierarchical order from top-most down to direct parents in an List. Each member of the list is an Extendable and there are NO duplicates. Does a DFS to return ancestors in "reverse" topolgical order. by Jim Leek

Throws:
CodeGenerationException

getParents

public java.util.Collection getParents(boolean all)
Return the parent interfaces and/or class in a Collection. Each member of the collection is an Extendable. No duplicate entries are returned in the collection.

Parameters:
all - If TRUE, all ancestors are to be returned; otherwise, only direct parents.

hasAncestor

public boolean hasAncestor(Extendable ext)
Return TRUE if this object implements or extends the specified Extendable directly or indirectly. Otherwise, return FALSE.

Parameters:
ext - The potential ancestor

hasParentInterface

public boolean hasParentInterface(SymbolID id,
                                  boolean all)
Return TRUE if this class has the specified parent interface; otherwise, return FALSE.

Parameters:
id - The parent interface to be located
all - Indicator of whether all parents (TRUE) or only direct parents (FALSE) are to be searched

getParentInterface

public Interface getParentInterface(SymbolID id,
                                    boolean all)
Return Interface if this class has the specified parent interface; otherwise, return FALSE.

Parameters:
id - The parent interface to be located
all - Indicator of whether all parents (TRUE) or only direct parents (FALSE) are to be searched

getSymbolReferences

public java.util.Set getSymbolReferences()
Return the Set of symbol references for this object, each element of which is in SymbolID form. These are defined as all references for this object as well as its parents. The set of references includes this symbol name.

Specified by:
getSymbolReferences in class Symbol

getAllSymbolReferences

public java.util.Set getAllSymbolReferences()
Return the Set of all symbol references for this object, each element of which is in SymbolID form. Note the references include those from this object's parents.

Specified by:
getAllSymbolReferences in class Symbol

getBasicArrayRefs

public java.util.Set getBasicArrayRefs()
Return the Set of basic array types for this object, each element of the set being in SymbolID form.

Specified by:
getBasicArrayRefs in class Symbol

addParentData

protected void addParentData(Extendable ext)
Protected method called by parents to add their relevant information, such as methods, interfaces, references, and arrays to this object.

Parameters:
ext - The parent whose methods and related information are to be added

getOverloadedMethodsByName

public java.util.Collection getOverloadedMethodsByName(java.lang.String shortName)
Get all methods with the same short name as the passed in method name. (This list includes the passed in method, so the collection has a minimum size of 1) This is necessary for F90 method overloading


getObjectDependencies

public java.util.Set getObjectDependencies()
                                    throws CodeGenerationException
Throws:
CodeGenerationException

addInvAssertion

public void addInvAssertion(Assertion assertion)
                     throws AssertionException
Adds the assertion to the invariant clause of this Extendable. Assumptions: 1) Constraints on the assertion are being enforced elsewhere. 2) Only invariant assertions local to this extendable are going to be added!

Parameters:
assertion - The assertion to be added to this invariant clause.
Throws:
AssertionException - The exception raised if the assertion cannot be added.

getAllInvAssertions

public java.util.List getAllInvAssertions()
                                   throws CodeGenerationException
Returns a List of Assertions consisting of all assertions in the local and inherited invariant clauses.

Throws:
CodeGenerationException

getInvClause

public java.util.List getInvClause(boolean all)
                            throws CodeGenerationException
Returns a List of Assertions that make up the invariant clause.

Parameters:
all - If TRUE then return local and inherited invariant assertions; otherwise, return local invariants.
Throws:
CodeGenerationException

getInvClause

public java.util.List getInvClause()
                            throws CodeGenerationException
Returns a List of Assertions that make up the global invariant clause.

Throws:
CodeGenerationException

getTotalInvAssertions

public int getTotalInvAssertions(boolean all)
                          throws CodeGenerationException
Returns the number of assertions within invariant clause(s) of this Extendable.

Parameters:
all - If TRUE then return the number in inherited clauses; otherwise, return only the number in the local clause.
Throws:
CodeGenerationException

hasInvClause

public boolean hasInvClause(boolean all)
                     throws CodeGenerationException
Returns TRUE if this Extendable has any assertions in its invariant clause; otherwise, returns FALSE.

Parameters:
all - If TRUE then check inherited invariant clauses; otherwise, only check the local clause.
Throws:
CodeGenerationException

validateInvClause

public void validateInvClause(boolean all,
                              boolean skip)
                       throws AssertionException,
                              CodeGenerationException
Validates the invariant clause(s).

Parameters:
all - If TRUE then validate local and inherited invariant clauses; otherwise, only validate the local clause.
skip - If TRUE then will skip the validation process for assertions already marked valid.
Throws:
AssertionException - The exception raised if errors are detected.
CodeGenerationException

invHasMethodCall

public boolean invHasMethodCall()
                         throws CodeGenerationException
Return TRUE if the invariant clause includes a method call; FALSE otherwise.

Throws:
CodeGenerationException

invHasResultOrArg

public boolean invHasResultOrArg()
                          throws CodeGenerationException
Return TRUE if the invariants include a Result or a method argument; FALSE otherwise. This should NEVER be true by code generation time.

Throws:
CodeGenerationException

getInvDefaultComplexity

public int getInvDefaultComplexity()
                            throws CodeGenerationException
Returns the default complexity for the invariants; 0 if no invariants.

Throws:
CodeGenerationException

hasContracts

public boolean hasContracts()
                     throws CodeGenerationException
Returns TRUE if the Extendable has contracts (that contain assertions); otherwise, returns FALSE.

Throws:
CodeGenerationException

getTotalContractAssertions

public int getTotalContractAssertions(java.lang.String longname)
                               throws CodeGenerationException
Returns the total number of assertions contained within all contract clauses associated with the method -- including invariant clauses. Returns 0 if there is no such method in this Extendable's hierarchy or if there are no assertions in any associated clauses. Since invariant clauses are enforced with the precondition clause and again with the postcondition clause, their assertions are double counted.

Parameters:
longname - The long name of the desired method.
Throws:
CodeGenerationException

hasPreconditions

public boolean hasPreconditions()
                         throws CodeGenerationException
Returns TRUE if the Extendable has any preconditions(), explicit or inherited; otherwise, returns FALSE.

Throws:
CodeGenerationException

getTotalPreAssertions

public int getTotalPreAssertions(java.lang.String longname)
                          throws CodeGenerationException
Return the number of precondition assertions associated with the method in this object, if it is present. Will return an 0 if there is no such method in this object's hierarchy or if there are no precondition assertions.

Parameters:
longname - The long name of the method the number of whose precondition assertions is to be returned.
Throws:
CodeGenerationException

getAllPreAssertions

public java.util.List getAllPreAssertions(java.lang.String longname)
                                   throws CodeGenerationException
Return all precondition assertions associated with the method in this object, if there is one, in a List with each entry being in Assertion form. Will return an empty list if no such method is in this object's hierarchy. WARNING: There is no attempt at this point to optimize the precondition assertions. That is, duplicate assertions are NOT removed.

Parameters:
longname - The long name of the method whose precondition assertions are to be returned.
Throws:
CodeGenerationException

validatePreClause

public void validatePreClause(Method meth,
                              boolean all,
                              boolean skip)
                       throws AssertionException,
                              CodeGenerationException
Validate the precondition clause(s) for the specified method.

Parameters:
meth - The method whose precondition clauses are to be validated.
all - If TRUE then validate local and inherited precondition clauses; otherwise, only validate the local clause.
skip - If TRUE then will skip the validation process for assertions already marked valid.
Throws:
AssertionException - The exception raised if errors are detected.
CodeGenerationException

validatePreClause

public void validatePreClause(java.lang.String longname,
                              boolean all,
                              boolean skip)
                       throws AssertionException,
                              CodeGenerationException
Validate the precondition clauses for the specified method.

Parameters:
longname - The long name of the method whose precondition clauses are to be validated.
all - If TRUE then validate local and inherited precondition clauses; otherwise, only validate the local clause.
skip - If TRUE then will skip the validation process for assertions already marked valid.
Throws:
AssertionException - The exception raised if errors are detected.
CodeGenerationException

validatePreClause

public void validatePreClause(boolean all,
                              boolean skip)
                       throws AssertionException,
                              CodeGenerationException
Validate the precondition clauses.

Parameters:
all - If TRUE then validate local and inherited precondition clauses; otherwise, only validate the local clause.
skip - If TRUE then will skip the validation process for assertions already marked valid.
Throws:
AssertionException - The exception raised if errors are detected.
CodeGenerationException

hasPostconditions

public boolean hasPostconditions()
                          throws CodeGenerationException
Returns TRUE if the Extendable has any postconditions(), explicit or inherited; otherwise, returns FALSE.

Throws:
CodeGenerationException

getTotalPostAssertions

public int getTotalPostAssertions(java.lang.String longname)
                           throws CodeGenerationException
Return the total number of postcondition clause assertions for the specified method, if present. Returns 0 if there is no such method in this Extendable's hierarchy or if there are no postcondition clause(s).

Parameters:
longname - The long name of the desired method.
Throws:
CodeGenerationException

getAllPostAssertions

public java.util.List getAllPostAssertions(java.lang.String longname)
                                    throws CodeGenerationException
Return all postcondition assertions associated with the method in this object, if there is one, in an List with each element in Assertion form. Will return an empty list if no such method in this object's hierarchy. WARNING: There is no attempt at this point to optimize the postcondition assertions. That is, duplicate assertions are NOT removed.

Parameters:
longname - The long name of the method whose postcondition assertions are to be returned.
Throws:
CodeGenerationException

validatePostClause

public void validatePostClause(Method meth,
                               boolean all,
                               boolean skip)
                        throws AssertionException,
                               CodeGenerationException
Validate the postcondition clause associated with this object and the specified method.

Parameters:
meth - The method whose postcondition assertions are to be validated.
all - If TRUE then validate local and inherited postcondition clauses; otherwise, only validate the local clause.
skip - If TRUE then will skip the validation process for assertions already marked valid.
all - If TRUE then all postcondition assertions of the method will be validated; otherwise, only the locally defined ones will.
skip - If TRUE then will skip the validation process if the expression has already been marked as valid.
Throws:
AssertionException - The exception raised if errors are detected.
CodeGenerationException

validatePostClause

public void validatePostClause(java.lang.String longname,
                               boolean all,
                               boolean skip)
                        throws AssertionException,
                               CodeGenerationException
Validate the postcondition assertions associated with this object and the specified method.

Parameters:
longname - The long name of the method whose postcondition assertions are to be validated.
all - If TRUE then validate local and inherited postcondition clauses; otherwise, only validate the local clause.
skip - If TRUE then will skip the validation process for assertions already marked valid.
all - If TRUE then all postcondition assertions of the method will be validated; otherwise, only the locally defined ones will.
skip - If TRUE then will skip the validation process if the expression has already been marked as valid.
Throws:
AssertionException - The exception raised if errors are detected.
CodeGenerationException

validatePostClause

public void validatePostClause(boolean all,
                               boolean skip)
                        throws AssertionException,
                               CodeGenerationException
Validate postcondition clauses associated with this object.

Parameters:
skip - If TRUE then will skip the validation process if the expression has already been marked as valid.
all - If TRUE then validate local and inherited postcondition clauses; otherwise, only validate the local clause.
skip - If TRUE then will skip the validation process for assertions already marked valid.
all - If TRUE then all postcondition clauses of the method will be validated; otherwise, only the locally defined ones will.
Throws:
AssertionException - The exception raised if errors are detected.
CodeGenerationException

validateContracts

public void validateContracts(boolean all,
                              boolean skip)
                       throws AssertionException,
                              CodeGenerationException
Validate contracts associated with this object. That is, validate all invariant as well as any pre- and post- condition clauses associated with any methods.

Parameters:
all - If TRUE then validate local and inherited clauses; otherwise, only validate local clauses.
skip - If TRUE then will skip the validation process for assertions already marked valid.
skip - If TRUE then will skip the validation process if the expression has already been marked as valid.
all - If TRUE then all assertions including those for all associated methods will be validated; otherwise, only validate the locally defined ones.
Throws:
AssertionException - The exception raised if errors are detected.
CodeGenerationException

hasBuiltinMethodAssertion

public boolean hasBuiltinMethodAssertion(int type)
                                  throws CodeGenerationException
Returns true if the specified reserved method call is present in any of the assertions; otherwise, returns false.

Throws:
CodeGenerationException

freeze

public void freeze()
Overrides:
freeze in class Symbol