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

- - ### Field Summary

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

  - ### Constructor Summary

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

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    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, equals, getColumnNumber, getLastColumnNumber, getLastLineNumber, getLineNumber, getMetaDataMap, getNodeMetaData, getNodeMetaData, hashCode, putNodeMetaData, removeNodeMetaData, setColumnNumber, setLastColumnNumber, setLastLineNumber, setLineNumber, setNodeMetaData, setSourcePosition`

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, 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)