Package org.codehaus.groovy.transform.sc
Class StaticCompilationVisitor
- java.lang.Object
-
- org.codehaus.groovy.ast.CodeVisitorSupport
-
- org.codehaus.groovy.ast.ClassCodeVisitorSupport
-
- org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor
-
- org.codehaus.groovy.transform.sc.StaticCompilationVisitor
-
- All Implemented Interfaces:
GroovyClassVisitor,GroovyCodeVisitor,ErrorCollecting
public class StaticCompilationVisitor extends StaticTypeCheckingVisitor
This visitor is responsible for amending the AST with static compilation metadata or transform the AST so that a class or a method can be statically compiled. It may also throw errors specific to static compilation which are not considered as an error at the type check pass. For example, usage of spread operator is not allowed in statically compiled portions of code, while it may be statically checked. Static compilation relies on static type checking, which explains why this visitor extends the type checker visitor.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor
StaticTypeCheckingVisitor.SignatureCodecFactory, StaticTypeCheckingVisitor.VariableExpressionTypeMemoizer
-
-
Field Summary
Fields Modifier and Type Field Description static MethodNodeARRAYLIST_ADD_METHODstatic ClassNodeARRAYLIST_CLASSNODEstatic MethodNodeARRAYLIST_CONSTRUCTORstatic ClassNodeCOMPILESTATIC_CLASSNODEstatic ClassNodeTYPECHECKED_CLASSNODE-
Fields inherited from class org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor
CLOSURE_CALL_NO_ARG, CLOSURE_CALL_ONE_ARG, CLOSURE_CALL_VARGS, CLOSUREPARAMS_CLASSNODE, CURRENT_SIGNATURE_PROTOCOL, CURRENT_SIGNATURE_PROTOCOL_VERSION, currentField, currentProperty, DELEGATES_TO, DELEGATES_TO_TARGET, DGM_CLASSNODE, EMPTY_METHODNODE_LIST, ENUMERATION_TYPE, ERROR_COLLECTOR, extension, GENERATED_EMPTY_STATEMENT, GET_DELEGATE, GET_OWNER, GET_THISOBJECT, ITERABLE_TYPE, LINKEDHASHMAP_CLASSNODE, MAP_ENTRY_TYPE, NAMED_PARAMS_CLASSNODE, returnAdder, returnListener, TYPECHECKING_ANNOTATIONS, TYPECHECKING_INFO_NODE, typeCheckingContext
-
-
Constructor Summary
Constructors Constructor Description StaticCompilationVisitor(SourceUnit unit, ClassNode node)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected booleanexistsProperty(PropertyExpression pexp, boolean checkForReadOnly, ClassCodeVisitorSupport visitor)Checks whether a property exists on the receiver, or on any of the possible receiver classes (found in the temporary type information table)protected MethodNodefindMethodOrFail(Expression expr, ClassNode receiver, String name, ClassNode... args)protected ClassNode[]getTypeCheckingAnnotations()Returns array of type checking annotations.static booleanisStaticallyCompiled(AnnotatedNode node)voidvisitClass(ClassNode node)Visit a ClassNode.voidvisitConstructorCallExpression(ConstructorCallExpression call)voidvisitForLoop(ForStatement statement)voidvisitMethod(MethodNode node)Visit a MethodNode.voidvisitMethodCallExpression(MethodCallExpression call)voidvisitPropertyExpression(PropertyExpression expression)voidvisitSpreadExpression(SpreadExpression expression)-
Methods inherited from class org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor
addAmbiguousErrorMessage, addAssignmentError, addCategoryMethodCallError, addClosureReturnType, addError, addNoMatchingMethodError, addReceivers, addStaticTypeError, addTypeCheckingExtension, addTypeCheckingInfoAnnotation, addUnsupportedPreOrPostfixExpressionError, afterSwitchConditionExpressionVisited, areCategoryMethodCalls, checkCast, checkClosureParameters, checkForbiddenSpreadArgument, checkGroovyConstructorMap, checkGroovyStyleConstructor, checkGroovyStyleConstructor, checkReturnType, collectAllInterfaceMethodsByName, existsProperty, extractPropertyNameFromMethodName, extractTemporaryTypeInfoKey, extractTypesFromParameters, findCurrentInstanceOfClass, findInstanceOfNotReturnExpression, findMethod, findMethodsWithGenerated, findNotInstanceOfReturnExpression, formatArgumentList, getArgumentTypes, getDelegationMetadata, getGroupOperationResultType, getInferredReturnType, getInferredReturnTypeFromWithClosureArgument, getOriginalDeclarationType, getResultType, getSourceUnit, getTemporaryTypesForExpression, getType, getTypeCheckingContext, hasRHSIncompleteGenericTypeInfo, inferClosureParameterTypes, inferComponentType, inferDiamondType, inferListExpressionType, inferLoopElementType, inferMapExpressionType, inferReturnTypeGenerics, inferReturnTypeGenerics, initialize, isClassInnerClassOrEqualTo, isClosureCall, isNullConstant, isSecondPassNeededForControlStructure, isSkipMode, isSkippedInnerClass, isSuperExpression, isThisExpression, makeOwnerList, performSecondPass, popAssignmentTracking, prettyPrintMethodList, pushAssignmentTracking, pushInstanceOfTypeInfo, restoreVariableExpressionMetadata, saveVariableExpressionMetadata, setCompilationUnit, setMethodsToBeVisited, shouldSkipClassNode, shouldSkipMethodNode, silentlyVisitMethodNode, startMethodInference, storeInferredReturnType, storeInferredTypeForPropertyExpression, storeTargetMethod, storeType, typeCheckAssignment, typeCheckClosureCall, typeCheckMapConstructor, typeCheckMethodsWithGenericsOrFail, visitArrayExpression, visitAttributeExpression, visitBinaryExpression, visitBitwiseNegationExpression, visitBlockStatement, visitCaseStatement, visitCastExpression, visitClassExpression, visitClosingBlock, visitClosureExpression, visitConstructor, visitConstructorOrMethod, visitExpressionStatement, visitField, visitIfElse, visitInstanceofNot, visitMethodCallArguments, visitMethodPointerExpression, visitNotExpression, visitPostfixExpression, visitPrefixExpression, visitProperty, visitRangeExpression, visitReturnStatement, visitStaticMethodCallExpression, visitSwitch, visitTernaryExpression, visitTryCatchFinally, visitUnaryMinusExpression, visitUnaryPlusExpression, visitVariableExpression, visitWhileLoop, wrapTypeIfNecessary
-
Methods inherited from class org.codehaus.groovy.ast.ClassCodeVisitorSupport
visitAnnotation, visitAnnotations, visitAssertStatement, visitBreakStatement, visitCatchStatement, visitClassCodeContainer, visitContinueStatement, visitDeclarationExpression, visitDoWhileLoop, visitImports, visitObjectInitializerStatements, visitPackage, visitStatement, visitSynchronizedStatement, visitThrowStatement
-
Methods inherited from class org.codehaus.groovy.ast.CodeVisitorSupport
visitArgumentlistExpression, visitBooleanExpression, visitBytecodeExpression, visitClosureListExpression, visitConstantExpression, visitEmptyStatement, visitFieldExpression, visitGStringExpression, visitLambdaExpression, visitListExpression, visitMapEntryExpression, visitMapExpression, visitMethodReferenceExpression, visitShortTernaryExpression, visitSpreadMapExpression, visitTupleExpression
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.codehaus.groovy.ast.GroovyCodeVisitor
visitEmptyExpression, visitListOfExpressions
-
-
-
-
Field Detail
-
TYPECHECKED_CLASSNODE
public static final ClassNode TYPECHECKED_CLASSNODE
-
COMPILESTATIC_CLASSNODE
public static final ClassNode COMPILESTATIC_CLASSNODE
-
ARRAYLIST_CLASSNODE
public static final ClassNode ARRAYLIST_CLASSNODE
-
ARRAYLIST_ADD_METHOD
public static final MethodNode ARRAYLIST_ADD_METHOD
-
ARRAYLIST_CONSTRUCTOR
public static final MethodNode ARRAYLIST_CONSTRUCTOR
-
-
Constructor Detail
-
StaticCompilationVisitor
public StaticCompilationVisitor(SourceUnit unit, ClassNode node)
-
-
Method Detail
-
getTypeCheckingAnnotations
protected ClassNode[] getTypeCheckingAnnotations()
Description copied from class:StaticTypeCheckingVisitorReturns array of type checking annotations. Subclasses may override this method in order to provide additional types which must be looked up when checking if a method or a class node should be skipped.The default implementation returns
TypeChecked.- Overrides:
getTypeCheckingAnnotationsin classStaticTypeCheckingVisitor
-
isStaticallyCompiled
public static boolean isStaticallyCompiled(AnnotatedNode node)
-
visitClass
public void visitClass(ClassNode node)
Description copied from interface:GroovyClassVisitorVisit a ClassNode.- Specified by:
visitClassin interfaceGroovyClassVisitor- Overrides:
visitClassin classStaticTypeCheckingVisitor
-
visitMethod
public void visitMethod(MethodNode node)
Description copied from interface:GroovyClassVisitorVisit a MethodNode.- Specified by:
visitMethodin interfaceGroovyClassVisitor- Overrides:
visitMethodin classStaticTypeCheckingVisitor
-
visitMethodCallExpression
public void visitMethodCallExpression(MethodCallExpression call)
- Specified by:
visitMethodCallExpressionin interfaceGroovyCodeVisitor- Overrides:
visitMethodCallExpressionin classStaticTypeCheckingVisitor
-
visitConstructorCallExpression
public void visitConstructorCallExpression(ConstructorCallExpression call)
- Specified by:
visitConstructorCallExpressionin interfaceGroovyCodeVisitor- Overrides:
visitConstructorCallExpressionin classStaticTypeCheckingVisitor
-
visitForLoop
public void visitForLoop(ForStatement statement)
- Specified by:
visitForLoopin interfaceGroovyCodeVisitor- Overrides:
visitForLoopin classStaticTypeCheckingVisitor
-
findMethodOrFail
protected MethodNode findMethodOrFail(Expression expr, ClassNode receiver, String name, ClassNode... args)
- Overrides:
findMethodOrFailin classStaticTypeCheckingVisitor
-
existsProperty
protected boolean existsProperty(PropertyExpression pexp, boolean checkForReadOnly, ClassCodeVisitorSupport visitor)
Description copied from class:StaticTypeCheckingVisitorChecks whether a property exists on the receiver, or on any of the possible receiver classes (found in the temporary type information table)- Overrides:
existsPropertyin classStaticTypeCheckingVisitor- Parameters:
pexp- a property expressioncheckForReadOnly- if true, look for property read, else for property setvisitor- if not null, when the property node is found, visit it with the provided visitor- Returns:
- true if the property is defined in any of the possible receiver classes
-
visitPropertyExpression
public void visitPropertyExpression(PropertyExpression expression)
- Specified by:
visitPropertyExpressionin interfaceGroovyCodeVisitor- Overrides:
visitPropertyExpressionin classStaticTypeCheckingVisitor
-
visitSpreadExpression
public void visitSpreadExpression(SpreadExpression expression)
- Specified by:
visitSpreadExpressionin interfaceGroovyCodeVisitor- Overrides:
visitSpreadExpressionin classCodeVisitorSupport
-
-