Package com.cloudbees.groovy.cps
Class SandboxCpsTransformer
java.lang.Object
org.codehaus.groovy.control.CompilationUnit.PrimaryClassNodeOperation
org.codehaus.groovy.control.customizers.CompilationCustomizer
com.cloudbees.groovy.cps.CpsTransformer
com.cloudbees.groovy.cps.SandboxCpsTransformer
- All Implemented Interfaces:
org.codehaus.groovy.ast.GroovyCodeVisitor
CpsTransformer + SandboxTransformer- Author:
- Kohsuke Kawaguchi
-
Nested Class Summary
Nested classes/interfaces inherited from class com.cloudbees.groovy.cps.CpsTransformer
CpsTransformer.ParentClosure -
Field Summary
Fields inherited from class com.cloudbees.groovy.cps.CpsTransformer
classNode, config, iota, parent -
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 Classprotected 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.voidvisitMethod(org.codehaus.groovy.ast.MethodNode m) Overriding to allow for rejectingfinalizemethods when sandboxed.protected voidvisitNontransformedField(org.codehaus.groovy.ast.FieldNode f) Field initializers are never transformed, but we still need to run the sandbox transformer on them.protected voidvisitNontransformedMethod(org.codehaus.groovy.ast.MethodNode m) If the method is not CPS transformed, we need to sandbox-transform that method to intercept calls that happen in these methods.protected voidvisitNontransformedStatement(org.codehaus.groovy.ast.stmt.Statement s) Miscellaneous statements like object initializers are never transformed, but we still need to run the sandbox transformer on them.Methods inherited from class com.cloudbees.groovy.cps.CpsTransformer
getMultipleAssignmentValueOrCast, literal, literal, literal, literal, loc, makeBuilder, makeChildren, makeChildren, makeNode, makeNode, makeNode, makeNode, prepostfixOperatorSuffix, setConfiguration, shouldBeTransformed, visit, visit, visitArgumentlistExpression, visitArrayExpression, visitAssertStatement, visitAssignmentOrCast, visitAttributeExpression, visitBinaryExpression, visitBitwiseNegationExpression, visitBlockStatement, visitBooleanExpression, visitBreakStatement, visitBytecodeExpression, visitCaseStatement, visitCastExpression, visitCatchStatement, visitClassExpression, visitClosureExpression, visitClosureListExpression, visitConstantExpression, visitConstructorCallExpression, visitContinueStatement, visitDeclarationExpression, visitDoWhileLoop, visitExpressionStatement, visitFieldExpression, visitForLoop, visitGStringExpression, visitIfElse, visitListExpression, visitMapEntryExpression, visitMapExpression, visitMethodCallExpression, visitMethodPointerExpression, visitNotExpression, visitPostfixExpression, visitPrefixExpression, visitPropertyExpression, visitRangeExpression, visitReturnStatement, visitShortTernaryExpression, visitSpreadExpression, visitSpreadMapExpression, visitStaticMethodCallExpression, visitSwitch, visitSynchronizedStatement, visitTernaryExpression, visitThrowStatement, visitTryCatchFinally, visitTupleExpression, visitUnaryMinusExpression, visitUnaryPlusExpression, visitVariableExpression, visitWhileLoop, visitWithSafepointMethods inherited from class org.codehaus.groovy.control.customizers.CompilationCustomizer
getPhaseMethods inherited from class org.codehaus.groovy.control.CompilationUnit.PrimaryClassNodeOperation
needSortedInput
-
Constructor Details
-
SandboxCpsTransformer
public SandboxCpsTransformer()
-
-
Method Details
-
call
public void call(org.codehaus.groovy.control.SourceUnit source, org.codehaus.groovy.classgen.GeneratorContext context, org.codehaus.groovy.ast.ClassNode classNode) - Overrides:
callin classCpsTransformer
-
processConstructors
protected void processConstructors(org.codehaus.groovy.ast.ClassNode classNode) Description copied from class:CpsTransformerConstructors 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.- Overrides:
processConstructorsin classCpsTransformer
-
visitNontransformedMethod
protected void visitNontransformedMethod(org.codehaus.groovy.ast.MethodNode m) If the method is not CPS transformed, we need to sandbox-transform that method to intercept calls that happen in these methods. This includes all constructor bodies.- Overrides:
visitNontransformedMethodin classCpsTransformer- See Also:
-
SandboxTransformer.call(org.codehaus.groovy.control.SourceUnit, org.codehaus.groovy.classgen.GeneratorContext, org.codehaus.groovy.ast.ClassNode)
-
visitNontransformedField
protected void visitNontransformedField(org.codehaus.groovy.ast.FieldNode f) Field initializers are never transformed, but we still need to run the sandbox transformer on them.- Overrides:
visitNontransformedFieldin classCpsTransformer- See Also:
-
SandboxTransformer.call(org.codehaus.groovy.control.SourceUnit, org.codehaus.groovy.classgen.GeneratorContext, org.codehaus.groovy.ast.ClassNode)
-
visitNontransformedStatement
protected void visitNontransformedStatement(org.codehaus.groovy.ast.stmt.Statement s) Miscellaneous statements like object initializers are never transformed, but we still need to run the sandbox transformer on them.- Overrides:
visitNontransformedStatementin classCpsTransformer- See Also:
-
SandboxTransformer.call(org.codehaus.groovy.control.SourceUnit, org.codehaus.groovy.classgen.GeneratorContext, org.codehaus.groovy.ast.ClassNode)
-
visitMethod
public void visitMethod(org.codehaus.groovy.ast.MethodNode m) Overriding to allow for rejectingfinalizemethods when sandboxed.- Overrides:
visitMethodin classCpsTransformer
-
getTrustTag
Description copied from class:CpsTransformer- Overrides:
getTrustTagin classCpsTransformer- See Also:
-
- "doc/sandbox.md"
-