org.codehaus.groovy.ast.tools
Class GenericsUtils

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

public class GenericsUtils
extends java.lang.Object

Utility methods to deal with generic types.


Field Summary
static GenericsType[] EMPTY_GENERICS_ARRAY
           
 
Constructor Summary
GenericsUtils()
           
 
Method Summary
static GenericsType[] alignGenericTypes(GenericsType[] redirectGenericTypes, GenericsType[] parameterizedTypes, GenericsType[] alignmentTarget)
          Given a parameterized type and a generic type information, aligns actual type parameters.
static GenericsType buildWildcardType(ClassNode... types)
          Generates a wildcard generic type in order to be used for checks against class nodes.
static java.util.Map<java.lang.String,GenericsType> extractPlaceholders(ClassNode cn)
           
static void extractPlaceholders(ClassNode node, java.util.Map<java.lang.String,GenericsType> map)
          For a given classnode, fills in the supplied map with the parameterized types it defines.
static ClassNode parameterizeInterfaceGenerics(ClassNode hint, ClassNode target)
          Deprecated. Use #parameterizeType instead
static ClassNode parameterizeType(ClassNode hint, ClassNode target)
          Interface class nodes retrieved from ClassNode.getInterfaces() or ClassNode.getAllInterfaces() are returned with generic type arguments.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

EMPTY_GENERICS_ARRAY

public static final GenericsType[] EMPTY_GENERICS_ARRAY
Constructor Detail

GenericsUtils

public GenericsUtils()
Method Detail

alignGenericTypes

public static GenericsType[] alignGenericTypes(GenericsType[] redirectGenericTypes,
                                               GenericsType[] parameterizedTypes,
                                               GenericsType[] alignmentTarget)
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 java.util.Map<java.lang.String,GenericsType> extractPlaceholders(ClassNode cn)

extractPlaceholders

public static void extractPlaceholders(ClassNode node,
                                       java.util.Map<java.lang.String,GenericsType> map)
For a given classnode, fills in the supplied map with the parameterized types it defines.

Parameters:
node -
map -

parameterizeInterfaceGenerics

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