Package org.codehaus.groovy.ast.expr
Class DeclarationExpression
java.lang.Object
org.codehaus.groovy.ast.ASTNode
org.codehaus.groovy.ast.AnnotatedNode
org.codehaus.groovy.ast.expr.Expression
org.codehaus.groovy.ast.expr.BinaryExpression
org.codehaus.groovy.ast.expr.DeclarationExpression
- All Implemented Interfaces:
GroovydocHolder<AnnotatedNode>
,NodeMetaDataHandler
public class DeclarationExpression extends BinaryExpression
Represents one or more local variables. Typically it is a single local variable
declared by name with an expression like "def foo" or with type "String foo". However,
the multiple assignment feature allows you to create two or more variables using
an expression like:
def (x, y) = [1, 2]
.
You can access the left hand side of a declaration using the
"Expression getLeftExpression()
" method. In which case you might then
use instanceof
and casting to perform operations specific to a
single local variable (VariableExpression
) or for the multiple
assignment case (TupleExpression
).
Alternatively, if isMultipleAssignmentDeclaration()
is false
you can use the method "VariableExpression getVariableExpression()
" method.
Similarly, if isMultipleAssignmentDeclaration()
is true
you can use the method "TupleExpression getTupleExpression()
" method.
Calling either of these expression getters when the "isMultipleAssignment" condition
is not appropriate is unsafe and will result in a ClassCastException
.
-
Field Summary
Fields inherited from class org.codehaus.groovy.ast.expr.Expression
EMPTY_ARRAY
Fields inherited from interface groovy.lang.groovydoc.GroovydocHolder
DOC_COMMENT
-
Constructor Summary
Constructors Constructor Description DeclarationExpression(Expression left, Token operation, Expression right)
Creates a DeclarationExpression for Expressions like "def (x, y) = [1, 2]"DeclarationExpression(VariableExpression left, Token operation, Expression right)
Creates a DeclarationExpression for VariableExpressions like "def x" or "String y = 'foo'". -
Method Summary
Modifier and Type Method Description java.lang.String
getText()
TupleExpression
getTupleExpression()
This method returns the left hand side of the declaration cast to the TupleExpression type.VariableExpression
getVariableExpression()
This method returns the left hand side of the declaration cast to the VariableExpression type.boolean
isMultipleAssignmentDeclaration()
This method tells you if this declaration is a multiple assignment declaration, which has the form "def (x, y) = ..." in Groovy.void
setLeftExpression(Expression leftExpression)
This method sets the leftExpression for this BinaryExpression.void
setRightExpression(Expression rightExpression)
Expression
transformExpression(ExpressionTransformer transformer)
Return a copy of the expression calling the transformer on any nested expressionsvoid
visit(GroovyCodeVisitor visitor)
Methods inherited from class org.codehaus.groovy.ast.expr.BinaryExpression
getLeftExpression, getOperation, getRightExpression, isSafe, newAssignmentExpression, newInitializationExpression, setSafe, toString
Methods inherited from class org.codehaus.groovy.ast.expr.Expression
getType, setType, transformExpressions, transformExpressions
Methods inherited from class org.codehaus.groovy.ast.AnnotatedNode
addAnnotation, addAnnotations, getAnnotations, getAnnotations, getDeclaringClass, getGroovydoc, getInstance, hasNoRealSourcePosition, isSynthetic, setDeclaringClass, setHasNoRealSourcePosition, setSynthetic
Methods inherited from class org.codehaus.groovy.ast.ASTNode
copyNodeMetaData, getColumnNumber, getLastColumnNumber, getLastLineNumber, getLineNumber, getMetaDataMap, setColumnNumber, setLastColumnNumber, setLastLineNumber, setLineNumber, setMetaDataMap, setSourcePosition
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.codehaus.groovy.ast.NodeMetaDataHandler
copyNodeMetaData, getNodeMetaData, getNodeMetaData, getNodeMetaData, putNodeMetaData, removeNodeMetaData, setNodeMetaData
-
Constructor Details
-
DeclarationExpression
Creates a DeclarationExpression for VariableExpressions like "def x" or "String y = 'foo'".- Parameters:
left
- the left hand side of a variable declarationoperation
- the operation, typically an assignment operatorright
- the right hand side of a declaration
-
DeclarationExpression
Creates a DeclarationExpression for Expressions like "def (x, y) = [1, 2]"- Parameters:
left
- the left hand side of a declaration. Must be either a VariableExpression or a TupleExpression with at least one element.operation
- the operation, typically an assignment operatorright
- the right hand side of a declaration
-
-
Method Details
-
visit
- Overrides:
visit
in classBinaryExpression
-
getVariableExpression
This method returns the left hand side of the declaration cast to the VariableExpression type. This is an unsafe method to call. In a multiple assignment statement, the left hand side will be a TupleExpression and a ClassCastException will occur. If you invoke this method then be sure to invoke isMultipleAssignmentDeclaration() first to check that it is safe to do so. If that method returns true then this method is safe to call.- Returns:
- left hand side of normal variable declarations
- Throws:
java.lang.ClassCastException
- if the left hand side is not a VariableExpression (and is probably a multiple assignment statement).
-
getTupleExpression
This method returns the left hand side of the declaration cast to the TupleExpression type. This is an unsafe method to call. In a single assignment statement, the left hand side will be a VariableExpression and a ClassCastException will occur. If you invoke this method then be sure to invoke isMultipleAssignmentDeclaration() first to check that it is safe to do so. If that method returns true then this method is safe to call.- Returns:
- left hand side of multiple assignment declarations
- Throws:
java.lang.ClassCastException
- if the left hand side is not a TupleExpression (and is probably a VariableExpression).
-
getText
public java.lang.String getText()- Overrides:
getText
in classBinaryExpression
-
setLeftExpression
This method sets the leftExpression for this BinaryExpression. The parameter must be either a VariableExpression or a TupleExpression with one or more elements.- Overrides:
setLeftExpression
in classBinaryExpression
- Parameters:
leftExpression
- either a VariableExpression or a TupleExpression with one or more elements.
-
setRightExpression
- Overrides:
setRightExpression
in classBinaryExpression
-
transformExpression
Description copied from class:Expression
Return a copy of the expression calling the transformer on any nested expressions- Overrides:
transformExpression
in classBinaryExpression
-
isMultipleAssignmentDeclaration
public boolean isMultipleAssignmentDeclaration()This method tells you if this declaration is a multiple assignment declaration, which has the form "def (x, y) = ..." in Groovy. If this method returns true, then the left hand side is an ArgumentListExpression. Do not call "getVariableExpression()" on this object if this method returns true, instead use "getLeftExpression()".- Returns:
- true if this declaration is a multiple assignment declaration, which means the left hand side is an ArgumentListExpression.
-