org.codehaus.groovy.grails.compiler.web
Class ControllerActionTransformer
java.lang.Object
org.codehaus.groovy.grails.compiler.web.ControllerActionTransformer
- All Implemented Interfaces:
- org.codehaus.groovy.grails.compiler.injection.AnnotatedClassInjector, org.codehaus.groovy.grails.compiler.injection.ClassInjector, org.codehaus.groovy.grails.compiler.injection.GrailsArtefactClassInjector
public class ControllerActionTransformer
- extends java.lang.Object
- implements org.codehaus.groovy.grails.compiler.injection.GrailsArtefactClassInjector, org.codehaus.groovy.grails.compiler.injection.AnnotatedClassInjector
Enhances controller classes by converting closures actions to method actions and binding
request parameters to action arguments.
| Fields inherited from interface org.codehaus.groovy.grails.compiler.injection.GrailsArtefactClassInjector |
EMPTY_CLASS_ARRAY, ZERO_ARGS, ZERO_PARAMETERS |
| Fields inherited from interface org.codehaus.groovy.grails.compiler.injection.ClassInjector |
PRIVATE_STATIC_MODIFIER |
|
Method Summary |
protected void |
addMethodToInvokeClosure(org.codehaus.groovy.ast.ClassNode controllerClassNode,
org.codehaus.groovy.ast.PropertyNode closureProperty,
org.codehaus.groovy.control.SourceUnit source,
org.codehaus.groovy.classgen.GeneratorContext context)
|
protected void |
annotateActionMethod(org.codehaus.groovy.ast.Parameter[] parameters,
org.codehaus.groovy.ast.MethodNode methodNode)
|
protected void |
copyAnnotations(org.codehaus.groovy.ast.MethodNode from,
org.codehaus.groovy.ast.MethodNode to)
|
java.lang.String[] |
getArtefactTypes()
|
protected java.util.Collection<org.codehaus.groovy.ast.MethodNode> |
getExceptionHandlerMethods(org.codehaus.groovy.ast.ClassNode classNode,
org.codehaus.groovy.control.SourceUnit sourceUnit)
|
protected org.codehaus.groovy.ast.expr.Expression |
getRejectValueExpression(java.lang.String methodParamName)
|
protected org.codehaus.groovy.ast.stmt.BlockStatement |
initializeActionParameters(org.codehaus.groovy.ast.ClassNode classNode,
org.codehaus.groovy.ast.ASTNode actionNode,
java.lang.String actionName,
org.codehaus.groovy.ast.Parameter[] actionParameters,
org.codehaus.groovy.control.SourceUnit source,
org.codehaus.groovy.classgen.GeneratorContext context)
|
protected void |
initializeAndValidateCommandObjectParameter(org.codehaus.groovy.ast.stmt.BlockStatement wrapper,
org.codehaus.groovy.ast.ClassNode controllerNode,
org.codehaus.groovy.ast.ClassNode commandObjectNode,
org.codehaus.groovy.ast.ASTNode actionNode,
java.lang.String actionName,
java.lang.String paramName,
org.codehaus.groovy.control.SourceUnit source,
org.codehaus.groovy.classgen.GeneratorContext context)
|
protected void |
initializeCommandObjectParameter(org.codehaus.groovy.ast.stmt.BlockStatement wrapper,
org.codehaus.groovy.ast.ClassNode commandObjectNode,
java.lang.String paramName,
org.codehaus.groovy.control.SourceUnit source)
|
protected void |
initializeMethodParameter(org.codehaus.groovy.ast.ClassNode classNode,
org.codehaus.groovy.ast.stmt.BlockStatement wrapper,
org.codehaus.groovy.ast.ASTNode actionNode,
java.lang.String actionName,
org.codehaus.groovy.ast.Parameter param,
org.codehaus.groovy.control.SourceUnit source,
org.codehaus.groovy.classgen.GeneratorContext context)
|
protected void |
initializePrimitiveOrTypeWrapperParameter(org.codehaus.groovy.ast.stmt.BlockStatement wrapper,
org.codehaus.groovy.ast.Parameter param,
java.lang.String requestParameterName)
|
protected void |
initializeStringParameter(org.codehaus.groovy.ast.stmt.BlockStatement wrapper,
org.codehaus.groovy.ast.Parameter param,
java.lang.String requestParameterName)
|
void |
performInjection(org.codehaus.groovy.control.SourceUnit source,
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 |
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)
|
boolean |
shouldInject(java.net.URL url)
|
protected void |
transformClosureToMethod(org.codehaus.groovy.ast.ClassNode classNode,
org.codehaus.groovy.ast.expr.ClosureExpression closureAction,
org.codehaus.groovy.ast.PropertyNode property,
org.codehaus.groovy.control.SourceUnit source,
org.codehaus.groovy.classgen.GeneratorContext context)
|
protected void |
wrapMethodBodyWithExceptionHandling(org.codehaus.groovy.ast.MethodNode methodNode)
This will wrap the method body in a try catch block which does something
like this: |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
ACTION_ANNOTATION_NODE
public static final org.codehaus.groovy.ast.AnnotationNode ACTION_ANNOTATION_NODE
EXCEPTION_HANDLER_META_DATA_FIELD_NAME
public static final java.lang.String EXCEPTION_HANDLER_META_DATA_FIELD_NAME
- See Also:
- Constant Field Values
VOID_TYPE
public static final java.lang.String VOID_TYPE
- See Also:
- Constant Field Values
ControllerActionTransformer
public ControllerActionTransformer()
getArtefactTypes
public java.lang.String[] getArtefactTypes()
- Specified by:
getArtefactTypes in interface org.codehaus.groovy.grails.compiler.injection.GrailsArtefactClassInjector
performInjection
public void performInjection(org.codehaus.groovy.control.SourceUnit source,
org.codehaus.groovy.classgen.GeneratorContext context,
org.codehaus.groovy.ast.ClassNode classNode)
- Specified by:
performInjection in interface org.codehaus.groovy.grails.compiler.injection.ClassInjector
performInjectionOnAnnotatedClass
public void performInjectionOnAnnotatedClass(org.codehaus.groovy.control.SourceUnit source,
org.codehaus.groovy.classgen.GeneratorContext context,
org.codehaus.groovy.ast.ClassNode classNode)
- Specified by:
performInjectionOnAnnotatedClass in interface org.codehaus.groovy.grails.compiler.injection.AnnotatedClassInjector
performInjectionOnAnnotatedClass
public void performInjectionOnAnnotatedClass(org.codehaus.groovy.control.SourceUnit source,
org.codehaus.groovy.ast.ClassNode classNode)
- Specified by:
performInjectionOnAnnotatedClass in interface org.codehaus.groovy.grails.compiler.injection.ClassInjector
getExceptionHandlerMethods
protected java.util.Collection<org.codehaus.groovy.ast.MethodNode> getExceptionHandlerMethods(org.codehaus.groovy.ast.ClassNode classNode,
org.codehaus.groovy.control.SourceUnit sourceUnit)
copyAnnotations
protected void copyAnnotations(org.codehaus.groovy.ast.MethodNode from,
org.codehaus.groovy.ast.MethodNode to)
addMethodToInvokeClosure
protected void addMethodToInvokeClosure(org.codehaus.groovy.ast.ClassNode controllerClassNode,
org.codehaus.groovy.ast.PropertyNode closureProperty,
org.codehaus.groovy.control.SourceUnit source,
org.codehaus.groovy.classgen.GeneratorContext context)
annotateActionMethod
protected void annotateActionMethod(org.codehaus.groovy.ast.Parameter[] parameters,
org.codehaus.groovy.ast.MethodNode methodNode)
wrapMethodBodyWithExceptionHandling
protected void wrapMethodBodyWithExceptionHandling(org.codehaus.groovy.ast.MethodNode methodNode)
- This will wrap the method body in a try catch block which does something
like this:
try {
// original method body here
} catch (Exception $caughtException) {
Method $method = getExceptionHandlerMethod($caughtException.getClass())
if($method) {
return $method.invoke(this, $caughtException)
} else {
throw $caughtException
}
}
- Parameters:
methodNode - the method to add the try catch block to
transformClosureToMethod
protected void transformClosureToMethod(org.codehaus.groovy.ast.ClassNode classNode,
org.codehaus.groovy.ast.expr.ClosureExpression closureAction,
org.codehaus.groovy.ast.PropertyNode property,
org.codehaus.groovy.control.SourceUnit source,
org.codehaus.groovy.classgen.GeneratorContext context)
initializeActionParameters
protected org.codehaus.groovy.ast.stmt.BlockStatement initializeActionParameters(org.codehaus.groovy.ast.ClassNode classNode,
org.codehaus.groovy.ast.ASTNode actionNode,
java.lang.String actionName,
org.codehaus.groovy.ast.Parameter[] actionParameters,
org.codehaus.groovy.control.SourceUnit source,
org.codehaus.groovy.classgen.GeneratorContext context)
initializeMethodParameter
protected void initializeMethodParameter(org.codehaus.groovy.ast.ClassNode classNode,
org.codehaus.groovy.ast.stmt.BlockStatement wrapper,
org.codehaus.groovy.ast.ASTNode actionNode,
java.lang.String actionName,
org.codehaus.groovy.ast.Parameter param,
org.codehaus.groovy.control.SourceUnit source,
org.codehaus.groovy.classgen.GeneratorContext context)
initializeAndValidateCommandObjectParameter
protected void initializeAndValidateCommandObjectParameter(org.codehaus.groovy.ast.stmt.BlockStatement wrapper,
org.codehaus.groovy.ast.ClassNode controllerNode,
org.codehaus.groovy.ast.ClassNode commandObjectNode,
org.codehaus.groovy.ast.ASTNode actionNode,
java.lang.String actionName,
java.lang.String paramName,
org.codehaus.groovy.control.SourceUnit source,
org.codehaus.groovy.classgen.GeneratorContext context)
initializeCommandObjectParameter
protected void initializeCommandObjectParameter(org.codehaus.groovy.ast.stmt.BlockStatement wrapper,
org.codehaus.groovy.ast.ClassNode commandObjectNode,
java.lang.String paramName,
org.codehaus.groovy.control.SourceUnit source)
initializeStringParameter
protected void initializeStringParameter(org.codehaus.groovy.ast.stmt.BlockStatement wrapper,
org.codehaus.groovy.ast.Parameter param,
java.lang.String requestParameterName)
initializePrimitiveOrTypeWrapperParameter
protected void initializePrimitiveOrTypeWrapperParameter(org.codehaus.groovy.ast.stmt.BlockStatement wrapper,
org.codehaus.groovy.ast.Parameter param,
java.lang.String requestParameterName)
getRejectValueExpression
protected org.codehaus.groovy.ast.expr.Expression getRejectValueExpression(java.lang.String methodParamName)
performInjection
public void performInjection(org.codehaus.groovy.control.SourceUnit source,
org.codehaus.groovy.ast.ClassNode classNode)
- Specified by:
performInjection in interface org.codehaus.groovy.grails.compiler.injection.ClassInjector
shouldInject
public boolean shouldInject(java.net.URL url)
- Specified by:
shouldInject in interface org.codehaus.groovy.grails.compiler.injection.ClassInjector