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

public Class StaticCompilationVisitor

extends StaticTypeCheckingVisitor
Class Inheritance
Imports
groovy.lang.Reference, groovy.transform.CompileStatic, .TypeChecked, org.codehaus.groovy.ast.ASTNode, .AnnotatedNode, .ClassCodeVisitorSupport, .ClassHelper, .ClassNode, .ConstructorNode, .FieldNode, .GenericsType, .InnerClassNode, .MethodNode, .Parameter, .PropertyNode, org.codehaus.groovy.ast.expr.ArgumentListExpression, .BinaryExpression, .ClosureListExpression, .ConstructorCallExpression, .Expression, .MethodCallExpression, .PropertyExpression, .SpreadExpression, org.codehaus.groovy.ast.stmt.EmptyStatement, .ExpressionStatement, .ForStatement, .Statement, org.codehaus.groovy.classgen.asm.InvocationWriter, .MopWriter, .TypeChooser, .WriterControllerFactory, org.codehaus.groovy.classgen.asm.sc.StaticCompilationMopWriter, .StaticTypesTypeChooser, org.codehaus.groovy.control.CompilationUnit.IPrimaryClassNodeOperation, .SourceUnit, org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport, .StaticTypeCheckingVisitor, java.util.ArrayList, .Collections, .HashMap, .HashSet, .Iterator, .List, .Map, .Optional, .Set

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.

Field Summary

Modifier and TypeField and Description
public static final MethodNode
public static final ClassNode
public static final MethodNode
private ClassNode
public static final ClassNode
public static final ClassNode
private final TypeChooser
Inherited from org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor:
CLOSURE_CALL_NO_ARGCLOSURE_CALL_ONE_ARGCLOSURE_CALL_VARGSCLOSUREPARAMS_CLASSNODECURRENT_SIGNATURE_PROTOCOLCURRENT_SIGNATURE_PROTOCOL_VERSIONcurrentFieldcurrentPropertyDELEGATES_TODELEGATES_TO_TARGETDGM_CLASSNODEEMPTY_METHODNODE_LISTENUMERATION_TYPEERROR_COLLECTORextensionGENERATED_EMPTY_STATEMENTGET_DELEGATEGET_OWNERGET_THISOBJECTITERABLE_TYPELINKEDHASHMAP_CLASSNODEMAP_ENTRY_TYPENAMED_PARAM_CLASSNODENAMED_PARAMS_CLASSNODEreturnAdderreturnListenerTYPECHECKING_ANNOTATIONSTYPECHECKING_INFO_NODEtypeCheckingContext

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
private void
private static void
addPrivateBridgeMethods(final ClassNode
an inner/outer class node for which to generate bridge methods
node
)

Adds "bridge" methods for private methods of an inner/outer class so that the outer class is capable of calling them.

private void
private static void
addPrivateFieldsAccessors(final ClassNode node)

Adds special accessors and mutators for private fields so that inner classes can get/set them.

private boolean
protected boolean
existsProperty(final PropertyExpression
a property expression
pexp
,
final boolean
if true, look for property read, else for property set
checkForReadOnly
,
final ClassCodeVisitorSupport
if not null, when the property node is found, visit it with the provided visitor
visitor
)

Overrides org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.existsProperty.

