Class GenericsType

java.lang.Object
org.codehaus.groovy.ast.ASTNode
org.codehaus.groovy.ast.GenericsType
All Implemented Interfaces:
NodeMetaDataHandler

public class GenericsType extends ASTNode
Represents generic type information for parameterized types in Groovy/Java, including type variables, wildcard types, and type bounds. Supports placeholders for type parameters, wildcards with upper/lower bounds, and tracks resolution state for multi-phase compilation. Provides compatibility checking for generic type constraints.
See Also:
  • Field Details

    • EMPTY_ARRAY

      public static final GenericsType[] EMPTY_ARRAY
  • Constructor Details

    • GenericsType

      public GenericsType(ClassNode type, ClassNode[] upperBounds, ClassNode lowerBound)
      Creates a generics type with optional upper and lower bounds. The type is marked as a placeholder if the provided type is a generics placeholder.
      Parameters:
      type - the ClassNode representing the main generic type (never null)
      upperBounds - optional array of upper bound ClassNodes (e.g., for "? extends Bound" or "T extends Bound")
      lowerBound - optional lower bound ClassNode (e.g., for "? super Bound")
    • GenericsType

      public GenericsType(ClassNode basicType)
      Creates a simple generics type with no bounds for a concrete type.
      Parameters:
      basicType - the ClassNode representing the concrete type (never null)
  • Method Details

    • getType

      public ClassNode getType()
      Returns the underlying ClassNode for this generic type.
      Returns:
      the type
    • setType

      public void setType(ClassNode type)
      Sets the underlying ClassNode for this generic type.
      Parameters:
      type - the ClassNode to set (never null)
      Throws:
      NullPointerException - if type is null
    • toString

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

      public String getName()
      Returns the name of this generic type. For wildcard types, returns "?"; otherwise returns the type name.
      Returns:
      the type name
    • setName

      public void setName(String name)
      Sets the name of this generic type.
      Parameters:
      name - the type name (never null)
      Throws:
      NullPointerException - if name is null
    • isResolved

      public boolean isResolved()
      Returns true if this generic type has been resolved during compilation phases.
      Returns:
      true if resolved
    • setResolved

      public void setResolved(boolean resolved)
      Marks this generic type as resolved. Setting to true also implicitly sets resolved=true.
      Parameters:
      resolved - true to mark as resolved
    • isPlaceholder

      public boolean isPlaceholder()
      Returns true if this generic type represents a type variable placeholder (e.g., T in <T>).
      Returns:
      true if this is a placeholder type variable
    • setPlaceholder

      public void setPlaceholder(boolean placeholder)
      Marks this generic type as a placeholder type variable. Setting to true also sets resolved=true and clears the wildcard flag, since placeholders and wildcards are mutually exclusive.
      Parameters:
      placeholder - true to mark as a placeholder
    • isWildcard

      public boolean isWildcard()
      Returns true if this generic type represents a wildcard (e.g., ? or ? extends/super Bound).
      Returns:
      true if this is a wildcard type
    • setWildcard

      public void setWildcard(boolean wildcard)
      Marks this generic type as a wildcard. Clears the placeholder flag if set, since wildcards and placeholders are mutually exclusive.
      Parameters:
      wildcard - true to mark as a wildcard
    • getLowerBound

      public ClassNode getLowerBound()
      Returns the lower bound for this wildcard type (e.g., Bound in "? super Bound"), or null if this is not a lower-bounded wildcard.
      Returns:
      the lower bound ClassNode, or null
    • getUpperBounds

      public ClassNode[] getUpperBounds()
      Returns the upper bounds for this wildcard or placeholder type (e.g., Bound in ? extends Bound or Bound1 & Bound2 in T extends Bound1 & Bound2), or null if this type has no upper bounds.
      Returns:
      array of upper bound ClassNodes, or null
    • isCompatibleWith

      public boolean isCompatibleWith(ClassNode classNode)
      Determines if the provided type is compatible with this generic type specification. The check is complete and recursive, including nested generic parameters. Accounts for wildcards, placeholders, bounds, and generic type covariance rules.
      Parameters:
      classNode - the ClassNode to check for compatibility
      Returns:
      true if classNode satisfies this generic type specification