Groovy Documentation

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

java.lang.Object
  org.codehaus.groovy.grails.compiler.injection.GrailsASTUtils

public class GrailsASTUtils
extends java.lang.Object

Helper methods for working with Groovy AST trees.

Authors:
Graeme Rocher
Since:
0.3


Field Summary
static org.codehaus.groovy.syntax.Token ASSIGNMENT_OPERATOR

static java.lang.String DOMAIN_DIR

static org.codehaus.groovy.syntax.Token EQUALS_OPERATOR

static java.lang.String GRAILS_APP_DIR

static java.lang.String METHOD_MISSING_METHOD_NAME

static org.codehaus.groovy.ast.ClassNode MISSING_METHOD_EXCEPTION

static org.codehaus.groovy.syntax.Token NOT_EQUALS_OPERATOR

static org.codehaus.groovy.ast.expr.ConstantExpression NULL_EXPRESSION

static java.lang.String STATIC_METHOD_MISSING_METHOD_NAME

 
Method Summary
static void addAnnotationIfNecessary(org.codehaus.groovy.ast.ClassNode classNode, java.lang.Class entityClass)

static void addDelegateConstructor(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.MethodNode constructorMethod)

Adds or modifies an existing constructor to delegate to the given static constructor method for initialization logic.

static org.codehaus.groovy.ast.MethodNode addDelegateInstanceMethod(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.expr.Expression delegate, org.codehaus.groovy.ast.MethodNode declaredMethod)

Adds a delegate method to the target class node where the first argument is to the delegate method is 'this'.

static org.codehaus.groovy.ast.MethodNode 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)

static org.codehaus.groovy.ast.MethodNode addDelegateInstanceMethod(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.expr.Expression delegate, org.codehaus.groovy.ast.MethodNode declaredMethod, boolean thisAsFirstArgument)

static org.codehaus.groovy.ast.MethodNode 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, boolean thisAsFirstArgument)

Adds a delegate method to the target class node where the first argument is to the delegate method is 'this'.

static void addDelegateInstanceMethods(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.ClassNode delegateNode, org.codehaus.groovy.ast.expr.Expression delegateInstance)

static void addDelegateInstanceMethods(org.codehaus.groovy.ast.ClassNode supportedSuperType, org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.ClassNode delegateNode, org.codehaus.groovy.ast.expr.Expression delegateInstance)

static org.codehaus.groovy.ast.MethodNode addDelegateStaticMethod(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.MethodNode delegateMethod)

Adds a static method call to given class node that delegates to the given method

static org.codehaus.groovy.ast.MethodNode addDelegateStaticMethod(org.codehaus.groovy.ast.expr.Expression expression, org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.MethodNode delegateMethod)

Adds a static method to the given class node that delegates to the given method and resolves the object to invoke the method on from the given expression.

static org.codehaus.groovy.ast.MethodNode addDelegateStaticMethod(org.codehaus.groovy.ast.expr.Expression expression, org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.MethodNode delegateMethod, org.codehaus.groovy.ast.AnnotationNode markerAnnotation)

Adds a static method to the given class node that delegates to the given method and resolves the object to invoke the method on from the given expression.

static org.codehaus.groovy.ast.FieldNode addFieldIfNonExistent(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.ClassNode fieldType, java.lang.String fieldName)

static void addMethodIfNotPresent(org.codehaus.groovy.ast.ClassNode controllerClassNode, org.codehaus.groovy.ast.MethodNode methodNode)

static org.codehaus.groovy.ast.expr.ArgumentListExpression createArgumentListFromParameters(org.codehaus.groovy.ast.Parameter[] parameterTypes, boolean thisAsFirstArgument)

Creates an argument list from the given parameter types.

static org.codehaus.groovy.ast.stmt.ExpressionStatement createPrintlnStatement(java.lang.String message)

static org.codehaus.groovy.ast.stmt.ExpressionStatement createPrintlnStatement(java.lang.String message, java.lang.String variable)

static void error(org.codehaus.groovy.control.SourceUnit sourceUnit, org.codehaus.groovy.ast.ASTNode astNode, java.lang.String message)

Generates a fatal compilation error.