Checks whether a property exists on the receiver, or on any of the possible receiver classes (found in the temporary type information table)
protected MethodNode
protected ClassNode[]
public static boolean
private static void
private static List<String>
public void
public void
public void
private void
public void
public void
public void
public void
public void
Inherited from org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor:
addAmbiguousErrorMessageaddAssignmentErroraddCategoryMethodCallErroraddClosureReturnTypeaddErroraddNoMatchingMethodErroraddReceiversaddStaticTypeErroraddTypeCheckingExtensionaddTypeCheckingInfoAnnotationaddUnsupportedPreOrPostfixExpressionErrorafterSwitchConditionExpressionVisitedareCategoryMethodCallscheckCastcheckClosureParameterscheckForbiddenSpreadArgumentcheckGroovyConstructorMapcheckGroovyStyleConstructorcheckGroovyStyleConstructorcheckReturnTypecollectAllInterfaceMethodsByNameexistsPropertyextractPropertyNameFromMethodNameextractTemporaryTypeInfoKeyextractTypesFromParametersfindCurrentInstanceOfClassfindInstanceOfNotReturnExpressionfindMethodfindMethodsWithGeneratedfindNotInstanceOfReturnExpressionformatArgumentListgetArgumentTypesgetDelegationMetadatagetGroupOperationResultTypegetInferredReturnTypegetInferredReturnTypeFromWithClosureArgumentgetOriginalDeclarationTypegetResultTypegetSourceUnitgetTemporaryTypesForExpressiongetTypegetTypeCheckingContexthasRHSIncompleteGenericTypeInfoinferClosureParameterTypesinferComponentTypeinferDiamondTypeinferListExpressionTypeinferLoopElementTypeinferMapExpressionTypeinferReturnTypeGenericsinferReturnTypeGenericsinitializeisClassInnerClassOrEqualToisClosureCallisNullConstantisSecondPassNeededForControlStructureisSkipModeisSkippedInnerClassisSuperExpressionisThisExpressionmakeOwnerListperformSecondPasspopAssignmentTrackingprettyPrintMethodListpushAssignmentTrackingpushInstanceOfTypeInforestoreVariableExpressionMetadatasaveVariableExpressionMetadatasetCompilationUnitsetMethodsToBeVisitedshouldSkipClassNodeshouldSkipMethodNodesilentlyVisitMethodNodestartMethodInferencestoreInferredReturnTypestoreInferredTypeForPropertyExpressionstoreTargetMethodstoreTypetypeCheckAssignmenttypeCheckClosureCalltypeCheckMapConstructortypeCheckMethodsWithGenericsOrFailvisitArrayExpressionvisitAttributeExpressionvisitBinaryExpressionvisitBitwiseNegationExpressionvisitBlockStatementvisitCaseStatementvisitCastExpressionvisitClassExpressionvisitClosingBlockvisitClosureExpressionvisitConstructorOrMethodvisitExpressionStatementvisitFieldvisitIfElsevisitInstanceofNotvisitMethodCallArgumentsvisitMethodPointerExpressionvisitNotExpressionvisitObjectInitializerStatementsvisitPostfixExpressionvisitPrefixExpressionvisitPropertyvisitRangeExpressionvisitReturnStatementvisitStaticMethodCallExpressionvisitSwitchvisitTernaryExpressionvisitTryCatchFinallyvisitUnaryMinusExpressionvisitUnaryPlusExpressionvisitVariableExpressionvisitWhileLoopwrapTypeIfNecessary

Field Detail

ARRAYLIST_ADD_METHODback to summary
public static final MethodNode ARRAYLIST_ADD_METHOD
ARRAYLIST_CLASSNODEback to summary
public static final ClassNode ARRAYLIST_CLASSNODE
ARRAYLIST_CONSTRUCTORback to summary
public static final MethodNode ARRAYLIST_CONSTRUCTOR
classNodeback to summary
private ClassNode classNode
COMPILESTATIC_CLASSNODEback to summary
public static final ClassNode COMPILESTATIC_CLASSNODE
TYPECHECKED_CLASSNODEback to summary
public static final ClassNode TYPECHECKED_CLASSNODE

Hides org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.TYPECHECKED_CLASSNODE.

typeChooserback to summary
private final TypeChooser typeChooser

Constructor Detail

StaticCompilationVisitorback to summary
public StaticCompilationVisitor(final SourceUnit unit, final ClassNode node)

Method Detail

addDynamicOuterClassAccessorsCallbackback to summary
private void addDynamicOuterClassAccessorsCallback(final ClassNode outer)
addPrivateBridgeMethodsback to summary
private static void addPrivateBridgeMethods(final ClassNode node)

Adds "bridge" methods for private methods of an inner/outer class so that the outer class is capable of calling them. It does basically the same job as access$000 like methods in Java.

Parameters
node:ClassNode

an inner/outer class node for which to generate bridge methods

