Class Traits
java.lang.Object
org.codehaus.groovy.transform.trait.Traits
A collection of utility methods used to deal with traits.
- Since:
- 2.3.0
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic @interface
Internal annotation used to indicate which methods in a trait interface have a default implementation.static @interface
Internal annotation used to indicate that a method is a bridge method to a trait default implementation. -
Field Summary
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionstatic 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) findTraits
(ClassNode cNode) Find all traits associated with the given type.static <T> T
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 theTrait
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
Returns true if the specified class is a trait.static boolean
Returns true if the specified class node is a trait.
-
Field Details
-
IMPLEMENTED_CLASSNODE
-
TRAITBRIDGE_CLASSNODE
-
TRAIT_CLASS
-
TRAIT_CLASSNODE
-
GENERATED_PROXY_CLASSNODE
-
SELFTYPE_CLASSNODE
-
THIS_OBJECT
- See Also:
-
STATIC_THIS_OBJECT
- See Also:
-
-
Constructor Details
-
Traits
public Traits()
-
-
Method Details
-
findHelper
-
findFieldHelper
-
findStaticFieldHelper
-
isTrait
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
Returns true if the specified class is a trait.- Parameters:
clazz
- a class to test- Returns:
- true if the classnode represents a trait
-
isAnnotatedWithTrait
Returns true if the specified class node is annotated with theTrait
interface.- Parameters:
cNode
- a class node- Returns:
- true if the specified class node is annotated with the
Trait
interface.
-
hasDefaultImplementation
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
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
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
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
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 toDefaultGroovyMethods.asType(java.lang.Object, Class)
- Parameters:
self
- an object to be coerced to some classclazz
- 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
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 nodeinterfaces
- 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 traitselfTypes
- 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 traitselfTypes
- a set where the self types will be putcheckInterfaces
- should the interfaces that the node implements be collected toocheckSuperClass
- should we collect from the superclass too- Returns:
- the
selfTypes
collection - Since:
- 2.4.0
-
findTraits
Find all traits associated with the given type.- Parameters:
cNode
- the given classnode- Returns:
- the list of ordered trait classnodes
-