gov.llnl.babel.symbols

Class Method

Implemented Interfaces:
Cloneable, Attributes, IMetadata

public class Method
extends ASTNode
implements Cloneable, Attributes, IMetadata

The Method class defines a SIDL method, including modifiers, return type, name, arguments, and exceptions. Methods may have one of three definition modifiers: final, static, or abstract. They may also have one of two communication modifiers: local or oneway. The return type is either a type or null (which indicates void). The method name is a simple identifier string. The optional arguments are an ordered collecton or arguments. The method may throw any number of exceptions.

Nested Class Summary

class
Method.RarrayInfo

Field Summary

static int
ABSTRACT
static int
FINAL
static int
LOCAL
static int
NONBLOCKING
static int
NONBLOCKING_RECV
static int
NONBLOCKING_SEND
static int
NORMAL
static int
ONEWAY
static int
STATIC
static String[]
s_comm_mod
static String[]
s_def_mod

Fields inherited from class gov.llnl.babel.symbols.ASTNode

d_frozen

Constructor Summary

Method(Context context)
Create an empty Method object that will be built by calls to other member functions.

Method Summary

void
addArgument(Argument arg)
Add another argument to the end of the list of method arguments.
void
addAssertion(Assertion assertion)
Add the specified assertion to the proper assertion list for this method.
void
addImplicitThrows(SymbolID id)
Add a symbol identifier to the list of exceptions thrown, but do not treat it as an explicit throw.
void
addMetadata(String keyword, String value)
Add a (keyword, value) pair to the metadata for this object.
void
addRarrayIndex(Collection new_indices)
add a set of required rarray indices to the set of indices
void
addRarrayIndex(String s)
add a required rarray index to the set of indices
void
addSplicerContents(String location, String name, String impl)
Add the specified contents to the splicer block identified by the location and name.
void
addThrows(SymbolID id)
Add a symbol identifier to the list of explicit supported exceptions for this method.
Method
cloneMethod()
Return a shallow copy of this method object.
boolean
equals(Object o)
void
freeze()
Argument
getArgumentByName(String s)
Return an the argument whose formal name matches the passed in string.
List
getArgumentList()
Return the array of arguments in an ArrayList, where each element is an Argument.
List
getArgumentListWithIndices()
Return the array of arguments in an ArrayList container.
List
getArgumentListWithOutIndices()
Return the array of arguments in an ArrayList container.
int
getArgumentMode(String name)
Return the mode of the argument with the specified formal name, if any; otherwise, return -1.
Type
getArgumentType(String name)
Return the Type of the argument with the specified formal name, if any; otherwise, return null.
String
getAttribute(String key)
Set
getAttributes()
Set
getBasicArrays()
Return the Set of basic array references including arrays of fundamental types such as double, int, etc.
String
getBlockingMethodName()
Return the nonblocking method name (if NONBLOCKING), else return long name
Comment
getComment()
Return the comment for the method.
int
getCommunicationModifier()
Return the communication modifier for this method.
String
getCommunicationModifierString()
Return the communication modifier string for this method.
String
getCorrectMethodName()
This method is used for language bindings that support overloading.
int
getDefinitionModifier()
Return the definition modifier for the method.
String
getDefinitionModifier(boolean is_interface)
Return the explicit definition modifier string for the method based on the type of extendable in which it belongs.
Set
getExplicitThrows()
Return the Set of explicit exceptions that may be thrown by this method.
Set
getImplicitThrows()
Return the Set of implicit exceptions that may be thrown by this method.
String
getLongMethodName()
Return the long method name (a standard SIDL identifier).
int
getMaxArrayIterMacros(char type)
Return the number of array iteration macros in the assertions of the method of the specified return type.
Metadata
getMetadata()
Return the metadata associated with this object.
String
getNameExtension()
Return the method name extension (a standard SIDL identifier).
List
getPostconditions()
Return the list of postconditions as an ArrayList of Assertion elements.
List
getPreconditions()
Return the list of preconditions as an ArrayList of Assertion elements.
Set
getRarrayIndices()
Return the set of rarray indices required in the arg list.
Map
getRarrayInfo()
This returns an array list of RarrayInfo objects that contains the info for every rarray index used in this method.
Type
getReturnType()
Return the return type for the method or throw NullPointerException
String
getReturnType(String parent_pkg)
Return the string corresponding to the return type for this method.
String
getShortMethodName()
Return the short method name (a standard SIDL identifier).
String
getSignature()
Return the signature of the method.
String
getSignature(boolean is_interface, String parent_pkg)
Return the signature of the method, including the definition modifier based on the extendable type.
String
getSignaturePreface(boolean is_interface, String parent_pkg)
Return the concatenation of the explicit definition modifier, copy, return type, name and extension.
ArrayList
getSplicerBlocks(String location)
Return splicer blocks for the specified location.
ArrayList
getSplicerContents(String location, String name)
Return splicer contents for the specified location and splicer name.
Set
getSymbolReferences()
Return the Set of symbols referred to by this method.
Set
getSymbolReferencesWithoutExceptions()
Return the Set of symbols referred to by this method, except for the exceptions it throws.
Set
getThrows()
Return the Set of exceptions that may be thrown by this method.
boolean
hasArrayOrderSpec()
Return TRUE if and only if at least one argument of this method is an array with an ordering specification.
boolean
hasAttribute(String key)
boolean
hasExplicitExceptions()
boolean
hasPureAssertion()
Return TRUE if PURE clause appears in the assertions associated with this method; otherwise, return FALSE.
boolean
hasRarray()
Returns true if this method has an rarray in it's signature
boolean
hasReservedMethodAssertion(List list, int type)
Return TRUE if the list of assertions has the specified reserved method assertion; FALSE otherwise.
boolean
hasReservedMethodAssertion(int type)
Return TRUE if the method has the specified reserved method assertion; FALSE otherwise.
boolean
hasUnreservedMethodAssertion(List list, boolean any)
Return TRUE if the list of assertions has the type of unreserved method assertion; FALSE otherwise.
boolean
hasUnreservedMethodAssertion(boolean any)
Return TRUE if the method has any unreserved method (when any is TRUE) assertion or has an unreserved method assertion with a throws clause (if any is FALSE); otherwise, return FALSE.
int
hashCode()
boolean
isAbstract()
Return TRUE if the method is abstract; otherwise, return FALSE.
boolean
isBuiltIn()
Return the built-in attribute for the method.
boolean
isFinal()
Return TRUE if the method is final; otherwise, return FALSE.
boolean
isImplicitException(SymbolID id)
boolean
isReturnCopy()
Return the copy mode for the return type.
boolean
isStatic()
Return TRUE if the method is static; otherwise, return FALSE.
int
numRarray()
Returns the number of rarray arguments in the method's argument list.
void
removeAttribute(String key)
boolean
sameBaseSignature(Method m)
Return TRUE if the base signature of the specified method matches that of this method; otherwise, return FALSE.
boolean
sameSignature(Method m)
Return TRUE if the signature of the specified method matches that of this method; otherwise, return FALSE.
boolean
sameSignature(Method m, boolean compExt)
Return TRUE if the signature of the specified method matches that of this method; otherwise, return FALSE.
void
setAttribute(String key)
void
setAttribute(String key, String value)
void
setBuiltIn(boolean is_builtin)
Set the built-in attribute.
void
setComment(Comment comment)
Set the comment for the method.
void
setCommunicationModifier(int modifier)
Set the communication modifier for the method.
void
setDefinitionModifier(int modifier)
Set the definition modifier for the method.
void
setMethodName(String shortName)
Set the names of the method (a standard SIDL identifier).
void
setMethodName(String shortName, String extension)
Set the names of the method (a standard SIDL identifier).
void
setReturnCopy(boolean copy)
Set the copy mode for the return type.
void
setReturnType(Type type)
Set the return type for the method.
Method
spawnNonblockingRecv()
Create the non-blocking recv variant iff method is nonblocking
Method
spawnNonblockingSend()
Create the non-blocking send variant iff method is nonblocking
Method
spawnPostHook()
Method
spawnPostHook(boolean useCReturn, boolean without)
Create the post hook variant iff hooks are turned on.
Method
spawnPreHook()
Method
spawnPreHook(boolean withinout)
Create the pre hook variant iff hooks are turned on.

