Package: org.codehaus.groovy.transform.trait

## [Java] Class Traits

- org.codehaus.groovy.transform.trait.Traits

- A collection of utility methods used to deal with traits.

  Since:
    2.3.0

- - ### Nested Class Summary

    Nested classes
    Modifiers | Name | Description
    --- | --- | ---
    `@interface` | `Traits.Implemented` | Internal annotation used to indicate which methods in a trait interface have a default implementation.
    `@interface` | `Traits.TraitBridge` | Internal annotation used to indicate that a method is a bridge method to a trait default implementation.

  - ### Field Summary

    Fields
    Modifiers | Name | Description
    --- | --- | ---
    `static ClassNode` | `GENERATED_PROXY_CLASSNODE` |
    `static ClassNode` | `IMPLEMENTED_CLASSNODE` |
    `static ClassNode` | `SELFTYPE_CLASSNODE` |
    `static String` | `STATIC_THIS_OBJECT` |
    `static String` | `THIS_OBJECT` |
    `static ClassNode` | `TRAITBRIDGE_CLASSNODE` |
    `static Class<Trait>` | `TRAIT_CLASS` |
    `static ClassNode` | `TRAIT_CLASSNODE` |

  - ### Methods Summary

    Methods
    Type Params | Return Type | Name and 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 checkSuper)` Collects all the self types that a type should extend or implement, given the traits is implements.
    `` | `static String[]` | `decomposeSuperCallName(String methodName)` Returns the trait and method names derived from super-trait name scheme or `null` if the method name doesn't correspond to a trait method.
    `` | `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 classnode
    `<T>` | `static 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(MethodNode method)` Indicates whether a method in a trait interface has a default implementation.
    `` | `static boolean` | `hasDefaultImplementation(Method 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(ClassNode cNode)` Returns true if the specified class node is a trait.
    `` | `static boolean` | `isTrait(Class<?> clazz)` Returns true if the specified class is a trait.

  - ### Inherited Methods Summary

    Inherited Methods
    Methods inherited from class | Name
    --- | ---
    `class Object` | `wait, wait, wait, equals, toString, hashCode, getClass, notify, notifyAll`

- - ### Field Detail

    - #### public static final ClassNode GENERATED_PROXY_CLASSNODE

    - #### public static final ClassNode IMPLEMENTED_CLASSNODE

    - #### public static final ClassNode SELFTYPE_CLASSNODE

    - #### public static final String STATIC_THIS_OBJECT

    - #### public static final String THIS_OBJECT

    - #### public static final ClassNode TRAITBRIDGE_CLASSNODE

    - #### public static final Class<Trait> TRAIT_CLASS

    - #### public static final ClassNode TRAIT_CLASSNODE

  - ### Method Detail

    - #### 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

    - #### 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 collection where the list of self types will be written
      Returns:
        the selfTypes collection itself
      Since:
        2.4.0

    - #### public static LinkedHashSet<ClassNode> collectSelfTypes(ClassNode receiver, LinkedHashSet<ClassNode> selfTypes, boolean checkInterfaces, boolean checkSuper)

      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 collection where the list of self types will be written
        `checkInterfaces` - should the interfaces that the node implements be collected too
        `checkSuper` - should we collect from the superclass too
      Returns:
        the selfTypes collection itself
      Since:
        2.4.0

    - #### public static String[] decomposeSuperCallName(String methodName)

      Returns the trait and method names derived from super-trait name scheme or `null` if the method name doesn't correspond to a trait method.

    - #### public static ClassNode findFieldHelper(ClassNode trait)

    - #### public static ClassNode findHelper(ClassNode trait)

    - #### public static ClassNode findStaticFieldHelper(ClassNode trait)

    - #### public static List<ClassNode> findTraits(ClassNode cNode)

      Find all traits associated with the given classnode

      Parameters:
        `cNode` - the given classnode
      Returns:
        the list of ordered trait classnodes

    - #### <T> @SuppressWarnings("unchecked") public static 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

      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.

    - #### 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.

    - #### 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

    - #### 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

    - #### 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.

    - #### 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.

    - #### 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

    - #### 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