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

public final Class ASTTransformationVisitor

extends ClassCodeVisitorSupport
Class Inheritance
Imports
groovy.lang.GroovyClassLoader, .Tuple, .Tuple3, groovy.transform.CompilationUnitAware, org.codehaus.groovy.ast.ASTNode, .AnnotatedNode, .AnnotationNode, .ClassCodeVisitorSupport, .ClassNode, .GroovyClassVisitor, org.codehaus.groovy.ast.expr.Expression, org.codehaus.groovy.classgen.GeneratorContext, org.codehaus.groovy.control.ASTTransformationsContext, .CompilationUnit, .CompilePhase, .Phases, .SourceUnit, org.codehaus.groovy.control.messages.SimpleMessage, .WarningMessage, org.codehaus.groovy.util.URLStreams, java.io.BufferedReader, .IOException, .InputStreamReader, java.lang.reflect.InvocationTargetException, java.net.URISyntaxException, .URL, java.nio.charset.StandardCharsets, java.util.ArrayList, .Collections, .Enumeration, .HashMap, .LinkedHashMap, .LinkedList, .List, .Map, .Set

This class handles the invocation of the ASTAnnotationTransformation when it is encountered by a tree walk. One instance of each exists for each phase of the compilation it applies to. Before invocation the

org.codehaus.groovy.transform.ASTTransformationCollectorCodeVisitor will add a list of annotations that this visitor should be concerned about. All other annotations are ignored, whether or not they are GroovyASTTransformation annotated or not.

A Two-pass method is used. First all candidate annotations are added to a list then the transformations are called on those collected annotations. This is done to avoid concurrent modification exceptions during the AST tree walk and allows the transformations to alter any portion of the AST tree. Hence annotations that are added in this phase will not be processed as transformations. They will only be handled in later phases (and then only if the type was in the AST prior to any AST transformations being run against it).

Field Summary

Modifier and TypeField and Description
private static final Tuple3<String, String, String>
private final ASTTransformationsContext
private final CompilePhase
private SourceUnit
private List<ASTNode[]>
private Map<ASTNode, List<ASTTransformation>>

Constructor Summary

AccessConstructor and Description
private

Method Summary

Modifier and TypeMethod and Description
public static void
public static void
public static void
addPhaseOperations(final CompilationUnit compilationUnit)

private static void
addPhaseOperationsForGlobalTransforms(CompilationUnit compilationUnit, Map<String, URL> transformNames, boolean isFirstScan)

private List<AnnotationNode>
private static void
doAddGlobalTransforms(ASTTransformationsContext context, boolean isFirstScan)

protected SourceUnit
public void
visitAnnotations(final AnnotatedNode
the node to be processed
node
)

Overrides org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitAnnotations.

Adds the annotation to the internal target list if a match is found.
public void
Inherited from org.codehaus.groovy.ast.ClassCodeVisitorSupport:
addErrorvisitAnnotationvisitAssertStatementvisitBlockStatementvisitBreakStatementvisitCaseStatementvisitCatchStatementvisitClassCodeContainervisitConstructorvisitConstructorOrMethodvisitContinueStatementvisitDeclarationExpressionvisitDoWhileLoopvisitExpressionStatementvisitFieldvisitForLoopvisitIfElsevisitImportsvisitMethodvisitObjectInitializerStatementsvisitPackagevisitPropertyvisitReturnStatementvisitStatementvisitSwitchvisitSynchronizedStatementvisitThrowStatementvisitTryCatchFinallyvisitWhileLoop

Field Detail

COMPILEDYNAMIC_AND_COMPILESTATIC_AND_TYPECHECKEDback to summary
private static final Tuple3<String, String, String> COMPILEDYNAMIC_AND_COMPILESTATIC_AND_TYPECHECKED
contextback to summary
private final ASTTransformationsContext context
phaseback to summary
private final CompilePhase phase
sourceback to summary
private SourceUnit source
targetNodesback to summary
private List<ASTNode[]> targetNodes
transformsback to summary
private Map<ASTNode, List<ASTTransformation>> transforms

Constructor Detail

ASTTransformationVisitorback to summary
private ASTTransformationVisitor(final CompilePhase phase, final ASTTransformationsContext context)

Method Detail

addGlobalTransformsback to summary
public static void addGlobalTransforms(ASTTransformationsContext context)
addGlobalTransformsAfterGrabback to summary
public static void addGlobalTransformsAfterGrab(ASTTransformationsContext context)
addPhaseOperationsback to summary
public static void addPhaseOperations(final CompilationUnit compilationUnit)
addPhaseOperationsForGlobalTransformsback to summary
private static void addPhaseOperationsForGlobalTransforms(CompilationUnit compilationUnit, Map<String, URL> transformNames, boolean isFirstScan)
distinctAnnotationsback to summary
private List<AnnotationNode> distinctAnnotations(AnnotatedNode node)
doAddGlobalTransformsback to summary
private static void doAddGlobalTransforms(ASTTransformationsContext context, boolean isFirstScan)
getSourceUnitback to summary
protected SourceUnit getSourceUnit()

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

visitAnnotationsback to summary
public void visitAnnotations(final AnnotatedNode node)

Overrides org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitAnnotations.

Adds the annotation to the internal target list if a match is found.

Parameters
node:AnnotatedNode

the node to be processed

visitClassback to summary
public void visitClass(ClassNode classNode)

Overrides org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass.

Implements org.codehaus.groovy.ast.GroovyClassVisitor.visitClass.

Main loop entry.

First, it delegates to the super visitClass so we can collect the relevant annotations in an AST tree walk.

Second, it calls the visit method on the transformation for each relevant annotation found.

Parameters
classNode:ClassNode

the class to visit