Class GenericsUtils

java.lang.Object
org.codehaus.groovy.ast.tools.GenericsUtils

public class GenericsUtils extends Object
Utility methods to deal with generic types.
  • Field Details

  • Constructor Details

    • GenericsUtils

      public GenericsUtils()
  • Method Details

    • alignGenericTypes

      @Deprecated public static GenericsType[] alignGenericTypes(GenericsType[] redirectGenericTypes, GenericsType[] parameterizedTypes, GenericsType[] alignmentTarget)
      Deprecated.
      You shouldn't call this method because it is inherently unreliable
      Given a parameterized type and a generic type information, aligns actual type parameters. For example, if a class uses generic type
      <T,U,V>
      (redirectGenericTypes), is used with actual type parameters
      <java.lang.String, U,V>
      , then a class or interface using generic types
      <T,V>
      will be aligned to
      <java.lang.String,V>
      Parameters:
      redirectGenericTypes - the type arguments or the redirect class node
      parameterizedTypes - the actual type arguments used on this class node
      alignmentTarget - the generic type arguments to which we want to align to
      Returns:
      aligned type arguments
    • buildWildcardType

      public static GenericsType buildWildcardType(ClassNode... types)
      Generates a wildcard generic type in order to be used for checks against class nodes. See GenericsType.isCompatibleWith(org.codehaus.groovy.ast.ClassNode).
      Parameters:
      types - the type to be used as the wildcard upper bound
      Returns:
      a wildcard generics type
    • extractPlaceholders

      public static Map<String,GenericsType> extractPlaceholders(ClassNode cn)
    • extractPlaceholders

      public static void extractPlaceholders(ClassNode node, Map<String,GenericsType> map)
      For a given classnode, fills in the supplied map with the parameterized types it defines.
      Parameters:
      node -
      map -
    • parameterizeInterfaceGenerics

      @Deprecated public static ClassNode parameterizeInterfaceGenerics(ClassNode hint, ClassNode target)
      Deprecated.
      Use #parameterizeType instead
      Interface class nodes retrieved from ClassNode.getInterfaces() or ClassNode.getAllInterfaces() are returned with generic type arguments. This method allows returning a parameterized interface given the parameterized class node which implements this interface.
      Parameters:
      hint - the class node where generics types are parameterized
      target - the interface we want to parameterize generics types
      Returns:
      a parameterized interface class node
    • parameterizeType

      public static ClassNode parameterizeType(ClassNode hint, ClassNode target)
      Interface class nodes retrieved from ClassNode.getInterfaces() or ClassNode.getAllInterfaces() are returned with generic type arguments. This method allows returning a parameterized interface given the parameterized class node which implements this interface.
      Parameters:
      hint - the class node where generics types are parameterized
      target - the interface we want to parameterize generics types
      Returns:
      a parameterized interface class node
    • nonGeneric

      public static ClassNode nonGeneric(ClassNode type)
    • newClass

      public static ClassNode newClass(ClassNode type)
    • makeClassSafe

      public static ClassNode makeClassSafe(Class klass)
    • makeClassSafeWithGenerics

      public static ClassNode makeClassSafeWithGenerics(Class klass, ClassNode genericsType)
    • makeClassSafe0

      public static ClassNode makeClassSafe0(ClassNode type, GenericsType... genericTypes)
    • makeClassSafeWithGenerics

      public static ClassNode makeClassSafeWithGenerics(ClassNode type, GenericsType... genericTypes)
    • correctToGenericsSpec

      public static MethodNode correctToGenericsSpec(Map<String,ClassNode> genericsSpec, MethodNode mn)
    • correctToGenericsSpecRecurse

      public static ClassNode correctToGenericsSpecRecurse(Map<String,ClassNode> genericsSpec, ClassNode type)
    • correctToGenericsSpecRecurse

      public static ClassNode[] correctToGenericsSpecRecurse(Map<String,ClassNode> genericsSpec, ClassNode[] types)
      Since:
      2.4.1
    • correctToGenericsSpecRecurse

      public static ClassNode correctToGenericsSpecRecurse(Map<String,ClassNode> genericsSpec, ClassNode type, List<String> exclusions)
    • correctToGenericsSpec

      public static ClassNode correctToGenericsSpec(Map<String,ClassNode> genericsSpec, GenericsType type)
    • correctToGenericsSpec

      public static ClassNode correctToGenericsSpec(Map<String,ClassNode> genericsSpec, ClassNode type)
    • createGenericsSpec

      public static Map<String,ClassNode> createGenericsSpec(ClassNode current)
    • createGenericsSpec

      public static Map<String,ClassNode> createGenericsSpec(ClassNode current, Map<String,ClassNode> oldSpec)
    • addMethodGenerics

      public static Map<String,ClassNode> addMethodGenerics(MethodNode current, Map<String,ClassNode> oldSpec)
    • extractSuperClassGenerics

      public static void extractSuperClassGenerics(ClassNode type, ClassNode target, Map<String,ClassNode> spec)
    • getSuperClass

      public static ClassNode getSuperClass(ClassNode type, ClassNode target)
    • parseClassNodesFromString

      public static ClassNode[] parseClassNodesFromString(String option, SourceUnit sourceUnit, CompilationUnit compilationUnit, MethodNode mn, ASTNode usage)
    • applyGenericsContextToPlaceHolders

      public static GenericsType[] applyGenericsContextToPlaceHolders(Map<String,ClassNode> genericsSpec, GenericsType[] oldPlaceHolders)
      transforms generics types from an old context to a new context using the given spec. This method assumes all generics types will be placeholders. WARNING: The resulting generics types may or may not be placeholders after the transformation.
      Parameters:
      genericsSpec - the generics context information spec
      oldPlaceHolders - the old placeholders
      Returns:
      the new generics types