Groovy Documentation

org.codehaus.groovy.grails.compiler.injection
[Java] Class AbstractGrailsArtefactTransformer

java.lang.Object
  org.codehaus.groovy.grails.compiler.injection.AbstractGrailsArtefactTransformer
All Implemented Interfaces:
AnnotatedClassInjector, GrailsArtefactClassInjector, java.lang.Comparable

@java.lang.SuppressWarnings("rawtypes")
public abstract class AbstractGrailsArtefactTransformer
extends java.lang.Object

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

Authors:
Graeme Rocher
Since:
2.0


Field Summary
static java.lang.String CURRENT_PREFIX

static java.lang.String METHOD_MISSING_METHOD_NAME

protected static org.codehaus.groovy.ast.ClassNode OBJECT_CLASS

static int PUBLIC_STATIC_MODIFIER

static java.lang.String STATIC_METHOD_MISSING_METHOD_NAME

 
Method Summary
protected void addApiLookupFieldAndSetter(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.ClassNode implementationNode, java.lang.String apiProperty, org.codehaus.groovy.ast.expr.Expression initialValueExpression)

protected void addDelegateInstanceMethod(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.expr.Expression delegate, org.codehaus.groovy.ast.MethodNode declaredMethod, org.codehaus.groovy.ast.AnnotationNode markerAnnotation, java.util.Map genericsPlaceholders)

protected void addDelegateStaticMethod(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.expr.MethodCallExpression apiLookupMethod, org.codehaus.groovy.ast.MethodNode declaredMethod, java.util.Map genericsPlaceholders)

protected void addEnhancedAnnotation(org.codehaus.groovy.ast.ClassNode classNode)

int compareTo(java.lang.Object o)

Used for ordering not equality.

protected java.lang.String getArtefactType()

java.lang.String[] getArtefactTypes()

java.lang.Class getInstanceImplementation()

The class that provides the implementation of all instance methods and properties

protected org.codehaus.groovy.ast.AnnotationNode getMarkerAnnotation()

java.lang.Class getStaticImplementation()

protected boolean hasArtefactAnnotation(org.codehaus.groovy.ast.ClassNode classNode)

protected boolean isCandidateInstanceMethod(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.MethodNode declaredMethod)

protected boolean isStaticCandidateMethod(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.MethodNode declaredMethod)

protected boolean isStaticMethodExcluded(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.MethodNode declaredMethod)

protected boolean isStaticMethodIncluded(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.MethodNode declaredMethod)

protected boolean isValidArtefactType()

protected boolean isValidTargetClassNode(org.codehaus.groovy.ast.ClassNode classNode)

void performInjection(org.codehaus.groovy.control.SourceUnit source, org.codehaus.groovy.classgen.GeneratorContext context, org.codehaus.groovy.ast.ClassNode classNode)

void performInjection(org.codehaus.groovy.control.SourceUnit source, org.codehaus.groovy.ast.ClassNode classNode)

protected void performInjectionInternal(java.lang.String apiInstanceProperty, org.codehaus.groovy.control.SourceUnit source, org.codehaus.groovy.ast.ClassNode classNode)

Subclasses can override to provide additional transformation

void performInjectionOnAnnotatedClass(org.codehaus.groovy.control.SourceUnit source, org.codehaus.groovy.ast.ClassNode classNode)

void performInjectionOnAnnotatedClass(org.codehaus.groovy.control.SourceUnit source, org.codehaus.groovy.classgen.GeneratorContext context, org.codehaus.groovy.ast.ClassNode classNode)

protected void performInstanceImplementationInjection(org.codehaus.groovy.control.SourceUnit source, org.codehaus.groovy.ast.ClassNode classNode, java.util.Map genericsPlaceholders, java.lang.Class instanceImplementation)

protected void performStaticImplementationInjection(org.codehaus.groovy.ast.ClassNode classNode, java.util.Map genericsPlaceholders, java.lang.Class staticImplementation)

protected org.codehaus.groovy.ast.MethodNode populateAutowiredApiLookupMethod(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.ClassNode implementationNode, java.lang.String apiProperty, java.lang.String methodName, org.codehaus.groovy.ast.stmt.BlockStatement methodBody)

protected org.codehaus.groovy.ast.MethodNode populateDefaultApiLookupMethod(org.codehaus.groovy.ast.ClassNode implementationNode, java.lang.String apiInstanceProperty, java.lang.String methodName, org.codehaus.groovy.ast.stmt.BlockStatement methodBody)

protected boolean requiresAutowiring()

If the API requires autowiring then a

Autowired:
property will be added.

protected boolean requiresStaticLookupMethod()

Subclasses should override in the instance API requires a static lookup method instead of autowiring.

protected java.util.Map resolveGenericsPlaceHolders(org.codehaus.groovy.ast.ClassNode classNode)

protected boolean shouldSkipInjection(org.codehaus.groovy.ast.ClassNode classNode)

 
Methods inherited from class java.lang.Object
java.lang.Object#wait(long, int), java.lang.Object#wait(long), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
 

Field Detail

CURRENT_PREFIX

public static final java.lang.String CURRENT_PREFIX


METHOD_MISSING_METHOD_NAME

public static final java.lang.String METHOD_MISSING_METHOD_NAME


OBJECT_CLASS

protected static final org.codehaus.groovy.ast.ClassNode OBJECT_CLASS


PUBLIC_STATIC_MODIFIER

public static final int PUBLIC_STATIC_MODIFIER


STATIC_METHOD_MISSING_METHOD_NAME