Methods inherited from class gov.llnl.babel.symbols.ASTNode

checkFrozen, clone, freeze, protectCollection, protectList, protectMap, protectSet

Field Details

ABSTRACT

public static final int ABSTRACT
Field Value:
1

FINAL

public static final int FINAL
Field Value:
2

LOCAL

public static final int LOCAL
Field Value:
1

NONBLOCKING

public static final int NONBLOCKING
Field Value:
3

NONBLOCKING_RECV

public static final int NONBLOCKING_RECV
Field Value:
5

NONBLOCKING_SEND

public static final int NONBLOCKING_SEND
Field Value:
4

NORMAL

public static final int NORMAL
Field Value:
0

ONEWAY

public static final int ONEWAY
Field Value:
2

STATIC

public static final int STATIC
Field Value:
3

s_comm_mod

public static final String[] s_comm_mod

s_def_mod

public static final String[] s_def_mod

Constructor Details

Method

public Method(Context context)
Create an empty Method object that will be built by calls to other member functions.

Method Details

addArgument

public void addArgument(Argument arg)
Add another argument to the end of the list of method arguments.
Parameters:
arg - The argument to be appended to the object's argument list

addAssertion

public void addAssertion(Assertion assertion)
            throws AssertionException
Add the specified assertion to the proper assertion list for this method.
Parameters:
assertion - The assertion to be added.
Throws:
AssertionException - The exception thrown if the assertion is not valid.

