Class AnnotationClosureVisitor
java.lang.Object
org.codehaus.groovy.ast.CodeVisitorSupport
org.codehaus.groovy.ast.ClassCodeVisitorSupport
org.apache.groovy.contracts.ast.visitor.BaseVisitor
org.apache.groovy.contracts.ast.visitor.AnnotationClosureVisitor
- All Implemented Interfaces:
ASTNodeMetaData,GroovyClassVisitor,GroovyCodeVisitor,ErrorCollecting
Visits interfaces & classes and looks for @Requires or @Ensures and creates
Closure
classes for the annotation closures.
The annotation closure classes are used later on to check interface contract pre- and post-conditions in implementation classes.
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringMetadata key used to stash the original try/catch wrapped assertion block for later phases.static final StringMetadata flag indicating that the rewritten closure performs method calls and therefore needs execution tracking instead of inline expansion.static final StringNode metadata key for the set of field names referenced viaold.xxxin postconditions.Fields inherited from class org.apache.groovy.contracts.ast.visitor.BaseVisitor
GCONTRACTS_ENABLED_VAR, sourceUnitFields inherited from interface org.apache.groovy.contracts.ast.visitor.ASTNodeMetaData
CLOSURE_REPLACED, PROCESSED -
Constructor Summary
ConstructorsConstructorDescriptionAnnotationClosureVisitor(SourceUnit sourceUnit, ReaderSource source) Creates a visitor that rewrites contract annotation closures into generated closure classes. -
Method Summary
Modifier and TypeMethodDescriptionvoidvisitClass(ClassNode classNode) Rewrites class-level contract closures and then recurses into inherited types that may also contribute contract annotations.voidvisitConstructorOrMethod(MethodNode methodNode, boolean isConstructor) Rewrites method- and constructor-level contract closures into generated closure classes and records auxiliary metadata needed by later transformation phases.Methods inherited from class org.apache.groovy.contracts.ast.visitor.BaseVisitor
asConditionExecution, getOriginalCondition, getReplacedCondition, getSourceUnit, replaceConditionMethods inherited from class org.codehaus.groovy.ast.ClassCodeVisitorSupport
addError, visitAnnotation, visitAnnotations, visitAnnotations, visitAssertStatement, visitBlockStatement, visitBreakStatement, visitCaseStatement, visitCatchStatement, visitClassCodeContainer, visitClosureExpression, visitConstructor, visitContinueStatement, visitDeclarationExpression, visitDoWhileLoop, visitExpressionStatement, visitField, visitForLoop, visitIfElse, visitImports, visitMethod, visitObjectInitializerStatements, visitPackage, visitProperty, visitReturnStatement, visitStatement, visitStatementAnnotations, visitSwitch, visitSynchronizedStatement, visitThrowStatement, visitTryCatchFinally, visitWhileLoopMethods inherited from class org.codehaus.groovy.ast.CodeVisitorSupport
afterSwitchCaseStatementsVisited, afterSwitchConditionExpressionVisited, visitArgumentlistExpression, visitArrayExpression, visitAttributeExpression, visitBinaryExpression, visitBitwiseNegationExpression, visitBooleanExpression, visitBytecodeExpression, visitCastExpression, visitClassExpression, visitClosureListExpression, visitConstantExpression, visitConstructorCallExpression, visitEmptyStatement, visitFieldExpression, visitGStringExpression, visitLambdaExpression, visitListExpression, visitMapEntryExpression, visitMapExpression, visitMethodCallExpression, visitMethodPointerExpression, visitMethodReferenceExpression, visitNotExpression, visitPostfixExpression, visitPrefixExpression, visitPropertyExpression, visitRangeExpression, visitShortTernaryExpression, visitSpreadExpression, visitSpreadMapExpression, visitStaticMethodCallExpression, visitTernaryExpression, visitTupleExpression, visitUnaryMinusExpression, visitUnaryPlusExpression, visitVariableExpressionMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.codehaus.groovy.ast.GroovyCodeVisitor
visit, visit, visitEmptyExpression, visitListOfExpressions
-
Field Details
-
META_DATA_USE_EXECUTION_TRACKER
Metadata flag indicating that the rewritten closure performs method calls and therefore needs execution tracking instead of inline expansion.- See Also:
-
META_DATA_ORIGINAL_TRY_CATCH_BLOCK
Metadata key used to stash the original try/catch wrapped assertion block for later phases.- See Also:
-
OLD_REFERENCES_KEY
Node metadata key for the set of field names referenced viaold.xxxin postconditions.- See Also:
-
-
Constructor Details
-
AnnotationClosureVisitor
Creates a visitor that rewrites contract annotation closures into generated closure classes.- Parameters:
sourceUnit- the source unit currently being transformedsource- the reader source backing the source unit
-
-
Method Details
-
visitClass
Rewrites class-level contract closures and then recurses into inherited types that may also contribute contract annotations.- Specified by:
visitClassin interfaceGroovyClassVisitor- Overrides:
visitClassin classClassCodeVisitorSupport- Parameters:
classNode- the class currently being visited
-
visitConstructorOrMethod
Rewrites method- and constructor-level contract closures into generated closure classes and records auxiliary metadata needed by later transformation phases.- Overrides:
visitConstructorOrMethodin classClassCodeVisitorSupport- Parameters:
methodNode- the method or constructor being visitedisConstructor- whether the visited executable is a constructor
-