Package org.codehaus.groovy.transform.trait

# Class Traits

java.lang.Object
org.codehaus.groovy.transform.trait.Traits

public abstract class Traits extends Object
A collection of utility methods used to deal with traits.

Since:
  2.3.0

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static @interface`
  `Traits.Implemented`
  Internal annotation used to indicate which methods in a trait interface have a default implementation.
  `static @interface`
  `Traits.TraitBridge`
  Internal annotation used to indicate that a method is a bridge method to a trait default implementation.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final ClassNode`
  `GENERATED_PROXY_CLASSNODE`
  `static final ClassNode`
  `IMPLEMENTED_CLASSNODE`
  `static final ClassNode`
  `SELFTYPE_CLASSNODE`
  `static final String`
  `STATIC_THIS_OBJECT`
  `static final String`
  `THIS_OBJECT`
  `static final Class<Trait>`
  `TRAIT_CLASS`
  `static final ClassNode`
  `TRAIT_CLASSNODE`
  `static final ClassNode`
  `TRAITBRIDGE_CLASSNODE`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `Traits()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static LinkedHashSet<ClassNode>`
  `collectAllInterfacesReverseOrder(ClassNode cNode, LinkedHashSet<ClassNode> interfaces)`
  Collects all interfaces of a class node, but reverses the order of the declaration of direct interfaces of this class node.
  `static LinkedHashSet<ClassNode>`
  `collectSelfTypes(ClassNode receiver, LinkedHashSet<ClassNode> selfTypes)`
  Collects all the self types that a type should extend or implement, given the traits is implements.
  `static LinkedHashSet<ClassNode>`
  `collectSelfTypes(ClassNode receiver, LinkedHashSet<ClassNode> selfTypes, boolean checkInterfaces, boolean checkSuperClass)`
  Collects all the self types that a type should extend or implement, given the traits is implements.
  `static String[]`
  `decomposeSuperCallName(String origName)`
  Returns the name of a method without the super trait specific prefix.
  `static ClassNode`
  `findFieldHelper(ClassNode trait)`
  `static ClassNode`
  `findHelper(ClassNode trait)`
  `static ClassNode`
  `findStaticFieldHelper(ClassNode trait)`
  `static List<ClassNode>`
  `findTraits(ClassNode cNode)`
  Find all traits associated with the given type.
  `static <T> T`
  `getAsType(Object self, Class<T> clazz)`
  Converts a class implementing some trait into a target class.
  `static Method`
  `getBridgeMethodTarget(Method someMethod)`
  Reflection API to find the method corresponding to the default implementation of a trait, given a bridge method.
  `static boolean`
  `hasDefaultImplementation(Method method)`
  Indicates whether a method in a trait interface has a default implementation.
  `static boolean`
  `hasDefaultImplementation(MethodNode method)`
  Indicates whether a method in a trait interface has a default implementation.
  `static boolean`
  `isAnnotatedWithTrait(ClassNode cNode)`
  Returns true if the specified class node is annotated with the `Trait` interface.
  `static boolean`
  `isBridgeMethod(Method someMethod)`
  Reflection API to indicate whether some method is a bridge method to the default implementation of a trait.
  `static boolean`
  `isTrait(Class<?> clazz)`
  Returns true if the specified class is a trait.
  `static boolean`
  `isTrait(ClassNode cNode)`
  Returns true if the specified class node is a trait.

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

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

- ## Field Details

  - ### IMPLEMENTED_CLASSNODE

    public static final ClassNode IMPLEMENTED_CLASSNODE

  - ### TRAITBRIDGE_CLASSNODE

    public static final ClassNode TRAITBRIDGE_CLASSNODE

  - ### TRAIT_CLASS

    public static final Class<Trait> TRAIT_CLASS

  - ### TRAIT_CLASSNODE

    public static final ClassNode TRAIT_CLASSNODE

  - ### GENERATED_PROXY_CLASSNODE

    public static final ClassNode GENERATED_PROXY_CLASSNODE

  - ### SELFTYPE_CLASSNODE

    public static final ClassNode SELFTYPE_CLASSNODE

  - ### THIS_OBJECT

    public static final String THIS_OBJECT
    See Also:
      - Constant Field Values

  - ### STATIC_THIS_OBJECT

    public static final String STATIC_THIS_OBJECT
    See Also:
      - Constant Field Values

- ## Constructor Details

  - ### Traits

    public Traits()

