Package org.codehaus.groovy.ast.expr

# Class VariableExpression

java.lang.Object
org.codehaus.groovy.ast.ASTNode
org.codehaus.groovy.ast.AnnotatedNode
org.codehaus.groovy.ast.expr.Expression
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".

Author:
  James Strachan

## Field Summary

Fields
Modifier and Type
Field
Description
`static final VariableExpression`
`SUPER_EXPRESSION`
`static final VariableExpression`
`THIS_EXPRESSION`

## Constructor Summary

Constructors
Constructor
Description
`VariableExpression(String variable)`
`VariableExpression(String variable, ClassNode type)`
`VariableExpression(Variable variable)`

## Method Summary

Modifier and Type
Method
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 :
`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:
`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, 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 Details

### THIS_EXPRESSION

public static final VariableExpression THIS_EXPRESSION

### SUPER_EXPRESSION

public static final VariableExpression SUPER_EXPRESSION

## Constructor Details

### VariableExpression

public VariableExpression(String variable, ClassNode type)

### VariableExpression

public VariableExpression(String variable)

### VariableExpression

public VariableExpression(Variable variable)

## Method Details

### 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`
Parameters:
  `transformer` -

### 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)