addImplicitThrows

public void addImplicitThrows(SymbolID id)
Add a symbol identifier to the list of exceptions thrown, but do not treat it as an explicit throw.

addMetadata

public void addMetadata(String keyword,
                        String value)
Add a (keyword, value) pair to the metadata for this object.
Specified by:
addMetadata in interface IMetadata

addRarrayIndex

public void addRarrayIndex(Collection new_indices)
add a set of required rarray indices to the set of indices

addRarrayIndex

public void addRarrayIndex(String s)
add a required rarray index to the set of indices

addSplicerContents

public void addSplicerContents(String location,
                               String name,
                               String impl)
Add the specified contents to the splicer block identified by the location and name.

addThrows

public void addThrows(SymbolID id)
Add a symbol identifier to the list of explicit supported exceptions for this method. No error checking is performed to ensure that the specified symbol is valid in the throws clause; such checking must be performed by the parser. An explicit exception is one that is listed in the SIDL file rather than the implicit runtime exception.
Parameters:
id - The symbol identifier to be added

cloneMethod

public Method cloneMethod()
Return a shallow copy of this method object. This method should never fail since this method is cloneable. Send in the clones.

equals

public boolean equals(Object o)

freeze

public void freeze()
Overrides:
freeze in interface ASTNode

getArgumentByName

public Argument getArgumentByName(String s)
Return an the argument whose formal name matches the passed in string. Return null if the string does not match anything.

getArgumentList

public List getArgumentList()
Return the array of arguments in an ArrayList, where each element is an Argument.

getArgumentListWithIndices

public List getArgumentListWithIndices()
Return the array of arguments in an ArrayList container. This returns all the arguments in the argument list, including those that are indices to an Rarray.

getArgumentListWithOutIndices

public List getArgumentListWithOutIndices()
Return the array of arguments in an ArrayList container. This method returns only arguments that are not used as indices to an Rarray

getArgumentMode

