public abstract class Traits extends Object
A collection of utility methods used to deal with traits.
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. |
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 |
Type Params | Return Type | Name and description |
---|---|---|
|
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. |
|
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. |
|
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. |
|
public static String[] |
decomposeSuperCallName(String origName) Returns the name of a method without the super trait specific prefix. |
|
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 |
<T> |
public static T |
getAsType(Object self, Class<T> clazz) Converts a class implementing some trait into a 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. |
|
public static boolean |
hasDefaultImplementation(MethodNode method) Indicates whether a method in a trait interface has a default implementation. |
|
public static boolean |
hasDefaultImplementation(Method method) Indicates whether a method in a trait interface has a default implementation. |
|
public static boolean |
isAnnotatedWithTrait(ClassNode cNode) 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. |
|
public static boolean |
isTrait(ClassNode cNode) Returns true if the specified class node is a trait. |
|
public static boolean |
isTrait(Class<?> clazz) Returns true if the specified class is a trait. |
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.
cNode
- a class nodeinterfaces
- ordered set of interfacesCollects all the self types that a type should extend or implement, given the traits is implements. Collects from interfaces and superclasses too.
receiver
- a class node that may implement a traitselfTypes
- a collection where the list of self types will be writtenCollects all the self types that a type should extend or implement, given the traits is implements.
receiver
- a class node that may implement a traitselfTypes
- a collection where the list of self types will be writtencheckInterfaces
- should the interfaces that the node implements be collected toocheckSuper
- should we collect from the superclass tooReturns 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.
origName
- the name of a methodFind all traits associated with the given classnode
cNode
- the given classnodeConverts 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
self
- an object to be coerced to some classclazz
- the class to be coerced toReflection API to find the method corresponding to the default implementation of a trait, given a bridge method.
someMethod
- a method nodeIndicates whether a method in a trait interface has a default implementation.
method
- a method nodeIndicates whether a method in a trait interface has a default implementation.
method
- a method nodeReturns true if the specified class node is annotated with the Trait interface.
cNode
- a class nodeReflection API to indicate whether some method is a bridge method to the default implementation of a trait.
someMethod
- a method nodeReturns true if the specified class node is a trait.
cNode
- a class node to testReturns true if the specified class is a trait.
clazz
- a class to test