[Java] Class Traits
- 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
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
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
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 type. | |
<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. |
Inherited Methods Summary
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 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)
public static ClassNode findStaticFieldHelper(ClassNode trait)
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
<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/3.0.7/html/gapi/org/codehaus/groovy/transform/trait/Traits.html