static void error(org.codehaus.groovy.control.SourceUnit sourceUnit, org.codehaus.groovy.ast.ASTNode astNode, java.lang.String message, boolean fatal)

Generates a fatal compilation error.

static org.codehaus.groovy.ast.AnnotationNode findAnnotation(org.codehaus.groovy.ast.ClassNode annotationClassNode, java.util.List annotations)

static org.codehaus.groovy.ast.AnnotationNode findAnnotation(org.codehaus.groovy.ast.ClassNode classNode, java.lang.Class type)

static org.codehaus.groovy.ast.ConstructorNode findConstructor(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.Parameter[] constructorParams)

Finds a constructor for the given class node and parameter types

static java.util.Map getAllAssociationMap(org.codehaus.groovy.ast.ClassNode classNode)

static java.util.Map getAssocationMap(org.codehaus.groovy.ast.ClassNode classNode, java.lang.String associationType)

Returns a map containing the names and types of the given association type. eg.

static java.util.Map getConstraintMetadata(org.codehaus.groovy.ast.expr.ClosureExpression closureExpression)

Evaluates a constraints closure and returns metadata about the constraints configured in the closure.

static org.codehaus.groovy.ast.ConstructorNode getDefaultConstructor(org.codehaus.groovy.ast.ClassNode classNode)

Obtains the default constructor for the given class node.

static java.lang.String getFullName(org.codehaus.groovy.ast.ClassNode classNode)

Gets the full name of a ClassNode.

static org.codehaus.groovy.ast.ClassNode getFurthestParent(org.codehaus.groovy.ast.ClassNode classNode)

static org.codehaus.groovy.ast.ClassNode getFurthestUnresolvedParent(org.codehaus.groovy.ast.ClassNode classNode)

static org.codehaus.groovy.ast.Parameter[] getRemainingParameterTypes(org.codehaus.groovy.ast.Parameter[] parameters)

Gets the remaining parameters excluding the first parameter in the given list

static boolean hasAnnotation(org.codehaus.groovy.ast.ClassNode classNode, java.lang.Class annotationClass)

Returns true if classNode is marked with annotationClass

static boolean hasAnyAnnotations(org.codehaus.groovy.ast.ClassNode classNode, java.lang.Class... annotationsToLookFor)

@param classNode a ClassNode to search

static boolean hasOrInheritsProperty(org.codehaus.groovy.ast.ClassNode classNode, java.lang.String propertyName)

static boolean hasProperty(org.codehaus.groovy.ast.ClassNode classNode, java.lang.String propertyName)

Returns whether a classNode has the specified property or not

static boolean implementsOrInheritsZeroArgMethod(org.codehaus.groovy.ast.ClassNode classNode, java.lang.String methodName, java.util.List ignoreClasses)

static boolean implementsZeroArgMethod(org.codehaus.groovy.ast.ClassNode classNode, java.lang.String methodName)

Tests whether the ClasNode implements the specified method name.

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

static boolean isCandidateMethod(org.codehaus.groovy.ast.MethodNode declaredMethod)

static boolean isConstructorMethod(org.codehaus.groovy.ast.MethodNode declaredMethod)

static boolean isDomainClass(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.control.SourceUnit sourceNode)

static boolean isInnerClassNode(org.codehaus.groovy.ast.ClassNode classNode)

Whether the given class node is an inner class

static org.codehaus.groovy.ast.ClassNode nonGeneric(org.codehaus.groovy.ast.ClassNode type)

static boolean parametersEqual(org.codehaus.groovy.ast.Parameter[] a, org.codehaus.groovy.ast.Parameter[] b)

@return true if the two arrays are of the same size and have the same contents

static void warning(org.codehaus.groovy.control.SourceUnit sourceUnit, org.codehaus.groovy.ast.ASTNode node, java.lang.String warningMessage)

static void wrapMethodBodyInTryCatchDebugStatements(org.codehaus.groovy.ast.MethodNode methodNode)

Wraps a method body in try / catch logic that catches any errors and logs an error, but does not rethrow!

 
Methods inherited from class java.lang.Object
java.lang.Object#wait(), java.lang.Object#wait(long, int), java.lang.Object#wait(long), 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

