public class ControllerActionTransformer
extends java.lang.Object
implements org.codehaus.groovy.grails.compiler.injection.GrailsArtefactClassInjector, org.codehaus.groovy.grails.compiler.injection.AnnotatedClassInjector
| Modifier and Type | Field and Description |
|---|---|
static org.codehaus.groovy.ast.AnnotationNode |
ACTION_ANNOTATION_NODE |
static java.lang.String |
EXCEPTION_HANDLER_META_DATA_FIELD_NAME |
static java.lang.String |
VOID_TYPE |
| Constructor and Description |
|---|
ControllerActionTransformer() |
| Modifier and Type | Method and Description |
|---|---|
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.ClassNode controllerClassNode,
org.codehaus.groovy.ast.Parameter[] parameters,
org.codehaus.groovy.ast.MethodNode methodNode) |
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(org.codehaus.groovy.ast.ClassNode classNode,
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.ClassNode classNode,
org.codehaus.groovy.ast.stmt.BlockStatement wrapper,
org.codehaus.groovy.ast.Parameter param,
java.lang.String requestParameterName) |
protected void |
initializeStringParameter(org.codehaus.groovy.ast.ClassNode classNode,
org.codehaus.groovy.ast.stmt.BlockStatement wrapper,
org.codehaus.groovy.ast.Parameter param,
java.lang.String requestParameterName) |
protected boolean |
methodShouldBeConfiguredAsControllerAction(org.codehaus.groovy.ast.MethodNode method) |
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.ClassNode controllerClassNode,
org.codehaus.groovy.ast.MethodNode methodNode)
This will wrap the method body in a try catch block which does something
like this:
|
public static final org.codehaus.groovy.ast.AnnotationNode ACTION_ANNOTATION_NODE
public static final java.lang.String EXCEPTION_HANDLER_META_DATA_FIELD_NAME
public static final java.lang.String VOID_TYPE
public java.lang.String[] getArtefactTypes()
getArtefactTypes in interface org.codehaus.groovy.grails.compiler.injection.GrailsArtefactClassInjectorpublic void performInjection(org.codehaus.groovy.control.SourceUnit source,
org.codehaus.groovy.classgen.GeneratorContext context,
org.codehaus.groovy.ast.ClassNode classNode)
performInjection in interface org.codehaus.groovy.grails.compiler.injection.ClassInjectorpublic void performInjectionOnAnnotatedClass(org.codehaus.groovy.control.SourceUnit source,
org.codehaus.groovy.classgen.GeneratorContext context,
org.codehaus.groovy.ast.ClassNode classNode)
performInjectionOnAnnotatedClass in interface org.codehaus.groovy.grails.compiler.injection.AnnotatedClassInjectorpublic void performInjectionOnAnnotatedClass(org.codehaus.groovy.control.SourceUnit source,
org.codehaus.groovy.ast.ClassNode classNode)
performInjectionOnAnnotatedClass in interface org.codehaus.groovy.grails.compiler.injection.ClassInjectorprotected boolean methodShouldBeConfiguredAsControllerAction(org.codehaus.groovy.ast.MethodNode method)
method - a potential controller action methodprotected java.util.Collection<org.codehaus.groovy.ast.MethodNode> getExceptionHandlerMethods(org.codehaus.groovy.ast.ClassNode classNode,
org.codehaus.groovy.control.SourceUnit sourceUnit)
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.ClassNode controllerClassNode,
org.codehaus.groovy.ast.Parameter[] parameters,
org.codehaus.groovy.ast.MethodNode methodNode)
protected void wrapMethodBodyWithExceptionHandling(org.codehaus.groovy.ast.ClassNode controllerClassNode,
org.codehaus.groovy.ast.MethodNode methodNode)
try {
// original method body here
} catch (Exception $caughtException) {
Method $method = getExceptionHandlerMethod($caughtException.getClass())
if($method) {
return $method.invoke(this, $caughtException)
} else {
throw $caughtException
}
}
methodNode - the method to add the try catch block toprotected 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 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 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 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 initializeStringParameter(org.codehaus.groovy.ast.ClassNode classNode,
org.codehaus.groovy.ast.stmt.BlockStatement wrapper,
org.codehaus.groovy.ast.Parameter param,
java.lang.String requestParameterName)
protected void initializePrimitiveOrTypeWrapperParameter(org.codehaus.groovy.ast.ClassNode classNode,
org.codehaus.groovy.ast.stmt.BlockStatement wrapper,
org.codehaus.groovy.ast.Parameter param,
java.lang.String requestParameterName)
protected org.codehaus.groovy.ast.expr.Expression getRejectValueExpression(org.codehaus.groovy.ast.ClassNode classNode,
java.lang.String methodParamName)
public void performInjection(org.codehaus.groovy.control.SourceUnit source,
org.codehaus.groovy.ast.ClassNode classNode)
performInjection in interface org.codehaus.groovy.grails.compiler.injection.ClassInjectorpublic boolean shouldInject(java.net.URL url)
shouldInject in interface org.codehaus.groovy.grails.compiler.injection.ClassInjector