public int getArgumentMode(String name)
Return the mode of the argument with the specified formal name, if any; otherwise, return -1.
Parameters:
name - The formal argument name whose type is to be returned.

getArgumentType

public Type getArgumentType(String name)
Return the Type of the argument with the specified formal name, if any; otherwise, return null.
Parameters:
name - The formal argument name whose type is to be returned.

getAttribute

public String getAttribute(String key)
Specified by:
getAttribute in interface Attributes

getAttributes

public Set getAttributes()
Specified by:
getAttributes in interface Attributes

getBasicArrays

public Set getBasicArrays()
Return the Set of basic array references including arrays of fundamental types such as double, int, etc. Each element of the set is a SymbolID.

getBlockingMethodName

public String getBlockingMethodName()
Return the nonblocking method name (if NONBLOCKING), else return long name

getComment

public Comment getComment()
Return the comment for the method. This may be null if there is no comment.

getCommunicationModifier

public int getCommunicationModifier()
Return the communication modifier for this method.

getCommunicationModifierString

public String getCommunicationModifierString()
Return the communication modifier string for this method.

getCorrectMethodName

public String getCorrectMethodName()
This method is used for language bindings that support overloading. For most methods it will return the short name, but if the method requires the long name for some reason determinable inside the method class, the long name is returned. For example, nonblocking send and receive always use the long method name.

getDefinitionModifier

public int getDefinitionModifier()
Return the definition modifier for the method.

getDefinitionModifier

public String getDefinitionModifier(boolean is_interface)
Return the explicit definition modifier string for the method based on the type of extendable in which it belongs.
Parameters:
is_interface - If TRUE, then the extendable is an interface so do NOT include ABSTRACT since it is implicit.
Returns:
the string associated with the explicit definition modifier

getExplicitThrows

public Set getExplicitThrows()
Return the Set of explicit exceptions that may be thrown by this method. Each element of the set is a SymbolID.

getImplicitThrows

public Set getImplicitThrows()
Return the Set of implicit exceptions that may be thrown by this method. Each element of the set is a SymbolID.

getLongMethodName

public String getLongMethodName()
Return the long method name (a standard SIDL identifier).

getMaxArrayIterMacros

public int getMaxArrayIterMacros(char type)
Return the number of array iteration macros in the assertions of the method of the specified return type. Valid types are given in MethodCall.java as MACRO_RETURNS_* values.

getMetadata

public Metadata getMetadata()
Return the metadata associated with this object.
Specified by:
getMetadata in interface IMetadata

getNameExtension

public String getNameExtension()
Return the method name extension (a standard SIDL identifier).

getPostconditions

public List getPostconditions()
Return the list of postconditions as an ArrayList of Assertion elements.

getPreconditions

public List getPreconditions()
Return the list of preconditions as an ArrayList of Assertion elements.

getRarrayIndices

public Set getRarrayIndices()
Return the set of rarray indices required in the arg list. (Returns null if there are no indices required)

getRarrayInfo

public Map getRarrayInfo()
This returns an array list of RarrayInfo objects that contains the info for every rarray index used in this method.

getReturnType

public Type getReturnType()
Return the return type for the method or throw NullPointerException

getReturnType

public String getReturnType(String parent_pkg)
Return the string corresponding to the return type for this method. Note the string may represent an abbreviated return type (i.e., a type stripped of its package information).
Parameters:
parent_pkg - The string containing the parent package. When not null, it is used to strip the package from the return string if it is in the specified package.
Returns:
the string containing the possibly abbreviated return type.

getShortMethodName

public String getShortMethodName()
Return the short method name (a standard SIDL identifier).

getSignature

public String getSignature()
Return the signature of the method. The signature does not include the attributes abstract, final, or static. It also does not abbreviate package names.

getSignature

public String getSignature(boolean is_interface,
                           String parent_pkg)