ASSIGNMENT_OPERATOR

public static final org.codehaus.groovy.syntax.Token ASSIGNMENT_OPERATOR


DOMAIN_DIR

public static final java.lang.String DOMAIN_DIR


EQUALS_OPERATOR

public static final org.codehaus.groovy.syntax.Token EQUALS_OPERATOR


GRAILS_APP_DIR

public static final java.lang.String GRAILS_APP_DIR


METHOD_MISSING_METHOD_NAME

public static final java.lang.String METHOD_MISSING_METHOD_NAME


MISSING_METHOD_EXCEPTION

public static final org.codehaus.groovy.ast.ClassNode MISSING_METHOD_EXCEPTION


NOT_EQUALS_OPERATOR

public static final org.codehaus.groovy.syntax.Token NOT_EQUALS_OPERATOR


NULL_EXPRESSION

public static final org.codehaus.groovy.ast.expr.ConstantExpression NULL_EXPRESSION


STATIC_METHOD_MISSING_METHOD_NAME

public static final java.lang.String STATIC_METHOD_MISSING_METHOD_NAME


 
Method Detail

addAnnotationIfNecessary

public static void addAnnotationIfNecessary(org.codehaus.groovy.ast.ClassNode classNode, nClassNode); java.lang.Class entityClass)


addDelegateConstructor

public static void addDelegateConstructor(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.MethodNode constructorMethod)
Adds or modifies an existing constructor to delegate to the given static constructor method for initialization logic.
Parameters:
classNode - The class node
constructorMethod - The constructor static method


addDelegateInstanceMethod

public static org.codehaus.groovy.ast.MethodNode addDelegateInstanceMethod(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.expr.Expression delegate, org.codehaus.groovy.ast.MethodNode declaredMethod)
Adds a delegate method to the target class node where the first argument is to the delegate method is 'this'. In other words a method such as foo(Object instance, String bar) would be added with a signature of foo(String) and 'this' is passed to the delegate instance
Parameters:
classNode - The class node
delegate - The expression that looks up the delegate
declaredMethod - The declared method
Returns:
The added method node or null if it couldn't be added


addDelegateInstanceMethod

public static org.codehaus.groovy.ast.MethodNode 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)


addDelegateInstanceMethod

public static org.codehaus.groovy.ast.MethodNode addDelegateInstanceMethod(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.expr.Expression delegate, org.codehaus.groovy.ast.MethodNode declaredMethod, boolean thisAsFirstArgument)


addDelegateInstanceMethod

public static org.codehaus.groovy.ast.MethodNode 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, boolean thisAsFirstArgument)
Adds a delegate method to the target class node where the first argument is to the delegate method is 'this'. In other words a method such as foo(Object instance, String bar) would be added with a signature of foo(String) and 'this' is passed to the delegate instance
Parameters:
classNode - The class node
delegate - The expression that looks up the delegate
declaredMethod - The declared method
thisAsFirstArgument - Whether 'this' should be passed as the first argument to the method
Returns:
The added method node or null if it couldn't be added


addDelegateInstanceMethods

public static void addDelegateInstanceMethods(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.ClassNode delegateNode, org.codehaus.groovy.ast.expr.Expression delegateInstance)


addDelegateInstanceMethods

public static void addDelegateInstanceMethods(org.codehaus.groovy.ast.ClassNode supportedSuperType, org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.ClassNode delegateNode, org.codehaus.groovy.ast.expr.Expression delegateInstance)


addDelegateStaticMethod

public static org.codehaus.groovy.ast.MethodNode addDelegateStaticMethod(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.MethodNode delegateMethod)
Adds a static method call to given class node that delegates to the given method
Parameters:
classNode - The class node
delegateMethod - The delegate method
Returns:
The added method node or null if it couldn't be added


addDelegateStaticMethod

public static org.codehaus.groovy.ast.MethodNode addDelegateStaticMethod(org.codehaus.groovy.ast.expr.Expression expression, org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.MethodNode delegateMethod)
Adds a static method to the given class node that delegates to the given method and resolves the object to invoke the method on from the given expression.
Parameters:
expression - The expression
classNode - The class node
delegateMethod - The delegate method
Returns:
The added method node or null if it couldn't be added


