Prev Class | Next Class | Frames | No Frames |
Summary: Nested | Field | Method | Constr | Detail: Nested | Field | Method | Constr |
java.lang.Object
gov.llnl.babel.symbols.ASTNode
gov.llnl.babel.symbols.SymbolID
gov.llnl.babel.symbols.Symbol
gov.llnl.babel.symbols.Extendable
public abstract class Extendable
extends Symbol
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 , ENUM , INTERFACE , PACKAGE , SCOPE , STRUCT , d_context , s_type |
Constructor Summary | |
| |
|
Method Summary | |
void |
|
void | |
protected void |
|
abstract void |
|
void |
|
void |
|
List |
|
List |
|
List |
|
List |
|
List |
|
List |
|
Set |
|
Set |
|
List |
|
List |
|
List |
|
Method |
|
Set |
|
List |
|
int |
|
int |
|
int |
|
int |
|
int |
|
Set |
|
Collection |
|
Interface |
|
Collection |
|
Collection |
|
Method |
|
SymbolID |
|
Set |
|
List |
|
Set |
|
boolean |
|
boolean |
|
boolean |
|
boolean |
|
boolean |
|
boolean |
|
boolean |
|
boolean |
|
boolean |
|
abstract boolean |
|
abstract boolean |
|
abstract boolean |
|
boolean | |
Method |
|
Collection |
|
boolean |
|
void |
|
void |
|
void |
|
void |
|
void |
|
void |
|
void |
|
void |
|
Methods inherited from class gov.llnl.babel.symbols.Symbol | |
addMetadata , freeze , getAllSymbolReferences , getAttribute , getAttributes , getBasicArrayRefs , getComment , getDepth , getMetadata , getSymbolID , getSymbolReferences , getSymbolType , getSymbolTypeString , getUserSpecified , hasAttribute , isClass , isInterface , 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 , setFromXML |
Methods inherited from class gov.llnl.babel.symbols.ASTNode | |
checkFrozen , clone , freeze , protectCollection , protectList , protectMap , protectSet |
public Extendable(SymbolID id, int type, Comment comment, Context context)
Create an emptyExtendable
object that will be constructed by calls to other member functions.
- Parameters:
id
- The symbol id of the new objecttype
- The value of the type of the new objectcomment
- The comment associated with the object
public Extendable(SymbolID id, int type, Comment comment, Metadata m, Context context)
Create an emptyExtendable
object that will be constructed by calls to other member functions.
- Parameters:
id
- The symbol id of the new objecttype
- The value of the type of the new objectcomment
- The comment associated with the objectm
- Object metadata
public void addInvariant(Assertion assertion) throws AssertionException
Add the invariant to this object. Assumptions: 1) The constraints on the assertion are being enforced elsewhere. 2) Only invariants local to this extendable are going to be added!
- Parameters:
assertion
- The invariant assertion to be added
- Throws:
AssertionException
- The exception raised if the assertion cannot be added.
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
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
public abstract void addParentInterface(Interface parent)
Add a new parent interface to this object. This method will be implemented by theClass
andInterface
subclasses.
- Parameters:
parent
- The parent interface to be added to this object.
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.
public List getAbstractAndLocalMethods()
Return all abstract methods and all local methods (both abstract and concreate). This is a special case for Java abstract classes, although maybe it will be useful elsewhere.
public 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 typeMethod
.
public List getAllInvariants() throws CodeGenerationException
Return the list of all invariants associated with this object as anList
, each element of which is inAssertion
form.
public List getAllParentsInOrder() throws CodeGenerationException
Return the parent interfaces and/or classes in hierarchical order from top-most down to direct parents in anList
. Each member of the list is anExtendable
and there are NO duplicates. Does a DFS to return ancestors in "reverse" topolgical order. by Jim Leek
public List getAllPostconditions(String longname) throws CodeGenerationException
Return all postconditions associated with the method in this object, if there is one, in anList
with each element inAssertion
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 postconditions. That is, duplicate postconditions are NOT removed.
- Parameters:
longname
- The long name of the method whose postconditions are to be returned.
public List getAllPreconditions(String longname) throws CodeGenerationException
Return all preconditions associated with the method in this object, if there is one, in aList
with each entry being inAssertion
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 preconditions. That is, duplicate preconditions are NOT removed.
- Parameters:
longname
- The long name of the method whose preconditions are to be returnede
public Set getAllSymbolReferences()
Return theSet
of all symbol references for this object, each element of which is inSymbolID
form. Note the references include those from this object's parents.
- Overrides:
- getAllSymbolReferences in interface Symbol
public Set getBasicArrayRefs()
Return theSet
of basic array types for this object, each element of the set being inSymbolID
form.
- Overrides:
- getBasicArrayRefs in interface Symbol
public List getInvariants()
Return the invariants in this interface as anList
, each element of which is inAssertion
form.
public List getMethods(boolean all)
Return the methods in this interface as aCollection
. Each element in the collection is of typeMethod
.
- Parameters:
all
- If TRUE, then return local and parent methods; otherwise, return only local methods.
public List getMethodsWithNonblocking(boolean all) throws CodeGenerationException
Return the methods in this interface as aCollection
. Each element in the collection is of typeMethod
. 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.
public Method getNewMethod(String oldM_name)
For From clauses: Take the FQN of the renamed method and return the new Method.
public Set getNewMethods()
For From clauses:Get all the new method objects of all the renamed methods
public List getNonstaticMethods(boolean all)
Return theCollection
non-static methods in this interface. Each element in the collection is of typeMethod
.
- Parameters:
all
- If TRUE, then return local and parent non-static methods; otherwise, return only local non-static methods.
public int getNumberAssertions(String longname) throws CodeGenerationException
Return the number of 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 assertions. Since the invariants are invoked along with the preconditions and again with the postconditions, their number counts twice.
- Parameters:
longname
- The long name of the method the number of whose assertions is to be returned.
public int getNumberInvariants(boolean all) throws CodeGenerationException
Return the number of invariants in this interface.
- Parameters:
all
- If TRUE then return the number of inherited and local invariants; otherwise, return only the number of local ones.
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.
public int getNumberPostconditions(String longname) throws CodeGenerationException
Return the number of postconditions 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 postconditions.
- Parameters:
longname
- The long name of the method the number of whose postconditions is to be returned.
public int getNumberPreconditions(String longname) throws CodeGenerationException
Return the number of preconditions 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 preconditions.
- Parameters:
longname
- The long name of the method the number of whose preconditions is to be returned.
public Set getObjectDependencies() throws CodeGenerationException
This function returns the set of symbols that this Extendable is dependent on. It should include any classes or interfaces that are passed by any method in the Extendable, but no enums, and no self.
public Collection getOverloadedMethodsByName(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
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 locatedall
- Indicator of whether all parents (TRUE) or only direct parents (FALSE) are to be searched
public Collection getParentInterfaces(boolean all)
Return the parent interfaces in aCollection
. Each member of the collection is anInterface
.
- Parameters:
all
- If TRUE, then all parents are to be returned; otherwise, only direct parents are to be returned.
public Collection getParents(boolean all)
Return the parent interfaces and/or class in aCollection
. Each member of the collection is anExtendable
. No duplicate entries are returned in the collection.
- Parameters:
all
- If TRUE, all ancestors are to be returned; otherwise, only direct parents.
public Method getRenamedMethod(Method newM)
For From clauses:Find the Parent Method Object for a renamed method.
public SymbolID getRenamedMethodSymbolID(Method oldM)
For From clauses: Get the old old method's enclosing symbolID.
public Set getRenamedMethods()
For From clauses:Get all the orginal Method Objects of all the renamed methods
public List getStaticMethods(boolean all)
Return the static methods in this interface as aCollection
. Each element in the collection is of typeMethod
.
- Parameters:
all
- If TRUE, then return local and parent static methods; otherwise, return only local static methods.
public Set getSymbolReferences()
Return theSet
of symbol references for this object, each element of which is inSymbolID
form. These are defined as all references for this object as well as its parents. The set of references includes this symbol name.
- Overrides:
- getSymbolReferences in interface Symbol
public boolean hasAncestor(Extendable ext)
Return TRUE if this object implements or extends the specifiedExtendable
directly or indirectly. Otherwise, return FALSE.
- Parameters:
ext
- The potential ancestor
public boolean hasAssertions() throws CodeGenerationException
Return TRUE if the extendable has any assertions; otherwise, return FALSE.
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.
public boolean hasInvariants(boolean all) throws CodeGenerationException
Return TRUE if the extendable has any invariants; otherwise, return FALSE.
- Parameters:
all
- If TRUE then check inherited and local; otherwise, check only local invariants.
public boolean hasMethodByLongName(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.
public boolean hasMethodByShortName(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 locatedall
- If TRUE, then all local and parent methods are to be searched; otherwise, only local methods are to be searched
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 locatedall
- Indicator of whether all parents (TRUE) or only direct parents (FALSE) are to be searched
public boolean hasParentInterfaces()
Return true if this extendable inherts from interfaces. BaseInterface does not count for this test.
public boolean hasReservedMethodAssertion(int type) throws CodeGenerationException
Returns true if the specified reserved method call is present in any of the assertions; otherwise, returns false.
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.
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.
public abstract boolean isInterface()
Return TRUE if this object represents an interface, FALSE if it is a class.
- Overrides:
- isInterface in interface Symbol
public boolean isLocal(Method m)
Returntrue
if and only if the method given is locally defined in this extendable.
- Parameters:
m
- The method of interest.
- Returns:
true
ifm
is locally defined in this Extendable.
public Method lookupMethodByLongName(String name, boolean all)
Return theMethod
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.
public Collection lookupMethodByShortName(String name, boolean all)
Return theCollection
of methods, each inMethod
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.
public boolean methodWasRenamed(Method newM)
For From clauses:Check a parent has a different name for this method.
public void validateAssertions(boolean all, boolean skip) throws AssertionException, CodeGenerationException
Validate assertions associated with this object. That is, validate all invariants as well as any pre- and post- conditions associated with any methods.
- Parameters:
all
- If TRUE then all assertions including those for all associated methods will be validated; otherwise, only validate the locally defined ones.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.
public void validateInvariants(boolean all, boolean skip) throws AssertionException, CodeGenerationException
Validate the invariants associated with this object.
- Parameters:
all
- If TRUE then all invariants are to be validated; otherwise, will only validate the local invariants.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.
public void validatePostconditions(String longname, boolean all, boolean skip) throws AssertionException, CodeGenerationException
Validate the postconditions associated with this object and the specified method.
- Parameters:
longname
- The long name of the method whose postconditions are to be validated.all
- If TRUE then all postconditions 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.
public void validatePostconditions(boolean all, boolean skip) throws AssertionException, CodeGenerationException
Validate postconditions associated with this object.
- Parameters:
all
- If TRUE then all postconditions 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.
public void validatePostconditions(Method meth, boolean all, boolean skip) throws AssertionException, CodeGenerationException
Validate the postconditions associated with this object and the specified method. By virtue of using getAllPostconditions(), it starts with the top-most inherited postconditions and proceeds "down" the inheritance hierarchy to the level of this class.
- Parameters:
meth
- The method whose postconditions are to be validated.all
- If TRUE then all postconditions 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.
public void validatePreconditions(String longname, boolean all, boolean skip) throws AssertionException, CodeGenerationException
Validate the preconditions associated with this object and the specified method.
- Parameters:
longname
- The long name of the method whose preconditions are to be validated.all
- If TRUE then will validate all preconditions; otherwise, will validate only the locally defined preconditions.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.
public void validatePreconditions(boolean all, boolean skip) throws AssertionException, CodeGenerationException
Validate the preconditions associated with this object.
- Parameters:
all
- If TRUE then will validate all preconditions; otherwise, will validate only the locally defined preconditions.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.
public void validatePreconditions(Method meth, boolean all, boolean skip) throws AssertionException, CodeGenerationException
Validate the preconditions associated with this object and the specified method. By virtue of using getAllPreconditions(), it starts with the top-most inherited preconditions and proceeds "down" the inheritance hierarchy to the level of this class.
- Parameters:
meth
- The method whose preconditions are to be validated.all
- If TRUE then will validate all preconditions; otherwise, will validate only the locally defined preconditions.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.