Return the signature of the method, including the definition modifier based on the extendable type. Also, optionally abbreviate type if in specified package.
Parameters:
is_interface - TRUE if interface and want the implicit definition modifier excluded from the result; otherwise, FALSE
parent_pkg - The string containing the parent package. When not null, it is used to strip the package from the return string if it is in the specified package.
Returns:
The string containing the full signature.

getSignaturePreface

public String getSignaturePreface(boolean is_interface,
                                  String parent_pkg)
Return the concatenation of the explicit definition modifier, copy, return type, name and extension.
Parameters:
is_interface - TRUE if an interface and want the implicit definition modifier excluded from the result; otherwise, FALSE.
parent_pkg - The string containing the parent package. When not null, it is used to strip the package from the return string if it is in the specified package.
Returns:
the string containing the preface

getSplicerBlocks

public ArrayList getSplicerBlocks(String location)
Return splicer blocks for the specified location.

getSplicerContents

public ArrayList getSplicerContents(String location,
                                    String name)
Return splicer contents for the specified location and splicer name.

getSymbolReferences

public Set getSymbolReferences()
Return the Set of symbols referred to by this method. Each element of the set is a SymbolID.

getSymbolReferencesWithoutExceptions

public Set getSymbolReferencesWithoutExceptions()
Return the Set of symbols referred to by this method, except for the exceptions it throws. Each element of the set is a SymbolID.

getThrows

public Set getThrows()
Return the Set of exceptions that may be thrown by this method. Each element of the set is a SymbolID.

hasArrayOrderSpec

public boolean hasArrayOrderSpec()
Return TRUE if and only if at least one argument of this method is an array with an ordering specification. For example, calling this on methods without array arguments will return FALSE while calling it on something like void doIt(in array<int, 2, row-major> x); will return TRUE.

hasAttribute

public boolean hasAttribute(String key)
Specified by:
hasAttribute in interface Attributes

hasExplicitExceptions

public boolean hasExplicitExceptions()

hasPureAssertion

public boolean hasPureAssertion()
Return TRUE if PURE clause appears in the assertions associated with this method; otherwise, return FALSE.

hasRarray

public boolean hasRarray()
Returns true if this method has an rarray in it's signature

hasReservedMethodAssertion

public boolean hasReservedMethodAssertion(List list,
                                          int type)
Return TRUE if the list of assertions has the specified reserved method assertion; FALSE otherwise.

hasReservedMethodAssertion

public boolean hasReservedMethodAssertion(int type)
Return TRUE if the method has the specified reserved method assertion; FALSE otherwise.

hasUnreservedMethodAssertion

public boolean hasUnreservedMethodAssertion(List list,
                                            boolean any)
Return TRUE if the list of assertions has the type of unreserved method assertion; FALSE otherwise.

hasUnreservedMethodAssertion

public boolean hasUnreservedMethodAssertion(boolean any)
Return TRUE if the method has any unreserved method (when any is TRUE) assertion or has an unreserved method assertion with a throws clause (if any is FALSE); otherwise, return FALSE.

hashCode

public int hashCode()

isAbstract

public boolean isAbstract()
Return TRUE if the method is abstract; otherwise, return FALSE.

isBuiltIn

public boolean isBuiltIn()
Return the built-in attribute for the method.

isFinal

public boolean isFinal()
Return TRUE if the method is final; otherwise, return FALSE.

isImplicitException

public boolean isImplicitException(SymbolID id)

isReturnCopy

public boolean isReturnCopy()
Return the copy mode for the return type.

isStatic

public boolean isStatic()
Return TRUE if the method is static; otherwise, return FALSE.

numRarray

public int numRarray()
Returns the number of rarray arguments in the method's argument list.

removeAttribute

public void removeAttribute(String key)
            throws UnknownAttributeException
Specified by:
removeAttribute in interface Attributes

sameBaseSignature

public boolean sameBaseSignature(Method m)
Return TRUE if the base signature of the specified method matches that of this method; otherwise, return FALSE. For them to match, the methods must have the same short and the same arguments.
Parameters:
m - The method whose base signature is being compared.

