Class CpsTransformer
- All Implemented Interfaces:
org.codehaus.groovy.ast.GroovyCodeVisitor
- Direct Known Subclasses:
SandboxCpsTransformer
Every method not annotated with NonCPS gets rewritten. The general
strategy of CPS transformation is as follows:
Before:
Object foo(int x, int y) {
return x+y;
}
After:
Object foo(int x, int y) {
// the first part is AST of the method body
// the rest (including implicit receiver argument) is actual value of arguments
throw new CpsCallableInvocation(___cps___N, this, new Object[] {x, y});
}
private static CpsFunction ___cps___N = ___cps___N();
private static final CpsFunction ___cps___N() {
Builder b = new Builder(...);
return new CpsFunction(['x','y'], b.plus(b.localVariable("x"), b.localVariable("y"))
}
That is, we transform a Groovy AST of the method body into a tree of
Blocks by using Builder, then the method just returns this
function object and expect the caller to evaluate it, instead of executing
the method synchronously before it returns.
This class achieves this transformation by implementing
GroovyCodeVisitor and traverse Groovy AST tree in the in-order. As we
traverse this tree, we produce another Groovy AST tree that invokes
Builder. Note that we aren't calling Builder directly here; that's
supposed to happen when the Groovy code under transformation actually runs.
Groovy AST that calls Builder is a tree of function call, so we build
MethodCallExpressions in the top-down manner. We do this by
makeNode(String, Runnable), which creates a call to
Builder.xxx(...), then supply the closure that fills in the arguments
to this call by walking down the original Groovy AST tree. This walk-down is
done by calling visit(ASTNode) (to recursively visit
ASTs), or by calling literal(String) methods, which
generate string/class/etc literals, as sometimes Builder methods need
them as well.
- Author:
- Kohsuke Kawaguchi
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected org.codehaus.groovy.ast.ClassNodeprotected TransformerConfigurationstatic final AtomicLongprotected CpsTransformer.ParentClosureAs we visit expressions in the method body, we convert them to theBuilderinvocations and pass them back to this closure. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidcall(org.codehaus.groovy.control.SourceUnit source, org.codehaus.groovy.classgen.GeneratorContext context, org.codehaus.groovy.ast.ClassNode classNode) protected voidgetMultipleAssignmentValueOrCast(org.codehaus.groovy.ast.expr.VariableExpression varExp, org.codehaus.groovy.ast.expr.Expression rhs, org.codehaus.groovy.ast.expr.Expression index) protected Classprotected voidliteral(boolean b) protected voidliteral(int n) protected voidUsed in the closure block ofmakeNode(String, Runnable)to create a literal string argument.protected voidliteral(org.codehaus.groovy.ast.ClassNode c) protected voidloc(org.codehaus.groovy.ast.ASTNode e) protected org.codehaus.groovy.ast.expr.ExpressionmakeBuilder(org.codehaus.groovy.ast.MethodNode m) Generates code that instantiates a newBuilder.protected org.codehaus.groovy.ast.expr.TupleExpressionmakeChildren(Runnable body) Given closure, package them up into a tuple.protected org.codehaus.groovy.ast.expr.TupleExpressionmakeChildren(org.codehaus.groovy.ast.expr.Expression... args) Shorthand forTupleExpression(Expression[]).protected voidMakes an AST fragment that callsBuilderwith specific method.protected voidMakes an AST fragment that callsBuilderwith specific method.protected voidMakes an AST fragment that instantiates a new instance of the given type.protected voidmakeNode(org.codehaus.groovy.ast.ClassNode type, org.codehaus.groovy.ast.expr.Expression... args) Makes an AST fragment that instantiates a new instance of the given type.protected StringprepostfixOperatorSuffix(org.codehaus.groovy.syntax.Token operation) protected voidprocessConstructors(org.codehaus.groovy.ast.ClassNode classNode) Constructors can't be transformed - if we throw aCpsCallableInvocationfrom inside a constructor, there's no way to get back to the continuation.voidprotected booleanshouldBeTransformed(org.codehaus.groovy.ast.MethodNode node) Should this method be transformed?protected voidvisit(Collection<? extends org.codehaus.groovy.ast.ASTNode> col) protected voidvisit(org.codehaus.groovy.ast.ASTNode e) voidvisitArgumentlistExpression(org.codehaus.groovy.ast.expr.ArgumentListExpression expression) voidvisitArrayExpression(org.codehaus.groovy.ast.expr.ArrayExpression exp) voidvisitAssertStatement(org.codehaus.groovy.ast.stmt.AssertStatement statement) protected voidvisitAssignmentOrCast(org.codehaus.groovy.ast.ClassNode type, org.codehaus.groovy.ast.expr.Expression rhs) voidvisitAttributeExpression(org.codehaus.groovy.ast.expr.AttributeExpression exp) voidvisitBinaryExpression(org.codehaus.groovy.ast.expr.BinaryExpression exp) voidvisitBitwiseNegationExpression(org.codehaus.groovy.ast.expr.BitwiseNegationExpression exp) voidvisitBlockStatement(org.codehaus.groovy.ast.stmt.BlockStatement b) voidvisitBooleanExpression(org.codehaus.groovy.ast.expr.BooleanExpression exp) voidvisitBreakStatement(org.codehaus.groovy.ast.stmt.BreakStatement statement) voidvisitBytecodeExpression(org.codehaus.groovy.classgen.BytecodeExpression expression) voidvisitCaseStatement(org.codehaus.groovy.ast.stmt.CaseStatement stmt) voidvisitCastExpression(org.codehaus.groovy.ast.expr.CastExpression exp) voidvisitCatchStatement(org.codehaus.groovy.ast.stmt.CatchStatement stmt) voidvisitClassExpression(org.codehaus.groovy.ast.expr.ClassExpression expression) voidvisitClosureExpression(org.codehaus.groovy.ast.expr.ClosureExpression exp) voidvisitClosureListExpression(org.codehaus.groovy.ast.expr.ClosureListExpression closureListExpression) voidvisitConstantExpression(org.codehaus.groovy.ast.expr.ConstantExpression expression) voidvisitConstructorCallExpression(org.codehaus.groovy.ast.expr.ConstructorCallExpression call) voidvisitContinueStatement(org.codehaus.groovy.ast.stmt.ContinueStatement statement) voidvisitDeclarationExpression(org.codehaus.groovy.ast.expr.DeclarationExpression exp) voidvisitDoWhileLoop(org.codehaus.groovy.ast.stmt.DoWhileStatement loop) voidvisitExpressionStatement(org.codehaus.groovy.ast.stmt.ExpressionStatement statement) voidvisitFieldExpression(org.codehaus.groovy.ast.expr.FieldExpression exp) voidvisitForLoop(org.codehaus.groovy.ast.stmt.ForStatement forLoop) voidvisitGStringExpression(org.codehaus.groovy.ast.expr.GStringExpression exp) voidvisitIfElse(org.codehaus.groovy.ast.stmt.IfStatement stmt) voidvisitListExpression(org.codehaus.groovy.ast.expr.ListExpression exp) voidvisitMapEntryExpression(org.codehaus.groovy.ast.expr.MapEntryExpression expression) voidvisitMapExpression(org.codehaus.groovy.ast.expr.MapExpression exp) voidvisitMethod(org.codehaus.groovy.ast.MethodNode m) Transforms asynchronous workflow method.voidvisitMethodCallExpression(org.codehaus.groovy.ast.expr.MethodCallExpression call) voidvisitMethodPointerExpression(org.codehaus.groovy.ast.expr.MethodPointerExpression exp) protected voidvisitNontransformedField(org.codehaus.groovy.ast.FieldNode f) protected voidvisitNontransformedMethod(org.codehaus.groovy.ast.MethodNode m) For methods that are not CPS-transformed.protected voidvisitNontransformedStatement(org.codehaus.groovy.ast.stmt.Statement s) voidvisitNotExpression(org.codehaus.groovy.ast.expr.NotExpression exp) voidvisitPostfixExpression(org.codehaus.groovy.ast.expr.PostfixExpression exp) voidvisitPrefixExpression(org.codehaus.groovy.ast.expr.PrefixExpression exp) voidvisitPropertyExpression(org.codehaus.groovy.ast.expr.PropertyExpression exp) voidvisitRangeExpression(org.codehaus.groovy.ast.expr.RangeExpression exp) voidvisitReturnStatement(org.codehaus.groovy.ast.stmt.ReturnStatement statement) voidvisitShortTernaryExpression(org.codehaus.groovy.ast.expr.ElvisOperatorExpression exp) voidvisitSpreadExpression(org.codehaus.groovy.ast.expr.SpreadExpression expression) voidvisitSpreadMapExpression(org.codehaus.groovy.ast.expr.SpreadMapExpression expression) voidvisitStaticMethodCallExpression(org.codehaus.groovy.ast.expr.StaticMethodCallExpression exp) voidvisitSwitch(org.codehaus.groovy.ast.stmt.SwitchStatement stmt) voidvisitSynchronizedStatement(org.codehaus.groovy.ast.stmt.SynchronizedStatement statement) voidvisitTernaryExpression(org.codehaus.groovy.ast.expr.TernaryExpression exp) voidvisitThrowStatement(org.codehaus.groovy.ast.stmt.ThrowStatement st) voidvisitTryCatchFinally(org.codehaus.groovy.ast.stmt.TryCatchStatement stmt) voidvisitTupleExpression(org.codehaus.groovy.ast.expr.TupleExpression expression) voidvisitUnaryMinusExpression(org.codehaus.groovy.ast.expr.UnaryMinusExpression exp) voidvisitUnaryPlusExpression(org.codehaus.groovy.ast.expr.UnaryPlusExpression exp) voidvisitVariableExpression(org.codehaus.groovy.ast.expr.VariableExpression exp) voidvisitWhileLoop(org.codehaus.groovy.ast.stmt.WhileStatement loop) protected voidvisitWithSafepoint(org.codehaus.groovy.ast.stmt.Statement st) Likevisit(ASTNode)but also inserts the safepoint at the top.Methods inherited from class org.codehaus.groovy.control.customizers.CompilationCustomizer
getPhaseMethods inherited from class org.codehaus.groovy.control.CompilationUnit.PrimaryClassNodeOperation
needSortedInput
-
Field Details
-
iota
-
classNode
protected org.codehaus.groovy.ast.ClassNode classNode -
config
-
parent
As we visit expressions in the method body, we convert them to theBuilderinvocations and pass them back to this closure.
-
-
Constructor Details
-
CpsTransformer
public CpsTransformer()
-
-
Method Details
-
setConfiguration
-
call
public void call(org.codehaus.groovy.control.SourceUnit source, org.codehaus.groovy.classgen.GeneratorContext context, org.codehaus.groovy.ast.ClassNode classNode) - Specified by:
callin classorg.codehaus.groovy.control.CompilationUnit.PrimaryClassNodeOperation
-
processConstructors
protected void processConstructors(org.codehaus.groovy.ast.ClassNode classNode) Constructors can't be transformed - if we throw aCpsCallableInvocationfrom inside a constructor, there's no way to get back to the continuation. The object does not get created and so we're unable to proceed with it. The same thing applies for object initializers. -
shouldBeTransformed
protected boolean shouldBeTransformed(org.codehaus.groovy.ast.MethodNode node) Should this method be transformed? -
visitMethod
public void visitMethod(org.codehaus.groovy.ast.MethodNode m) Transforms asynchronous workflow method. From:
To:ReturnT foo( T1 arg1, T2 arg2, ...) { ... body ... }private static CpsFunction ___cps___N = ___cps___N(); private static final CpsFunction ___cps___N() { return new CpsFunction(['arg1','arg2','arg3',...], CPS-transformed-method-body) } ReturnT foo( T1 arg1, T2 arg2, ...) { throw new CpsCallableInvocation(___cps___N, this, new Object[] {arg1, arg2, ...}) } -
makeBuilder
protected org.codehaus.groovy.ast.expr.Expression makeBuilder(org.codehaus.groovy.ast.MethodNode m) Generates code that instantiates a newBuilder.Hook for subtypes to tweak builder, for example to
Builder.contextualize(com.cloudbees.groovy.cps.sandbox.CallSiteTag...)Builder b = new Builder(new MethodLocation(...)); b.withClosureType(...);
- Parameters:
m- Method being transformed.
-
getTrustTag
- See Also:
-
- "doc/sandbox.md"
-
visitNontransformedMethod
protected void visitNontransformedMethod(org.codehaus.groovy.ast.MethodNode m) For methods that are not CPS-transformed. -
visitNontransformedField
protected void visitNontransformedField(org.codehaus.groovy.ast.FieldNode f) -
visitNontransformedStatement
protected void visitNontransformedStatement(org.codehaus.groovy.ast.stmt.Statement s) -
visit
protected void visit(org.codehaus.groovy.ast.ASTNode e) -
visit
-
visitWithSafepoint
protected void visitWithSafepoint(org.codehaus.groovy.ast.stmt.Statement st) Likevisit(ASTNode)but also inserts the safepoint at the top. -
makeNode
Makes an AST fragment that callsBuilderwith specific method.- Parameters:
methodName- Method onBuilderto call.
-
makeNode
Makes an AST fragment that callsBuilderwith specific method.- Parameters:
methodName- Method onBuilderto call.
-
makeNode
protected void makeNode(org.codehaus.groovy.ast.ClassNode type, org.codehaus.groovy.ast.expr.Expression... args) Makes an AST fragment that instantiates a new instance of the given type. -
makeNode
Makes an AST fragment that instantiates a new instance of the given type. -
makeChildren
protected org.codehaus.groovy.ast.expr.TupleExpression makeChildren(org.codehaus.groovy.ast.expr.Expression... args) Shorthand forTupleExpression(Expression[]). -
makeChildren
Given closure, package them up into a tuple. -
loc
protected void loc(org.codehaus.groovy.ast.ASTNode e) -
literal
Used in the closure block ofmakeNode(String, Runnable)to create a literal string argument. -
literal
protected void literal(org.codehaus.groovy.ast.ClassNode c) -
literal
protected void literal(int n) -
literal
protected void literal(boolean b) -
visitMethodCallExpression
public void visitMethodCallExpression(org.codehaus.groovy.ast.expr.MethodCallExpression call) - Specified by:
visitMethodCallExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitBlockStatement
public void visitBlockStatement(org.codehaus.groovy.ast.stmt.BlockStatement b) - Specified by:
visitBlockStatementin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitForLoop
public void visitForLoop(org.codehaus.groovy.ast.stmt.ForStatement forLoop) - Specified by:
visitForLoopin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitWhileLoop
public void visitWhileLoop(org.codehaus.groovy.ast.stmt.WhileStatement loop) - Specified by:
visitWhileLoopin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitDoWhileLoop
public void visitDoWhileLoop(org.codehaus.groovy.ast.stmt.DoWhileStatement loop) - Specified by:
visitDoWhileLoopin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitIfElse
public void visitIfElse(org.codehaus.groovy.ast.stmt.IfStatement stmt) - Specified by:
visitIfElsein interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitExpressionStatement
public void visitExpressionStatement(org.codehaus.groovy.ast.stmt.ExpressionStatement statement) - Specified by:
visitExpressionStatementin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitReturnStatement
public void visitReturnStatement(org.codehaus.groovy.ast.stmt.ReturnStatement statement) - Specified by:
visitReturnStatementin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitAssertStatement
public void visitAssertStatement(org.codehaus.groovy.ast.stmt.AssertStatement statement) - Specified by:
visitAssertStatementin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitTryCatchFinally
public void visitTryCatchFinally(org.codehaus.groovy.ast.stmt.TryCatchStatement stmt) - Specified by:
visitTryCatchFinallyin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitSwitch
public void visitSwitch(org.codehaus.groovy.ast.stmt.SwitchStatement stmt) - Specified by:
visitSwitchin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitCaseStatement
public void visitCaseStatement(org.codehaus.groovy.ast.stmt.CaseStatement stmt) - Specified by:
visitCaseStatementin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitBreakStatement
public void visitBreakStatement(org.codehaus.groovy.ast.stmt.BreakStatement statement) - Specified by:
visitBreakStatementin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitContinueStatement
public void visitContinueStatement(org.codehaus.groovy.ast.stmt.ContinueStatement statement) - Specified by:
visitContinueStatementin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitThrowStatement
public void visitThrowStatement(org.codehaus.groovy.ast.stmt.ThrowStatement st) - Specified by:
visitThrowStatementin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitSynchronizedStatement
public void visitSynchronizedStatement(org.codehaus.groovy.ast.stmt.SynchronizedStatement statement) - Specified by:
visitSynchronizedStatementin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitCatchStatement
public void visitCatchStatement(org.codehaus.groovy.ast.stmt.CatchStatement stmt) - Specified by:
visitCatchStatementin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitStaticMethodCallExpression
public void visitStaticMethodCallExpression(org.codehaus.groovy.ast.expr.StaticMethodCallExpression exp) - Specified by:
visitStaticMethodCallExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitConstructorCallExpression
public void visitConstructorCallExpression(org.codehaus.groovy.ast.expr.ConstructorCallExpression call) - Specified by:
visitConstructorCallExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitTernaryExpression
public void visitTernaryExpression(org.codehaus.groovy.ast.expr.TernaryExpression exp) - Specified by:
visitTernaryExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitShortTernaryExpression
public void visitShortTernaryExpression(org.codehaus.groovy.ast.expr.ElvisOperatorExpression exp) - Specified by:
visitShortTernaryExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
getMultipleAssignmentValueOrCast
protected void getMultipleAssignmentValueOrCast(org.codehaus.groovy.ast.expr.VariableExpression varExp, org.codehaus.groovy.ast.expr.Expression rhs, org.codehaus.groovy.ast.expr.Expression index) -
visitBinaryExpression
public void visitBinaryExpression(org.codehaus.groovy.ast.expr.BinaryExpression exp) - Specified by:
visitBinaryExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor- See Also:
-
BinaryExpressionHelper.eval(BinaryExpression)
-
visitPrefixExpression
public void visitPrefixExpression(org.codehaus.groovy.ast.expr.PrefixExpression exp) - Specified by:
visitPrefixExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitPostfixExpression
public void visitPostfixExpression(org.codehaus.groovy.ast.expr.PostfixExpression exp) - Specified by:
visitPostfixExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
prepostfixOperatorSuffix
-
visitBooleanExpression
public void visitBooleanExpression(org.codehaus.groovy.ast.expr.BooleanExpression exp) - Specified by:
visitBooleanExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitClosureExpression
public void visitClosureExpression(org.codehaus.groovy.ast.expr.ClosureExpression exp) - Specified by:
visitClosureExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitTupleExpression
public void visitTupleExpression(org.codehaus.groovy.ast.expr.TupleExpression expression) - Specified by:
visitTupleExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitMapExpression
public void visitMapExpression(org.codehaus.groovy.ast.expr.MapExpression exp) - Specified by:
visitMapExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitMapEntryExpression
public void visitMapEntryExpression(org.codehaus.groovy.ast.expr.MapEntryExpression expression) - Specified by:
visitMapEntryExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitListExpression
public void visitListExpression(org.codehaus.groovy.ast.expr.ListExpression exp) - Specified by:
visitListExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitRangeExpression
public void visitRangeExpression(org.codehaus.groovy.ast.expr.RangeExpression exp) - Specified by:
visitRangeExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitPropertyExpression
public void visitPropertyExpression(org.codehaus.groovy.ast.expr.PropertyExpression exp) - Specified by:
visitPropertyExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitAttributeExpression
public void visitAttributeExpression(org.codehaus.groovy.ast.expr.AttributeExpression exp) - Specified by:
visitAttributeExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitFieldExpression
public void visitFieldExpression(org.codehaus.groovy.ast.expr.FieldExpression exp) - Specified by:
visitFieldExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitMethodPointerExpression
public void visitMethodPointerExpression(org.codehaus.groovy.ast.expr.MethodPointerExpression exp) - Specified by:
visitMethodPointerExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitConstantExpression
public void visitConstantExpression(org.codehaus.groovy.ast.expr.ConstantExpression expression) - Specified by:
visitConstantExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitClassExpression
public void visitClassExpression(org.codehaus.groovy.ast.expr.ClassExpression expression) - Specified by:
visitClassExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitVariableExpression
public void visitVariableExpression(org.codehaus.groovy.ast.expr.VariableExpression exp) - Specified by:
visitVariableExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitDeclarationExpression
public void visitDeclarationExpression(org.codehaus.groovy.ast.expr.DeclarationExpression exp) - Specified by:
visitDeclarationExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitAssignmentOrCast
protected void visitAssignmentOrCast(org.codehaus.groovy.ast.ClassNode type, org.codehaus.groovy.ast.expr.Expression rhs) -
visitGStringExpression
public void visitGStringExpression(org.codehaus.groovy.ast.expr.GStringExpression exp) - Specified by:
visitGStringExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitArrayExpression
public void visitArrayExpression(org.codehaus.groovy.ast.expr.ArrayExpression exp) - Specified by:
visitArrayExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitSpreadExpression
public void visitSpreadExpression(org.codehaus.groovy.ast.expr.SpreadExpression expression) - Specified by:
visitSpreadExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitSpreadMapExpression
public void visitSpreadMapExpression(org.codehaus.groovy.ast.expr.SpreadMapExpression expression) - Specified by:
visitSpreadMapExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitNotExpression
public void visitNotExpression(org.codehaus.groovy.ast.expr.NotExpression exp) - Specified by:
visitNotExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitUnaryMinusExpression
public void visitUnaryMinusExpression(org.codehaus.groovy.ast.expr.UnaryMinusExpression exp) - Specified by:
visitUnaryMinusExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitUnaryPlusExpression
public void visitUnaryPlusExpression(org.codehaus.groovy.ast.expr.UnaryPlusExpression exp) - Specified by:
visitUnaryPlusExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitBitwiseNegationExpression
public void visitBitwiseNegationExpression(org.codehaus.groovy.ast.expr.BitwiseNegationExpression exp) - Specified by:
visitBitwiseNegationExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitCastExpression
public void visitCastExpression(org.codehaus.groovy.ast.expr.CastExpression exp) - Specified by:
visitCastExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitArgumentlistExpression
public void visitArgumentlistExpression(org.codehaus.groovy.ast.expr.ArgumentListExpression expression) - Specified by:
visitArgumentlistExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitClosureListExpression
public void visitClosureListExpression(org.codehaus.groovy.ast.expr.ClosureListExpression closureListExpression) - Specified by:
visitClosureListExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-
visitBytecodeExpression
public void visitBytecodeExpression(org.codehaus.groovy.classgen.BytecodeExpression expression) - Specified by:
visitBytecodeExpressionin interfaceorg.codehaus.groovy.ast.GroovyCodeVisitor
-