- ## Method Details

  - ### findHelper

    public static ClassNode findHelper(ClassNode trait)

  - ### findFieldHelper

    public static ClassNode findFieldHelper(ClassNode trait)

  - ### findStaticFieldHelper

    public static ClassNode findStaticFieldHelper(ClassNode trait)

  - ### isTrait

    public static boolean isTrait(ClassNode cNode)
    Returns true if the specified class node is a trait.
    Parameters:
      `cNode` - a class node to test
    Returns:
      true if the classnode represents a trait

  - ### isTrait

    public static boolean isTrait(Class<?> clazz)
    Returns true if the specified class is a trait.
    Parameters:
      `clazz` - a class to test
    Returns:
      true if the classnode represents a trait

  - ### isAnnotatedWithTrait

    public static boolean isAnnotatedWithTrait(ClassNode cNode)
    Returns true if the specified class node is annotated with the `Trait` interface.
    Parameters:
      `cNode` - a class node
    Returns:
      true if the specified class node is annotated with the `Trait` interface.

  - ### hasDefaultImplementation

    public static boolean hasDefaultImplementation(MethodNode method)
    Indicates whether a method in a trait interface has a default implementation.
    Parameters:
      `method` - a method node
    Returns:
      true if the method has a default implementation in the trait

  - ### hasDefaultImplementation

    public static boolean hasDefaultImplementation(Method method)
    Indicates whether a method in a trait interface has a default implementation.
    Parameters:
      `method` - a method node
    Returns:
      true if the method has a default implementation in the trait

  - ### isBridgeMethod

    public static boolean isBridgeMethod(Method someMethod)
    Reflection API to indicate whether some method is a bridge method to the default implementation of a trait.
    Parameters:
      `someMethod` - a method node
    Returns:
      null if it is not a method implemented in a trait. If it is, returns the method from the trait class.

  - ### getBridgeMethodTarget

    public static Method getBridgeMethodTarget(Method someMethod)
    Reflection API to find the method corresponding to the default implementation of a trait, given a bridge method.
    Parameters:
      `someMethod` - a method node
    Returns:
      null if it is not a method implemented in a trait. If it is, returns the method from the trait class.

  - ### getAsType

    public static <T> T getAsType(Object self, Class<T> clazz)
    Converts a class implementing some trait into a target class. If the trait is a dynamic proxy and that the target class is assignable to the target object of the proxy, then the target object is returned. Otherwise, falls back to `DefaultGroovyMethods.asType(java.lang.Object, Class)`
    Parameters:
      `self` - an object to be coerced to some class
      `clazz` - the class to be coerced to
    Returns:
      the object coerced to the target class, or the proxy instance if it is compatible with the target class.

  - ### decomposeSuperCallName

    public static String[] decomposeSuperCallName(String origName)
    Returns the name of a method without the super trait specific prefix. If the method name doesn't correspond to a super trait method call, the result will be null.
    Parameters:
      `origName` - the name of a method
    Returns:
      null if the name doesn't start with the super trait prefix, otherwise the name without the prefix

  - ### collectAllInterfacesReverseOrder

    public static LinkedHashSet<ClassNode> collectAllInterfacesReverseOrder(ClassNode cNode, LinkedHashSet<ClassNode> interfaces)
    Collects all interfaces of a class node, but reverses the order of the declaration of direct interfaces of this class node. This is used to make sure a trait implementing A,B where both A and B have the same method will take the method from B (latest), aligning the behavior with categories.
    Parameters:
      `cNode` - a class node
      `interfaces` - ordered set of interfaces

  - ### collectSelfTypes

    public static LinkedHashSet<ClassNode> collectSelfTypes(ClassNode receiver, LinkedHashSet<ClassNode> selfTypes)
    Collects all the self types that a type should extend or implement, given the traits is implements. Collects from interfaces and superclasses too.
    Parameters:
      `receiver` - a class node that may implement a trait
      `selfTypes` - a set where the self types will be put
    Returns:
      the `selfTypes` collection
    Since:
      2.4.0

  - ### collectSelfTypes

    public static LinkedHashSet<ClassNode> collectSelfTypes(ClassNode receiver, LinkedHashSet<ClassNode> selfTypes, boolean checkInterfaces, boolean checkSuperClass)
    Collects all the self types that a type should extend or implement, given the traits is implements.
    Parameters:
      `receiver` - a class node that may implement a trait
      `selfTypes` - a set where the self types will be put
      `checkInterfaces` - should the interfaces that the node implements be collected too
      `checkSuperClass` - should we collect from the superclass too
    Returns:
      the `selfTypes` collection
    Since:
      2.4.0

  - ### findTraits

    public static List<ClassNode> findTraits(ClassNode cNode)
    Find all traits associated with the given type.
    Parameters:
      `cNode` - the given classnode
    Returns:
      the list of ordered trait classnodes