@SuppressWarnings("rawtypes") public abstract class AbstractGrailsArtefactTransformer extends Object implements AnnotatedClassInjector, GrailsArtefactClassInjector, Comparable
Abstract transformer that takes an implementation class and creates methods in a target ClassNode that delegate to that implementation class. Subclasses should override to provide the implementation class details
Modifiers | Name | Description |
---|---|---|
static String |
CURRENT_PREFIX |
|
static String |
METHOD_MISSING_METHOD_NAME |
|
protected static ClassNode |
OBJECT_CLASS |
|
static int |
PUBLIC_STATIC_MODIFIER |
|
static String |
STATIC_METHOD_MISSING_METHOD_NAME |
Type Params | Return Type | Name and description |
---|---|---|
|
protected void |
addApiLookupFieldAndSetter(ClassNode classNode, ClassNode implementationNode, String apiProperty, Expression initialValueExpression) |
|
protected void |
addDelegateInstanceMethod(ClassNode classNode, Expression delegate, MethodNode declaredMethod, AnnotationNode markerAnnotation, Map<String, ClassNode> genericsPlaceholders) |
|
protected void |
addDelegateStaticMethod(ClassNode classNode, MethodCallExpression apiLookupMethod, MethodNode declaredMethod, Map<String, ClassNode> genericsPlaceholders) |
|
protected void |
addEnhancedAnnotation(ClassNode classNode) |
|
public static void |
addToTransformedClasses(String name) |
|
public void |
clearCachedState() |
|
public int |
compareTo(Object o) Used for ordering not equality. |
|
protected String |
getArtefactType() |
|
public String[] |
getArtefactTypes() |
|
public abstract Class |
getInstanceImplementation() The class that provides the implementation of all instance methods and properties |
|
protected AnnotationNode |
getMarkerAnnotation() A marker annotation to be applied to added methods, defaults to null |
|
public abstract Class |
getStaticImplementation() The class that provides static methods |
|
public static Collection<String> |
getTransformedClassNames() |
|
protected boolean |
hasArtefactAnnotation(ClassNode classNode) |
|
protected boolean |
isCandidateInstanceMethod(ClassNode classNode, MethodNode declaredMethod) |
|
protected boolean |
isStaticCandidateMethod(ClassNode classNode, MethodNode declaredMethod) |
|
protected boolean |
isStaticMethodExcluded(ClassNode classNode, MethodNode declaredMethod) |
|
protected boolean |
isStaticMethodIncluded(ClassNode classNode, MethodNode declaredMethod) |
|
protected boolean |
isValidArtefactType() |
|
protected boolean |
isValidTargetClassNode(ClassNode classNode) |
|
public void |
performInjection(SourceUnit source, GeneratorContext context, ClassNode classNode) |
|
public void |
performInjection(SourceUnit source, ClassNode classNode) |
|
protected void |
performInjectionInternal(String apiInstanceProperty, SourceUnit source, ClassNode classNode) Subclasses can override to provide additional transformation |
|
public void |
performInjectionOnAnnotatedClass(SourceUnit source, ClassNode classNode) |
|
public void |
performInjectionOnAnnotatedClass(SourceUnit source, GeneratorContext context, ClassNode classNode) |
|
protected void |
performInstanceImplementationInjection(SourceUnit source, ClassNode classNode, Map<String, ClassNode> genericsPlaceholders, Class instanceImplementation) |
|
protected void |
performStaticImplementationInjection(ClassNode classNode, Map<String, ClassNode> genericsPlaceholders, Class staticImplementation) |
|
protected MethodNode |
populateAutowiredApiLookupMethod(ClassNode classNode, ClassNode implementationNode, String apiProperty, String methodName, BlockStatement methodBody) |
|
protected MethodNode |
populateDefaultApiLookupMethod(ClassNode implementationNode, String apiInstanceProperty, String methodName, BlockStatement methodBody) |
|
protected boolean |
requiresAutowiring() If the API requires autowiring then a
|
|
protected boolean |
requiresStaticLookupMethod() Subclasses should override in the instance API requires a static lookup method instead of autowiring. |
|
protected Map<String, ClassNode> |
resolveGenericsPlaceHolders(ClassNode classNode) |
|
protected boolean |
shouldSkipInjection(ClassNode classNode) |
Used for ordering not equality. Note: this class has a natural ordering that is inconsistent with equals.
The class that provides the implementation of all instance methods and properties
A marker annotation to be applied to added methods, defaults to null
The class that provides static methods
Subclasses can override to provide additional transformation
source
- The sourceclassNode
- The class nodeIf the API requires autowiring then a
Subclasses should override in the instance API requires a static lookup method instead of autowiring. Defaults to false.