addPrivateFieldAndMethodAccessorsback to summary
private void addPrivateFieldAndMethodAccessors(final ClassNode node)
addPrivateFieldsAccessorsback to summary
private static void addPrivateFieldsAccessors(final ClassNode node)

Adds special accessors and mutators for private fields so that inner classes can get/set them.

anyMethodSkipback to summary
private boolean anyMethodSkip(final ClassNode node)
existsPropertyback to summary
protected boolean existsProperty(final PropertyExpression pexp, final boolean checkForReadOnly, final ClassCodeVisitorSupport visitor)

Overrides org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.existsProperty.

Doc from org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.existsProperty.

Checks whether a property exists on the receiver, or on any of the possible receiver classes (found in the temporary type information table)

Parameters
pexp:PropertyExpression

a property expression

checkForReadOnly:boolean

if true, look for property read, else for property set

visitor:ClassCodeVisitorSupport

if not null, when the property node is found, visit it with the provided visitor

Returns:boolean

true if the property is defined in any of the possible receiver classes

Annotations
@Override
findMethodOrFailback to summary
protected MethodNode findMethodOrFail(final Expression expr, final ClassNode receiver, final String name, final ClassNode... args)

Overrides org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.findMethodOrFail.

Annotations
@Override
getTypeCheckingAnnotationsback to summary
protected ClassNode[] getTypeCheckingAnnotations()

Overrides org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.getTypeCheckingAnnotations.

Doc from org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.getTypeCheckingAnnotations.

Returns 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.

Annotations
@Override
isStaticallyCompiledback to summary
public static boolean isStaticallyCompiled(final AnnotatedNode node)
memorizeInitialExpressionsback to summary
private static void memorizeInitialExpressions(final MethodNode node)
methodSpecificGenericsback to summary
private static List<String> methodSpecificGenerics(final MethodNode method)
visitClassback to summary
public void visitClass(final ClassNode node)

Overrides org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitClass.

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

Doc from org.codehaus.groovy.ast.GroovyClassVisitor.visitClass.

Visit a ClassNode.

Annotations
@Override
visitConstructorback to summary
public void visitConstructor(final ConstructorNode node)

Overrides org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitConstructor.

Implements org.codehaus.groovy.ast.GroovyClassVisitor.visitConstructor.

Doc from org.codehaus.groovy.ast.GroovyClassVisitor.visitConstructor.

Visit a ConstructorNode.

Annotations
@Override
visitConstructorCallExpressionback to summary
public void visitConstructorCallExpression(final ConstructorCallExpression call)

Overrides org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitConstructorCallExpression.

Implements org.codehaus.groovy.ast.GroovyCodeVisitor.visitConstructorCallExpression.

Annotations
@Override
visitConstructorOrMethodback to summary
private void visitConstructorOrMethod(final MethodNode node)
visitForLoopback to summary
public void visitForLoop(final ForStatement statement)

Overrides org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitForLoop.

Implements org.codehaus.groovy.ast.GroovyCodeVisitor.visitForLoop.

Annotations
@Override
visitMethodback to summary
public void visitMethod(final MethodNode node)

Overrides org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethod.

Implements org.codehaus.groovy.ast.GroovyClassVisitor.visitMethod.

Doc from org.codehaus.groovy.ast.GroovyClassVisitor.visitMethod.

Visit a MethodNode.

Annotations
@Override
visitMethodCallExpressionback to summary
public void visitMethodCallExpression(final MethodCallExpression call)

Overrides org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethodCallExpression.

Implements org.codehaus.groovy.ast.GroovyCodeVisitor.visitMethodCallExpression.

Annotations
@Override
visitPropertyExpressionback to summary
public void visitPropertyExpression(final PropertyExpression expression)

Overrides org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitPropertyExpression.

Implements org.codehaus.groovy.ast.GroovyCodeVisitor.visitPropertyExpression.

Annotations
@Override
visitSpreadExpressionback to summary
public void visitSpreadExpression(final SpreadExpression expression)

Overrides org.codehaus.groovy.ast.CodeVisitorSupport.visitSpreadExpression.

Implements org.codehaus.groovy.ast.GroovyCodeVisitor.visitSpreadExpression.

Annotations
@Override