Top Description Inners Fields Constructors Methods
org.codehaus.groovy.transform

public Class NewifyASTTransformation

extends ClassCodeExpressionTransformer
implements ASTTransformation
Class Inheritance
All Implemented Interfaces
org.codehaus.groovy.transform.ASTTransformation
Annotations
@GroovyASTTransformation
phase:CANONICALIZATION
Imports
groovy.lang.Newify, .Reference, org.codehaus.groovy.GroovyBugError, org.codehaus.groovy.ast.ASTNode, .AnnotatedNode, .AnnotationNode, .ClassCodeExpressionTransformer, .ClassHelper, .ClassNode, .FieldNode, .MethodNode, org.codehaus.groovy.ast.expr.ArgumentListExpression, .ClassExpression, .ClosureExpression, .ConstantExpression, .ConstructorCallExpression, .DeclarationExpression, .Expression, .ListExpression, .MethodCallExpression, .VariableExpression, org.codehaus.groovy.control.CompilePhase, .SourceUnit, org.codehaus.groovy.runtime.DefaultGroovyMethods, java.math.BigDecimal, .BigInteger, java.util.ArrayList, .Arrays, .HashMap, .HashSet, .LinkedList, .List, .Map, .Set, java.util.concurrent.ConcurrentHashMap, java.util.regex.Pattern, .PatternSyntaxException

Handles generation of code for the @Newify AST transform.

Nested and Inner Type Summary

Modifier and TypeClass and Description
private static class

Field Summary

Modifier and TypeField and Description
private boolean
private static final String
private DeclarationExpression
private ListExpression
private Pattern
private static final Pattern
private static final Class<T>[]
private static final String
private static final ClassNode
private static Map<String, ClassNode>
private Map<String, NewifyASTTransformation.NewifyClassData>
private SourceUnit

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
private void
checkAutoClash(boolean autoFlag, AnnotatedNode parent)

private void
private void
private static boolean
private ListExpression
determineClasses(Expression expr, boolean searchSourceUnit)

allow non-strict mode in scripts because parsing not complete at that point

private Pattern
public static String
private boolean
private ClassNode
protected SourceUnit
private ClassNode
private boolean
private static void
private boolean
private static boolean
private void
newifyClass(ClassNode cNode, boolean autoFlag, ListExpression list, final Pattern cnPattern)

private void
newifyDeclaration(DeclarationExpression de, boolean autoFlag, ListExpression list, final Pattern cnPattern)

private void
newifyMethodOrField(AnnotatedNode parent, boolean autoFlag, ListExpression list, final Pattern cnPattern)

private boolean
public Expression
private Expression
public void
visit(ASTNode[]
The ASTnodes when the call was triggered. Element 0 is the AnnotationNode that triggered this annotation to be activated. Element 1 is the AnnotatedNode decorated, such as a MethodNode or ClassNode. For global transformations it is usually safe to ignore this parameter.
nodes
,
SourceUnit
The source unit being compiled. The source unit may contain several classes. For global transformations, information about the AST can be retrieved from this object.
source
)

Implements org.codehaus.groovy.transform.ASTTransformation.visit.

The method is invoked when an AST Transformation is active.
Inherited from org.codehaus.groovy.ast.ClassCodeExpressionTransformer:
setSourcePositionvisitAnnotationvisitAssertStatementvisitCaseStatementvisitConstructorOrMethodvisitDoWhileLoopvisitExpressionStatementvisitFieldvisitForLoopvisitIfElsevisitPropertyvisitReturnStatementvisitSwitchvisitSynchronizedStatementvisitThrowStatementvisitWhileLoop

Field Detail

autoback to summary
private boolean auto
BASE_BAD_PARAM_ERRORback to summary
private static final String BASE_BAD_PARAM_ERROR
candidateback to summary
private DeclarationExpression candidate
classesToNewifyback to summary
private ListExpression classesToNewify
classNamePatternback to summary
private Pattern classNamePattern
extractNamePatternback to summary
private static final Pattern extractNamePattern
globalClassesback to summary
private static final Class<T>[] globalClasses
MY_NAMEback to summary
private static final String MY_NAME
MY_TYPEback to summary
private static final ClassNode MY_TYPE
nameToGlobalClassesNodesMapback to summary
private static Map<String, ClassNode> nameToGlobalClassesNodesMap
nameToInnerClassesNodesMapback to summary
private Map<String, NewifyASTTransformation.NewifyClassData> nameToInnerClassesNodesMap
sourceback to summary
private SourceUnit source