addDelegateStaticMethod

public static org.codehaus.groovy.ast.MethodNode addDelegateStaticMethod(org.codehaus.groovy.ast.expr.Expression expression, org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.MethodNode delegateMethod, org.codehaus.groovy.ast.AnnotationNode markerAnnotation)
Adds a static method to the given class node that delegates to the given method and resolves the object to invoke the method on from the given expression.
Parameters:
expression - The expression
classNode - The class node
delegateMethod - The delegate method
markerAnnotation - A marker annotation to be added to all methods
Returns:
The added method node or null if it couldn't be added


addFieldIfNonExistent

public static org.codehaus.groovy.ast.FieldNode addFieldIfNonExistent(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.ClassNode fieldType, java.lang.String fieldName)


addMethodIfNotPresent

public static void addMethodIfNotPresent(org.codehaus.groovy.ast.ClassNode controllerClassNode, org.codehaus.groovy.ast.MethodNode methodNode)


createArgumentListFromParameters

public static org.codehaus.groovy.ast.expr.ArgumentListExpression createArgumentListFromParameters(org.codehaus.groovy.ast.Parameter[] parameterTypes, boolean thisAsFirstArgument)
Creates an argument list from the given parameter types.
Parameters:
parameterTypes - The parameter types
thisAsFirstArgument - Whether to include a reference to 'this' as the first argument
Returns:
the arguments


createPrintlnStatement

public static org.codehaus.groovy.ast.stmt.ExpressionStatement createPrintlnStatement(java.lang.String message)


createPrintlnStatement

public static org.codehaus.groovy.ast.stmt.ExpressionStatement createPrintlnStatement(java.lang.String message, java.lang.String variable)


error

public static void error(org.codehaus.groovy.control.SourceUnit sourceUnit, org.codehaus.groovy.ast.ASTNode astNode, java.lang.String message)
Generates a fatal compilation error.
Parameters:
sourceUnit - the SourceUnit
astNode - the ASTNode which caused the error
message - The error message


error

public static void error(org.codehaus.groovy.control.SourceUnit sourceUnit, org.codehaus.groovy.ast.ASTNode astNode, java.lang.String message, boolean fatal)
Generates a fatal compilation error.
Parameters:
sourceUnit - the SourceUnit
astNode - the ASTNode which caused the error
message - The error message
fatal - indicates if this is a fatal error


findAnnotation

public static org.codehaus.groovy.ast.AnnotationNode findAnnotation(org.codehaus.groovy.ast.ClassNode annotationClassNode, java.util.List annotations)


findAnnotation

public static org.codehaus.groovy.ast.AnnotationNode findAnnotation(org.codehaus.groovy.ast.ClassNode classNode, java.lang.Class type)


findConstructor

public static org.codehaus.groovy.ast.ConstructorNode findConstructor(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.Parameter[] constructorParams)
Finds a constructor for the given class node and parameter types
Parameters:
classNode - The class node
constructorParams - The parameter types
Returns:
The located constructor or null


getAllAssociationMap

public static java.util.Map getAllAssociationMap(org.codehaus.groovy.ast.ClassNode classNode)


getAssocationMap

public static java.util.Map getAssocationMap(org.codehaus.groovy.ast.ClassNode classNode, java.lang.String associationType)
Returns a map containing the names and types of the given association type. eg. GrailsDomainClassProperty.HAS_MANY
Parameters:
classNode - The target class ndoe
associationType - The associationType
Returns:
A map


getConstraintMetadata

public static java.util.Map getConstraintMetadata(org.codehaus.groovy.ast.expr.ClosureExpression closureExpression)
Evaluates a constraints closure and returns metadata about the constraints configured in the closure. The Map returned has property names as keys and the value associated with each of those property names is a Map which has constraint names as keys and the Expression associated with that constraint as values.
Parameters:
closureExpression - the closure expression to evaluate
Returns:
the Map as described above


getDefaultConstructor

public static org.codehaus.groovy.ast.ConstructorNode getDefaultConstructor(org.codehaus.groovy.ast.ClassNode classNode)
Obtains the default constructor for the given class node.
Parameters:
classNode - The class node
Returns:
The default constructor or null if there isn't one


