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 and Description
    --- | ---
    `static VariableExpression` | `SUPER_EXPRESSION`
    `static VariableExpression` | `THIS_EXPRESSION`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `VariableExpression(java.lang.String variable)`
    `VariableExpression(java.lang.String variable, ClassNode type)`
    `VariableExpression(Variable variable)`

  - ### Method Summary

    Methods
    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()`
    `java.lang.String` | `getName()` the name of the variable
    `ClassNode` | `getOriginType()` Returns the type which was used when this variable expression was created.
    `java.lang.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.
    `java.lang.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(java.lang.String variable,
                            ClassNode type)

    - #### VariableExpression

          public VariableExpression(java.lang.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 java.lang.String getText()

      Overrides:
        `getText` in class `ASTNode`

    - #### getName

          public java.lang.String getName()

      Description copied from interface: `Variable`
      the name of the variable
      Specified by:
        `getName` in interface `Variable`

    - #### toString

          public java.lang.String toString()

      Overrides:
        `toString` in class `java.lang.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)