sameSignature

public boolean sameSignature(Method m)
Return TRUE if the signature of the specified method matches that of this method; otherwise, return FALSE. For signatures to match, the methods must have the same return types and mode, the same names, the same arguments, and the same throws clauses. They must also have the same communication modifiers. The signature does not include modifiers static, abstract, or final.
Parameters:
m - The method whose signature is being compared with.

sameSignature

public boolean sameSignature(Method m,
                             boolean compExt)
Return TRUE if the signature of the specified method matches that of this method; otherwise, return FALSE. For signatures to match, the methods must have the same return types and mode, the same names, the same arguments, and the same throws clauses. They must also have the same communication modifiers. The signature does not include modifiers static, abstract, or final.
Parameters:
m - The method whose signature is being compared with.
compExt - True if the comparision should compare method extensions. (False for from clauses)

setAttribute

public void setAttribute(String key)
Specified by:
setAttribute in interface Attributes

setAttribute

public void setAttribute(String key,
                         String value)
Specified by:
setAttribute in interface Attributes

setBuiltIn

public void setBuiltIn(boolean is_builtin)
Set the built-in attribute.
Parameters:
is_builtin - TRUE if the method is/should be built-in; otherwise, false.

setComment

public void setComment(Comment comment)
Set the comment for the method.
Parameters:
comment - The comment associated with the method. May be null.

setCommunicationModifier

public void setCommunicationModifier(int modifier)
Set the communication modifier for the method.
Parameters:
modifier - The method's communication modifier. Valid values are NORMAL, LOCAL, and ONEWAY.

setDefinitionModifier

public void setDefinitionModifier(int modifier)
Set the definition modifier for the method.
Parameters:
modifier - The method's definnition modifier. Valid values are NORMAL, ABSTRACT, FINAL, and STATIC.

setMethodName

public void setMethodName(String shortName)
Set the names of the method (a standard SIDL identifier). Use of this method will result in the long and short name being identical.
Parameters:
shortName - The short name of the method

setMethodName

public void setMethodName(String shortName,
                          String extension)
Set the names of the method (a standard SIDL identifier).
Parameters:
shortName - The short name of the method
extension - The method name extension used in combination with the short name to uniquely identify this method

setReturnCopy

public void setReturnCopy(boolean copy)
Set the copy mode for the return type.
Parameters:
copy - If TRUE then the return interface/class is to be copied to the caller; otherwise, it is not.

setReturnType

public void setReturnType(Type type)
Set the return type for the method.
Parameters:
type - The return type to be used. Note that a void return type must be represented by a Type.VOID NOT a null Type reference.

spawnNonblockingRecv

public Method spawnNonblockingRecv()
            throws CodeGenerationException
Create the non-blocking recv variant iff method is nonblocking
Returns:
new Method or null;

spawnNonblockingSend

public Method spawnNonblockingSend()
            throws CodeGenerationException
Create the non-blocking send variant iff method is nonblocking
Returns:
new Method or null;

spawnPostHook

public Method spawnPostHook()
            throws CodeGenerationException

spawnPostHook

public Method spawnPostHook(boolean useCReturn,
                            boolean without)
            throws CodeGenerationException
Create the post hook variant iff hooks are turned on. The return argument is always converted to an in argument
Parameters:
useCReturn - if true, uses the return name given in C.java. If false, uses the Fortran variant name
without - If false, all out and inout args are converted to in args only. If true, inouts and outs remain such.
Returns:
new Method or null;

spawnPreHook

public Method spawnPreHook()
            throws CodeGenerationException

spawnPreHook

public Method spawnPreHook(boolean withinout)
            throws CodeGenerationException
Create the pre hook variant iff hooks are turned on. Always filters out the return value and the out args
Parameters:
withinout - If false, all in and inout args are converted to in args only. If true, inouts remain inout. out args are always removed.
Returns:
new Method or null;