Package org.apache.groovy.ast.tools

# Class ExpressionUtils

java.lang.Object
org.apache.groovy.ast.tools.ExpressionUtils

public final class ExpressionUtils extends Object
Utility methods for reasoning about Groovy AST expressions.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static boolean`
  `isNullConstant(Expression expression)`
  Checks whether the supplied expression is the `null` literal.
  `static boolean`
  `isNumberOrArrayOfNumber(ClassNode targetType, boolean recurse)`
  Determines if a type is derived from Number (or array thereof).
  `static boolean`
  `isSuperExpression(Expression expression)`
  Checks whether the supplied expression references `super`.
  `static boolean`
  `isThisExpression(Expression expression)`
  Checks whether the supplied expression references `this`.
  `static boolean`
  `isThisOrSuper(Expression expression)`
  Checks whether the supplied expression references `this` or `super`.
  `static boolean`
  `isTypeOrArrayOfType(ClassNode targetType, ClassNode type, boolean recurse)`
  Determines if a type matches another type (or array thereof).
  `static ConstantExpression`
  `transformBinaryConstantExpression(BinaryExpression be, ClassNode targetType)`
  Converts expressions like ConstantExpression(40) + ConstantExpression(2) into the simplified ConstantExpression(42) at compile time.
  `static Expression`
  `transformInlineConstants(Expression exp)`
  Transforms constants that would appear in annotations so they aren't lost.
  `static Expression`
  `transformInlineConstants(Expression exp, ClassNode attrType)`
  Converts simple expressions of constants into pre-evaluated simple constants.
  `static Expression`
  `transformListOfConstants(ListExpression origList, ClassNode attrType)`
  Given a list of constants, transform each item in the list.

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

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Method Details

  - ### isNullConstant

    public static boolean isNullConstant(Expression expression)
    Checks whether the supplied expression is the `null` literal.
    Parameters:
      `expression` - the expression to inspect
    Returns:
      `true` if the expression is a null constant

  - ### isThisExpression

    public static boolean isThisExpression(Expression expression)
    Checks whether the supplied expression references `this`.
    Parameters:
      `expression` - the expression to inspect
    Returns:
      `true` if the expression is a `this` reference

  - ### isSuperExpression

    public static boolean isSuperExpression(Expression expression)
    Checks whether the supplied expression references `super`.
    Parameters:
      `expression` - the expression to inspect
    Returns:
      `true` if the expression is a `super` reference

  - ### isThisOrSuper

    public static boolean isThisOrSuper(Expression expression)
    Checks whether the supplied expression references `this` or `super`.
    Parameters:
      `expression` - the expression to inspect
    Returns:
      `true` if the expression is either a `this` or `super` reference

  - ### isTypeOrArrayOfType

    public static boolean isTypeOrArrayOfType(ClassNode targetType, ClassNode type, boolean recurse)
    Determines if a type matches another type (or array thereof).
    Parameters:
      `targetType` - the candidate type
      `type` - the type we are checking against
      `recurse` - true if we can have multi-dimension arrays; should be false for annotation member types
    Returns:
      true if the type equals the targetType or array thereof

  - ### isNumberOrArrayOfNumber

    public static boolean isNumberOrArrayOfNumber(ClassNode targetType, boolean recurse)
    Determines if a type is derived from Number (or array thereof).
    Parameters:
      `targetType` - the candidate type
      `recurse` - true if we can have multi-dimension arrays; should be false for annotation member types
    Returns:
      true if the type equals the targetType or array thereof

  - ### transformBinaryConstantExpression

    public static ConstantExpression transformBinaryConstantExpression(BinaryExpression be, ClassNode targetType)
    Converts expressions like ConstantExpression(40) + ConstantExpression(2) into the simplified ConstantExpression(42) at compile time.
    Parameters:
      `be` - the binary expression
      `targetType` - the type of the result
    Returns:
      the transformed expression or the original if no transformation was performed

  - ### transformInlineConstants

    public static Expression transformInlineConstants(Expression exp)
    Transforms constants that would appear in annotations so they aren't lost. Subsequent processing determines whether they are valid, this retains the constant value as a constant expression.

    The attribute values of annotations must be primitive, string, annotation or enumeration constants. In various places such constants can be seen during type resolution but won't be readily accessible in later phases, e.g. they might be embedded into constructor code.

    Parameters:
      `exp` - the original expression
    Returns:
      original or transformed expression

  - ### transformInlineConstants

    public static Expression transformInlineConstants(Expression exp, ClassNode attrType)
    Converts simple expressions of constants into pre-evaluated simple constants. Handles:
    - Property expressions - referencing constants
    - Variable expressions - referencing constants
    - Typecast expressions - referencing constants
    - Binary expressions - string concatenation and numeric +, -, /, *
    - List expressions - list of constants
    Parameters:
      `exp` - the original expression
      `attrType` - the type that the final constant should be
    Returns:
      the transformed type or the original if no transformation was possible

  - ### transformListOfConstants

    public static Expression transformListOfConstants(ListExpression origList, ClassNode attrType)
    Given a list of constants, transform each item in the list.
    Parameters:
      `origList` - the list to transform
      `attrType` - the target type
    Returns:
      the transformed list or the original if nothing was changed