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:
  `GroovydocHolder<AnnotatedNode>`, `NodeMetaDataHandler`, `Variable`

    public class VariableExpression
    extends Expression
    implements Variable

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

- ## Field Summary

  Fields
  Modifier and Type | Field | Description
  --- | --- | ---
  `static VariableExpression` | `SUPER_EXPRESSION` |
  `static VariableExpression` | `THIS_EXPRESSION` |

  ### 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
  --- | ---
  `VariableExpression​(String variable)` |
  `VariableExpression​(String name, 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, 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`

- ## Field Details

  - ### THIS_EXPRESSION

    public static final VariableExpression THIS_EXPRESSION

  - ### SUPER_EXPRESSION

    public static final VariableExpression SUPER_EXPRESSION

- ## Constructor Details

  - ### VariableExpression

    public VariableExpression​(String name, 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`

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