Class ASTExpr
java.lang.Object
org.antlr.stringtemplate.language.Expr
org.antlr.stringtemplate.language.ASTExpr
- Direct Known Subclasses:
ConditionalExpr
A single string template expression enclosed in $...; separator=...$
parsed into an AST chunk to be evaluated.
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final String
static final String
static final String
static final String
static final String
static final String
static final Map
static final String
Using an expr option w/o value, makes options table hold EMPTY_OPTION value for that key.static final StringTemplate
Used to indicate "default:key" in maps within groupsstatic final int
static final Set
John Snyders gave me an example implementation for this checkingFields inherited from class org.antlr.stringtemplate.language.Expr
enclosingTemplate, indentation
-
Constructor Summary
ConstructorsConstructorDescriptionASTExpr
(StringTemplate enclosingTemplate, antlr.collections.AST exprTree, Map options) -
Method Summary
Modifier and TypeMethodDescriptionprotected Object
accessField
(Field f, Object o, Object value) For now, we can only add two objects as strings; convert objects to Strings then cat.applyListOfAlternatingTemplates
(StringTemplate self, Object attributeValue, List templatesToApply) applyTemplateToListOfAttributes
(StringTemplate self, List attributes, StringTemplate templateToApply) For invalid input: '<'names,phones:{n,p | ...}> treat the names, phones as lists to be walked in lock step as n=names[i], p=phones[i].protected static Object
protected static Iterator
static Object
convertArrayToList
(Object value) Do a standard conversion of array attributes to a List.protected void
Evaluate an argument list within the context of the enclosing template but store the values in the context of self, the new embedded template.evaluateExpression
(StringTemplate self, Object expr) A expr is normally just a string literal, but is still an AST that we must evaluate.Return the first attribute if multiple valued or the attribute itself if single-valued.antlr.collections.AST
getAST()
Return the tree interpreted when this template is written out.protected Method
getObjectProperty
(StringTemplate self, Object o, Object propertyName) Return o.getPropertyName() given o and propertyName.getTemplateInclude
(StringTemplate enclosing, String templateName, StringTemplateAST argumentsAST) Call a string template with args and return result.protected void
Grab and cache options; verify options are validprotected Object
invokeMethod
(Method m, Object o, Object value) Return the last attribute if multiple valued or the attribute itself if single-valued.Return the length of a multiple valued attribute or 1 if it is a single attribute.protected Object
rawGetObjectProperty
(StringTemplate self, Object o, Object property) Return the everything but the first attribute if multiple valued or null if single-valued.protected void
setSoleFormalArgumentToIthValue
(StringTemplate embedded, Map argumentContext, Object ithValue) Return a new list w/o null values.boolean
Normally StringTemplate tests presence or absence of attributes for adherence to my principles of separation, but some people disagree and want to change.toString()
Return all but the last element.protected int
write
(StringTemplate self, Object o, StringTemplateWriter out) int
write
(StringTemplate self, StringTemplateWriter out) To write out the value of an ASTExpr, invoke the evaluator in eval.g to walk the tree writing out the values.int
writeAttribute
(StringTemplate self, Object o, StringTemplateWriter out) How to spit out an object.protected int
writeIterableValue
(StringTemplate self, Object o, StringTemplateWriter out) protected int
writePOJO
(StringTemplate self, Object o, StringTemplateWriter out) protected int
writeTemplate
(StringTemplate self, Object o, StringTemplateWriter out) Methods inherited from class org.antlr.stringtemplate.language.Expr
getEnclosingTemplate, getIndentation, setIndentation
-
Field Details
-
MISSING
public static final int MISSING- See Also:
-
DEFAULT_ATTRIBUTE_NAME
- See Also:
-
DEFAULT_ATTRIBUTE_NAME_DEPRECATED
- See Also:
-
DEFAULT_INDEX_VARIABLE_NAME
- See Also:
-
DEFAULT_INDEX0_VARIABLE_NAME
- See Also:
-
DEFAULT_MAP_VALUE_NAME
- See Also:
-
DEFAULT_MAP_KEY_NAME
- See Also:
-
MAP_KEY_VALUE
Used to indicate "default:key" in maps within groups -
EMPTY_OPTION
Using an expr option w/o value, makes options table hold EMPTY_OPTION value for that key.- See Also:
-
defaultOptionValues
-
supportedOptions
John Snyders gave me an example implementation for this checking
-
-
Constructor Details
-
ASTExpr
-
-
Method Details
-
getAST
public antlr.collections.AST getAST()Return the tree interpreted when this template is written out. -
write
To write out the value of an ASTExpr, invoke the evaluator in eval.g to walk the tree writing out the values. For efficiency, don't compute a bunch of strings and then pack them together. Write out directly. Compute separator and wrap expressions, save as strings so we don't recompute for each value in a multi-valued attribute or expression. If they set anchor option, then inform the writer to push current char position.- Specified by:
write
in classExpr
- Throws:
IOException
-
handleExprOptions
Grab and cache options; verify options are valid -
applyTemplateToListOfAttributes
public Object applyTemplateToListOfAttributes(StringTemplate self, List attributes, StringTemplate templateToApply) For invalid input: '<'names,phones:{n,p | ...}> treat the names, phones as lists to be walked in lock step as n=names[i], p=phones[i]. -
applyListOfAlternatingTemplates
public Object applyListOfAlternatingTemplates(StringTemplate self, Object attributeValue, List templatesToApply) -
setSoleFormalArgumentToIthValue
protected void setSoleFormalArgumentToIthValue(StringTemplate embedded, Map argumentContext, Object ithValue) -
getObjectProperty
Return o.getPropertyName() given o and propertyName. If o is a stringtemplate then access it's attributes looking for propertyName instead (don't check any of the enclosing scopes; look directly into that object). Also try isXXX() for booleans. Allow Map as special case (grab value for key). Cache repeated requests for obj.prop within same group. -
rawGetObjectProperty
-
accessField
- Throws:
IllegalAccessException
-
invokeMethod
protected Object invokeMethod(Method m, Object o, Object value) throws IllegalAccessException, InvocationTargetException -
getMethod
-
testAttributeTrue
Normally StringTemplate tests presence or absence of attributes for adherence to my principles of separation, but some people disagree and want to change. For 2.0, if the object is a boolean, do something special. $if(boolean)$ will actually test the value. Now, this breaks my rules of entanglement listed in my paper, but it truly surprises programmers to have booleans always true. Further, the key to isolating logic in the model is avoiding operators (for which you need attribute values). But, no operator is needed to use boolean values. Well, actually I guess "!" (not) is an operator. Regardless, for practical reasons, I'm going to technically violate my rules as I currently have them defined. Perhaps for a future version of the paper I will refine the rules. Post 2.1, I added a check for non-null Iterators, Collections, ... with size==0 to return false. TJP 5/1/2005 -
add
For now, we can only add two objects as strings; convert objects to Strings then cat. -
getTemplateInclude
public StringTemplate getTemplateInclude(StringTemplate enclosing, String templateName, StringTemplateAST argumentsAST) Call a string template with args and return result. Do not convert to a string yet. It may need attributes that will be available after this is inserted into another template. -
writeAttribute
How to spit out an object. If it's not a StringTemplate nor a List, just do o.toString(). If it's a StringTemplate, do o.write(out). If it's a Vector, do a write(out, o.elementAt(i)) for all elements. Note that if you do something weird like set the values of a multivalued tag to be vectors, it will effectively flatten it. If self is an embedded template, you might have specified a separator arg; used when is a vector. -
write
-
writePOJO
- Throws:
IOException
-
writeTemplate
protected int writeTemplate(StringTemplate self, Object o, StringTemplateWriter out) throws IOException - Throws:
IOException
-
writeIterableValue
protected int writeIterableValue(StringTemplate self, Object o, StringTemplateWriter out) throws IOException - Throws:
IOException
-
evaluateExpression
A expr is normally just a string literal, but is still an AST that we must evaluate. The expr can be any expression such as a template include or string cat expression etc... Evaluate with its own writer so that we can convert to string and then reuse, don't want to compute all the time; must precompute w/o writing to output buffer. -
evaluateArguments
Evaluate an argument list within the context of the enclosing template but store the values in the context of self, the new embedded template. For example, bold(item=item) means that bold.item should get the value of enclosing.item. -
convertArrayToList
Do a standard conversion of array attributes to a List. Wrap the array instead of copying like old version. Make an ArrayWrappedInList that knows to create an ArrayIterator. -
convertAnythingIteratableToIterator
-
convertAnythingToIterator
-
first
Return the first attribute if multiple valued or the attribute itself if single-valued. Used in invalid input: '<'names:first()> -
rest
Return the everything but the first attribute if multiple valued or null if single-valued. Used in invalid input: '<'names:rest()>. -
last
Return the last attribute if multiple valued or the attribute itself if single-valued. Used in invalid input: '<'names:last()>. This is pretty slow as it iterates until the last element. Ultimately, I could make a special case for a List or Vector. -
strip
Return a new list w/o null values. -
trunc
Return all but the last element. trunc(x)=null if x is single-valued. -
length
Return the length of a multiple valued attribute or 1 if it is a single attribute. If attribute is null return 0. Special case several common collections and primitive arrays for speed. This method by Kay Roepke. -
getOption
-
toString
-