getFullName

public static java.lang.String getFullName(org.codehaus.groovy.ast.ClassNode classNode)
Gets the full name of a ClassNode.
Parameters:
classNode - The class node
Returns:
The full name


getFurthestParent

public static org.codehaus.groovy.ast.ClassNode getFurthestParent(org.codehaus.groovy.ast.ClassNode classNode)


getFurthestUnresolvedParent

public static org.codehaus.groovy.ast.ClassNode getFurthestUnresolvedParent(org.codehaus.groovy.ast.ClassNode classNode)


getRemainingParameterTypes

public static org.codehaus.groovy.ast.Parameter[] getRemainingParameterTypes(org.codehaus.groovy.ast.Parameter[] parameters)
Gets the remaining parameters excluding the first parameter in the given list
Parameters:
parameters - The parameters
Returns:
A new array with the first parameter removed


hasAnnotation

public static boolean hasAnnotation(org.codehaus.groovy.ast.ClassNode classNode, java.lang.Class annotationClass)
Returns true if classNode is marked with annotationClass
Parameters:
classNode - A ClassNode to inspect
annotationClass - an annotation to look for
Returns:
true if classNode is marked with annotationClass, otherwise false


hasAnyAnnotations

public static boolean hasAnyAnnotations(org.codehaus.groovy.ast.ClassNode classNode, java.lang.Class... annotationsToLookFor)
Parameters:
classNode - a ClassNode to search
annotationsToLookFor - Annotations to look for
Returns:
true if classNode is marked with any of the annotations in annotationsToLookFor


hasOrInheritsProperty

public static boolean hasOrInheritsProperty(org.codehaus.groovy.ast.ClassNode classNode, java.lang.String propertyName)


hasProperty

public static boolean hasProperty(org.codehaus.groovy.ast.ClassNode classNode, java.lang.String propertyName)
Returns whether a classNode has the specified property or not
Parameters:
classNode - The ClassNode
propertyName - The name of the property
Returns:
true if the property exists in the ClassNode


implementsOrInheritsZeroArgMethod

@SuppressWarnings("rawtypes")
public static boolean implementsOrInheritsZeroArgMethod(org.codehaus.groovy.ast.ClassNode classNode, java.lang.String methodName, java.util.List ignoreClasses)


implementsZeroArgMethod

public static boolean implementsZeroArgMethod(org.codehaus.groovy.ast.ClassNode classNode, java.lang.String methodName)
Tests whether the ClasNode implements the specified method name.
Parameters:
classNode - The ClassNode
methodName - The method name
Returns:
true if it does implement the method


isCandidateInstanceMethod

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


isCandidateMethod

public static boolean isCandidateMethod(org.codehaus.groovy.ast.MethodNode declaredMethod)


isConstructorMethod

public static boolean isConstructorMethod(org.codehaus.groovy.ast.MethodNode declaredMethod)


isDomainClass

public static boolean isDomainClass(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.control.SourceUnit sourceNode)


isInnerClassNode

public static boolean isInnerClassNode(org.codehaus.groovy.ast.ClassNode classNode)
Whether the given class node is an inner class
Parameters:
classNode - The class node
Returns:
True if it is


nonGeneric

public static org.codehaus.groovy.ast.ClassNode nonGeneric(org.codehaus.groovy.ast.ClassNode type)


parametersEqual

public static boolean parametersEqual(org.codehaus.groovy.ast.Parameter[] a, org.codehaus.groovy.ast.Parameter[] b)
Returns:
true if the two arrays are of the same size and have the same contents


warning

public static void warning(org.codehaus.groovy.control.SourceUnit sourceUnit, org.codehaus.groovy.ast.ASTNode node, java.lang.String warningMessage)


wrapMethodBodyInTryCatchDebugStatements

public static void wrapMethodBodyInTryCatchDebugStatements(org.codehaus.groovy.ast.MethodNode methodNode)
Wraps a method body in try / catch logic that catches any errors and logs an error, but does not rethrow!
Parameters:
methodNode - The method node


 

Groovy Documentation