Class VariableExpression

All Implemented Interfaces:
GroovydocHolder<AnnotatedNode>, Cloneable, NodeMetaDataHandler, Variable

public class VariableExpression extends Expression implements Cloneable, Variable
Represents a local variable, the simplest form of expression. e.g. "foo".
  • Field Details

  • Constructor Details

    • VariableExpression

      public VariableExpression(String name, ClassNode type)
    • VariableExpression

      public VariableExpression(String name)
    • VariableExpression

      public VariableExpression(Variable av)
  • Method Details

    • clone

      public VariableExpression clone()
      Overrides:
      clone in class Object
    • setAccessedVariable

      public void setAccessedVariable(Variable variable)
    • 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 - indicates if this variable is referenced from a closure
    • setInStaticContext

      public void setInStaticContext(boolean inStaticContext)
    • setModifiers

      public void setModifiers(int modifiers)
    • setType

      public void setType(ClassNode type)
      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
    • 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 the future.
    • getAccessedVariable

      public Variable getAccessedVariable()
    • getInitialExpression

      public Expression getInitialExpression()
      Description copied from interface: Variable
      Returns the 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
    • getModifiers

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

      public String getName()
      Description copied from interface: Variable
      Returns the name of the variable.
      Specified by:
      getName in interface Variable
    • getText

      public String getText()
      Overrides:
      getText in class ASTNode
    • getType

      public ClassNode getType()
      Description copied from interface: Variable
      Returns 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
    • 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
    • isDynamicTyped

      public boolean isDynamicTyped()
      Specified by:
      isDynamicTyped 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
    • isSuperExpression

      public boolean isSuperExpression()
    • isThisExpression

      public boolean isThisExpression()
    • 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 the future.
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • transformExpression

      public Expression transformExpression(ExpressionTransformer transformer)
      Description copied from class: Expression
      Transforms this expression and any nested expressions.
      Specified by:
      transformExpression in class Expression
    • visit

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