public class VariableExpression extends Expression implements Variable
Modifier and Type | Field and Description |
---|---|
static VariableExpression |
SUPER_EXPRESSION |
static VariableExpression |
THIS_EXPRESSION |
Constructor and Description |
---|
VariableExpression(String variable) |
VariableExpression(String variable,
ClassNode type) |
VariableExpression(Variable variable) |
Modifier and Type | Method and Description |
---|---|
Variable |
getAccessedVariable() |
Expression |
getInitialExpression()
expression used to initialize the variable or null of there
is no initialization.
|
int |
getModifiers() |
String |
getName()
the name of the variable
|
ClassNode |
getOriginType()
Returns the type which was used when this variable expression was created.
|
String |
getText() |
ClassNode |
getType()
the type of the variable
|
boolean |
hasInitialExpression()
returns true if there is an initialization expression
|
boolean |
isClosureSharedVariable()
Tells if this variable or the accessed variable is used in a closure context, like in the following
example :
def str = 'Hello'
def cl = { println str }
The "str" variable is closure shared.
|
boolean |
isDynamicTyped() |
boolean |
isInStaticContext()
returns true if this variable is used in a static context.
|
boolean |
isSuperExpression() |
boolean |
isThisExpression() |
boolean |
isUseReferenceDirectly()
For internal use only.
|
void |
setAccessedVariable(Variable origin) |
void |
setClosureSharedVariable(boolean inClosure)
Use this method to tell if a variable is used in a closure, like in the following example:
def str = 'Hello'
def cl = { println str }
The "str" variable is closure shared.
|
void |
setInStaticContext(boolean inStaticContext) |
void |
setModifiers(int modifiers) |
void |
setType(ClassNode cn)
Set the type of this variable.
|
void |
setUseReferenceDirectly(boolean useRef)
For internal use only.
|
String |
toString() |
Expression |
transformExpression(ExpressionTransformer transformer)
Return a copy of the expression calling the transformer on any nested expressions
|
void |
visit(GroovyCodeVisitor visitor) |
transformExpressions, transformExpressions
addAnnotation, addAnnotations, getAnnotations, getAnnotations, getDeclaringClass, hasNoRealSourcePosition, isSynthetic, setDeclaringClass, setHasNoRealSourcePosition, setSynthetic
copyNodeMetaData, getColumnNumber, getLastColumnNumber, getLastLineNumber, getLineNumber, getNodeMetaData, putNodeMetaData, removeNodeMetaData, setColumnNumber, setLastColumnNumber, setLastLineNumber, setLineNumber, setNodeMetaData, setSourcePosition
public static final VariableExpression THIS_EXPRESSION
public static final VariableExpression SUPER_EXPRESSION
public VariableExpression(String variable)
public VariableExpression(Variable variable)
public Variable getAccessedVariable()
public void setAccessedVariable(Variable origin)
public void visit(GroovyCodeVisitor visitor)
public Expression transformExpression(ExpressionTransformer transformer)
Expression
transformExpression
in class Expression
public String getName()
Variable
public Expression getInitialExpression()
Variable
getInitialExpression
in interface Variable
public boolean hasInitialExpression()
Variable
hasInitialExpression
in interface Variable
public boolean isInStaticContext()
Variable
isInStaticContext
in interface Variable
public void setInStaticContext(boolean inStaticContext)
public void setType(ClassNode cn)
accessed variable
is (shared
,
this operation is unsafe and may lead to a verify error at compile time. Instead, set the type of
the accessed variable
setType
in class Expression
cn
- the type to be set on this variablepublic boolean isDynamicTyped()
isDynamicTyped
in interface Variable
public boolean isClosureSharedVariable()
def str = 'Hello' def cl = { println str }The "str" variable is closure shared.
isClosureSharedVariable
in interface Variable
public void setClosureSharedVariable(boolean inClosure)
def str = 'Hello' def cl = { println str }The "str" variable is closure shared. The variable expression inside the closure references an accessed variable "str" which must have the closure shared flag set.
setClosureSharedVariable
in interface Variable
inClosure
- tells if this variable is later referenced in a closurepublic int getModifiers()
getModifiers
in interface Variable
public void setUseReferenceDirectly(boolean useRef)
useRef
- public boolean isUseReferenceDirectly()
public ClassNode getType()
Variable
getType
in interface Variable
getType
in class Expression
public ClassNode getOriginType()
getType()
may return a boxed type while this method would return the primitive type.getOriginType
in interface Variable
public boolean isThisExpression()
public boolean isSuperExpression()
public void setModifiers(int modifiers)