[Java] Class Traits

  • org.codehaus.groovy.transform.trait.Traits

A collection of utility methods used to deal with traits.

Authors:
Cdric Champeau
Since:
2.3.0

Nested Class Summary

Nested classes
Modifiers Name 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
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_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 origName)
Returns the name of a method without the super trait specific prefix.
static ClassNode findFieldHelper(ClassNode trait)
static ClassNode findHelper(ClassNode trait)
<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_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 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

public static ClassNode findFieldHelper(ClassNode trait)

public static ClassNode findHelper(ClassNode trait)

<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

© 2003-2020 The Apache Software Foundation
Licensed under the Apache license.
https://docs.groovy-lang.org/2.4.21/html/gapi/org/codehaus/groovy/transform/trait/Traits.html