Constructor Detail

NewifyASTTransformationback to summary
public NewifyASTTransformation()

Method Detail

checkAutoClashback to summary
private void checkAutoClash(boolean autoFlag, AnnotatedNode parent)
checkClassLevelClashesback to summary
private void checkClassLevelClashes(ListExpression list)
checkDuplicateNameClashesback to summary
private void checkDuplicateNameClashes(ListExpression list)
determineAutoFlagback to summary
private static boolean determineAutoFlag(Expression autoExpr)
determineClassesback to summary
private ListExpression determineClasses(Expression expr, boolean searchSourceUnit)

allow non-strict mode in scripts because parsing not complete at that point

determineClassNamePatternback to summary
private Pattern determineClassNamePattern(Expression expr)
extractNameback to summary
public static String extractName(final String s)
findClassWithMatchingBasenameback to summary
private boolean findClassWithMatchingBasename(String nameWithoutPackage)
findMatchingCandidateClassback to summary
private ClassNode findMatchingCandidateClass(MethodCallExpression mce)
getSourceUnitback to summary
protected SourceUnit getSourceUnit()

Implements abstract org.codehaus.groovy.ast.ClassCodeVisitorSupport.getSourceUnit.

getSourceUnitClassback to summary
private ClassNode getSourceUnitClass(VariableExpression ve)
hasClassesToNewifyback to summary
private boolean hasClassesToNewify()
internalErrorback to summary
private static void internalError(String message)
isNewifyCandidateback to summary
private boolean isNewifyCandidate(MethodCallExpression mce)
isNewMethodStyleback to summary
private static boolean isNewMethodStyle(MethodCallExpression mce)
newifyClassback to summary
private void newifyClass(ClassNode cNode, boolean autoFlag, ListExpression list, final Pattern cnPattern)
newifyDeclarationback to summary
private void newifyDeclaration(DeclarationExpression de, boolean autoFlag, ListExpression list, final Pattern cnPattern)
newifyMethodOrFieldback to summary
private void newifyMethodOrField(AnnotatedNode parent, boolean autoFlag, ListExpression list, final Pattern cnPattern)
shouldTransformback to summary
private boolean shouldTransform(DeclarationExpression exp)
transformback to summary
public Expression transform(Expression expr)

Overrides org.codehaus.groovy.ast.ClassCodeExpressionTransformer.transform.

Implements org.codehaus.groovy.ast.expr.ExpressionTransformer.transform.

Doc from org.codehaus.groovy.ast.expr.ExpressionTransformer.transform.

Transforms the given expression into another expression

transformMethodCallback to summary
private Expression transformMethodCall(MethodCallExpression mce, Expression argsExp)
visitback to summary
public void visit(ASTNode[] nodes, SourceUnit source)

Implements org.codehaus.groovy.transform.ASTTransformation.visit.

Doc from org.codehaus.groovy.transform.ASTTransformation.visit.

The method is invoked when an AST Transformation is active. For local transformations, it is invoked once each time the local annotation is encountered. For global transformations, it is invoked once for every source unit, which is typically a source file.

Parameters
nodes:ASTNode[]

The ASTnodes when the call was triggered. Element 0 is the AnnotationNode that triggered this annotation to be activated. Element 1 is the AnnotatedNode decorated, such as a MethodNode or ClassNode. For global transformations it is usually safe to ignore this parameter.

source:SourceUnit

The source unit being compiled. The source unit may contain several classes. For global transformations, information about the AST can be retrieved from this object.

org.codehaus.groovy.transform back to summary

private Class NewifyASTTransformation.NewifyClassData

extends Object
Class Inheritance
  • java.lang.Object
  • org.codehaus.groovy.transform.NewifyASTTransformation.NewifyClassData

Field Summary

Modifier and TypeField and Description
pack-priv final String
pack-priv final ClassNode
pack-priv List<ClassNode>

Constructor Summary

AccessConstructor and Description
public
NewifyClassData(final String name, final ClassNode type)

Method Summary

Modifier and TypeMethod and Description
public void
addAdditionalType(final ClassNode additionalType)

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

nameback to summary
pack-priv final String name
typeback to summary
pack-priv final ClassNode type
typesback to summary
pack-priv List<ClassNode> types

Constructor Detail

NewifyClassDataback to summary
public NewifyClassData(final String name, final ClassNode type)

Method Detail

addAdditionalTypeback to summary
public void addAdditionalType(final ClassNode additionalType)