public static final java.lang.String STATIC_METHOD_MISSING_METHOD_NAME


 
Method Detail

addApiLookupFieldAndSetter

protected void addApiLookupFieldAndSetter(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.ClassNode implementationNode, java.lang.String apiProperty, org.codehaus.groovy.ast.expr.Expression initialValueExpression)


addDelegateInstanceMethod

protected void addDelegateInstanceMethod(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.expr.Expression delegate, org.codehaus.groovy.ast.MethodNode declaredMethod, org.codehaus.groovy.ast.AnnotationNode markerAnnotation, java.util.Map genericsPlaceholders)


addDelegateStaticMethod

protected void addDelegateStaticMethod(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.expr.MethodCallExpression apiLookupMethod, org.codehaus.groovy.ast.MethodNode declaredMethod, java.util.Map genericsPlaceholders)


addEnhancedAnnotation

protected void addEnhancedAnnotation(org.codehaus.groovy.ast.ClassNode classNode)


compareTo

public int compareTo(java.lang.Object o)
Used for ordering not equality. Note: this class has a natural ordering that is inconsistent with equals.
See Also:
java.lang.Comparable#compareTo(java.lang.Object)


getArtefactType

protected java.lang.String getArtefactType()


getArtefactTypes

public java.lang.String[] getArtefactTypes()


getInstanceImplementation

public java.lang.Class getInstanceImplementation()
The class that provides the implementation of all instance methods and properties
Returns:
A class whose methods contain a first argument of type object that is the instance


getMarkerAnnotation

protected org.codehaus.groovy.ast.AnnotationNode getMarkerAnnotation()


getStaticImplementation

public java.lang.Class getStaticImplementation()


hasArtefactAnnotation

protected boolean hasArtefactAnnotation(org.codehaus.groovy.ast.ClassNode classNode)


isCandidateInstanceMethod

protected boolean isCandidateInstanceMethod(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.MethodNode declaredMethod)


isStaticCandidateMethod

protected boolean isStaticCandidateMethod(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.MethodNode declaredMethod)


isStaticMethodExcluded

protected boolean isStaticMethodExcluded(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.MethodNode declaredMethod)


isStaticMethodIncluded

protected boolean isStaticMethodIncluded(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.MethodNode declaredMethod)


isValidArtefactType

protected boolean isValidArtefactType()


isValidTargetClassNode

protected boolean isValidTargetClassNode(org.codehaus.groovy.ast.ClassNode classNode)


performInjection

public void performInjection(org.codehaus.groovy.control.SourceUnit source, org.codehaus.groovy.classgen.GeneratorContext context, org.codehaus.groovy.ast.ClassNode classNode)


performInjection

public void performInjection(org.codehaus.groovy.control.SourceUnit source, org.codehaus.groovy.ast.ClassNode classNode)


performInjectionInternal

protected void performInjectionInternal(java.lang.String apiInstanceProperty, org.codehaus.groovy.control.SourceUnit source, org.codehaus.groovy.ast.ClassNode classNode)
Subclasses can override to provide additional transformation
Parameters:
apiInstanceProperty
source - The source
classNode - The class node


performInjectionOnAnnotatedClass

@java.lang.Overridepublic void performInjectionOnAnnotatedClass(SourceUnit source, ClassNode classNode) {
public void performInjectionOnAnnotatedClass(org.codehaus.groovy.control.SourceUnit source, org.codehaus.groovy.ast.ClassNode classNode)


performInjectionOnAnnotatedClass

public void performInjectionOnAnnotatedClass(org.codehaus.groovy.control.SourceUnit source, org.codehaus.groovy.classgen.GeneratorContext context, org.codehaus.groovy.ast.ClassNode classNode)


performInstanceImplementationInjection

protected void performInstanceImplementationInjection(org.codehaus.groovy.control.SourceUnit source, org.codehaus.groovy.ast.ClassNode classNode, java.util.Map genericsPlaceholders, java.lang.Class instanceImplementation)


performStaticImplementationInjection

protected void performStaticImplementationInjection(org.codehaus.groovy.ast.ClassNode classNode, java.util.Map genericsPlaceholders, java.lang.Class staticImplementation)


populateAutowiredApiLookupMethod

protected org.codehaus.groovy.ast.MethodNode populateAutowiredApiLookupMethod(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.ClassNode implementationNode, java.lang.String apiProperty, java.lang.String methodName, org.codehaus.groovy.ast.stmt.BlockStatement methodBody)


populateDefaultApiLookupMethod

protected org.codehaus.groovy.ast.MethodNode populateDefaultApiLookupMethod(org.codehaus.groovy.ast.ClassNode implementationNode, java.lang.String apiInstanceProperty, java.lang.String methodName, org.codehaus.groovy.ast.stmt.BlockStatement methodBody)


requiresAutowiring

protected boolean requiresAutowiring()
If the API requires autowiring then a
Autowired:
property will be added. If not a private field that instantiates the API will be crated. Defaults to true.
Returns:
Whether autowiring is required


requiresStaticLookupMethod

protected boolean requiresStaticLookupMethod()
Subclasses should override in the instance API requires a static lookup method instead of autowiring. Defaults to false.
Returns:
Whether a static lookup method is used for the instance API


resolveGenericsPlaceHolders

protected java.util.Map resolveGenericsPlaceHolders(org.codehaus.groovy.ast.ClassNode classNode)


shouldSkipInjection

protected boolean shouldSkipInjection(org.codehaus.groovy.ast.ClassNode classNode)


 

Groovy Documentation