org.codehaus.groovy.ast.expr
Class VariableExpression

java.lang.Object
  extended by org.codehaus.groovy.ast.ASTNode
      extended by org.codehaus.groovy.ast.AnnotatedNode
          extended by org.codehaus.groovy.ast.expr.Expression
              extended by org.codehaus.groovy.ast.expr.VariableExpression
All Implemented Interfaces:
Variable

public class VariableExpression
extends Expression
implements Variable

Represents a local variable name, the simplest form of expression. e.g. "foo".

Version:
$Revision$
Author:
James Strachan

Field Summary
static VariableExpression SUPER_EXPRESSION
           
static VariableExpression THIS_EXPRESSION
           
 
Constructor Summary
VariableExpression(String variable)
           
VariableExpression(String variable, ClassNode type)
           
VariableExpression(Variable variable)
           
 
Method Summary
 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)
           
 
Methods inherited from class org.codehaus.groovy.ast.expr.Expression
transformExpressions, transformExpressions
 
Methods inherited from class org.codehaus.groovy.ast.AnnotatedNode
addAnnotation, addAnnotations, getAnnotations, getAnnotations, getDeclaringClass, hasNoRealSourcePosition, isSynthetic, setDeclaringClass, setHasNoRealSourcePosition, setSynthetic
 
Methods inherited from class org.codehaus.groovy.ast.ASTNode
copyNodeMetaData, getColumnNumber, getLastColumnNumber, getLastLineNumber, getLineNumber, getNodeMetaData, putNodeMetaData, removeNodeMetaData, setColumnNumber, setLastColumnNumber, setLastLineNumber, setLineNumber, setNodeMetaData, setSourcePosition
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

THIS_EXPRESSION

public static final VariableExpression THIS_EXPRESSION

SUPER_EXPRESSION

public static final VariableExpression SUPER_EXPRESSION
Constructor Detail

VariableExpression

public VariableExpression(String variable,
                          ClassNode type)

VariableExpression

public VariableExpression(String variable)

VariableExpression

public VariableExpression(Variable variable)
Method Detail

getAccessedVariable

public Variable getAccessedVariable()

setAccessedVariable

public void setAccessedVariable(Variable origin)

visit

public void visit(GroovyCodeVisitor visitor)
Overrides:
visit in class ASTNode

transformExpression

public Expression transformExpression(ExpressionTransformer transformer)
Description copied from class: Expression
Return a copy of the expression calling the transformer on any nested expressions

Specified by:
transformExpression in class Expression

getText

public String getText()
Overrides:
getText in class ASTNode

getName

public String getName()
Description copied from interface: Variable
the name of the variable

Specified by:
getName in interface Variable

toString

public String toString()
Overrides:
toString in class Object

getInitialExpression

public Expression getInitialExpression()
Description copied from interface: Variable
expression used to initialize the variable or null of there is no initialization.

Specified by:
getInitialExpression in interface Variable

hasInitialExpression

public boolean hasInitialExpression()
Description copied from interface: Variable
returns true if there is an initialization expression

Specified by:
hasInitialExpression in interface Variable

isInStaticContext

public boolean isInStaticContext()
Description copied from interface: Variable
returns true if this variable is used in a static context. A static context is any static initializer block, when this variable is declared as static or when this variable is used in a static method

Specified by:
isInStaticContext in interface Variable

setInStaticContext

public void setInStaticContext(boolean inStaticContext)

setType

public void setType(ClassNode cn)
Set the type of this variable. If you call this method from an AST transformation and that the 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

Overrides:
setType in class Expression
Parameters:
cn - the type to be set on this variable

isDynamicTyped

public boolean isDynamicTyped()
Specified by:
isDynamicTyped in interface Variable

isClosureSharedVariable

public 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.

Specified by:
isClosureSharedVariable in interface Variable
Returns:
true if this variable is used in a closure

setClosureSharedVariable

public 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. The variable expression inside the closure references an accessed variable "str" which must have the closure shared flag set.

Specified by:
setClosureSharedVariable in interface Variable
Parameters:
inClosure - tells if this variable is later referenced in a closure

getModifiers

public int getModifiers()
Specified by:
getModifiers in interface Variable

setUseReferenceDirectly

public void setUseReferenceDirectly(boolean useRef)
For internal use only. This flag is used by compiler internals and should probably be converted to a node metadata in future.

Parameters:
useRef -

isUseReferenceDirectly

public boolean isUseReferenceDirectly()
For internal use only. This flag is used by compiler internals and should probably be converted to a node metadata in future.


getType

public ClassNode getType()
Description copied from interface: Variable
the type of the variable

Specified by:
getType in interface Variable
Overrides:
getType in class Expression

getOriginType

public ClassNode getOriginType()
Returns the type which was used when this variable expression was created. For example, getType() may return a boxed type while this method would return the primitive type.

Specified by:
getOriginType in interface Variable
Returns:
the type which was used to define this variable expression

isThisExpression

public boolean isThisExpression()

isSuperExpression

public boolean isSuperExpression()

setModifiers

public void setModifiers(int modifiers)

Copyright © 2003-2012 The Codehaus. All rights reserved.