Class AbstractTypeCheckingExtension
- java.lang.Object
-
- org.codehaus.groovy.transform.stc.TypeCheckingExtension
-
- org.codehaus.groovy.transform.stc.AbstractTypeCheckingExtension
-
- Direct Known Subclasses:
GroovyTypeCheckingExtensionSupport,TraitTypeCheckingExtension
public class AbstractTypeCheckingExtension extends TypeCheckingExtension
Custom type checking extensions may extend this method in order to benefit from a lot of support methods.
The methods found in this class are made directly available in type checking scripts through the
GroovyTypeCheckingExtensionSupportclass.- Since:
- 2.3.0
-
-
Field Summary
Fields Modifier and Type Field Description protected TypeCheckingContextcontextprotected booleandebugprotected booleanhandled-
Fields inherited from class org.codehaus.groovy.transform.stc.TypeCheckingExtension
typeCheckingVisitor
-
-
Constructor Summary
Constructors Constructor Description AbstractTypeCheckingExtension(StaticTypeCheckingVisitor typeCheckingVisitor)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanargTypeMatches(ClassNode[] argTypes, int index, java.lang.Class clazz)booleanargTypeMatches(MethodCall call, int index, java.lang.Class clazz)booleanargTypesMatches(ClassNode[] argTypes, java.lang.Class... classes)booleanargTypesMatches(MethodCall call, java.lang.Class... classes)voiddelegatesTo(ClassNode type)voiddelegatesTo(ClassNode type, int strategy)voiddelegatesTo(ClassNode type, int strategy, org.codehaus.groovy.transform.stc.DelegationMetadata parent)booleanfirstArgTypesMatches(ClassNode[] argTypes, java.lang.Class... classes)booleanfirstArgTypesMatches(MethodCall call, java.lang.Class... classes)ArgumentListExpressiongetArguments(MethodCall call)org.codehaus.groovy.transform.stc.AbstractTypeCheckingExtension.TypeCheckingScopegetCurrentScope()BinaryExpressiongetEnclosingBinaryExpression()java.util.List<BinaryExpression>getEnclosingBinaryExpressionStack()ClassNodegetEnclosingClassNode()java.util.List<ClassNode>getEnclosingClassNodes()TypeCheckingContext.EnclosingClosuregetEnclosingClosure()java.util.List<TypeCheckingContext.EnclosingClosure>getEnclosingClosureStack()MethodNodegetEnclosingMethod()ExpressiongetEnclosingMethodCall()java.util.List<Expression>getEnclosingMethodCalls()java.util.List<MethodNode>getEnclosingMethods()java.util.Set<MethodNode>getGeneratedMethods()booleanisAnnotatedBy(ASTNode node, java.lang.Class annotation)booleanisAnnotatedBy(ASTNode node, ClassNode annotation)booleanisDynamic(VariableExpression var)booleanisExtensionMethod(MethodNode node)booleanisGenerated(MethodNode node)booleanisMethodCall(java.lang.Object o)voidlog(java.lang.String message)MethodNodemakeDynamic(MethodCall call)Used to instruct the type checker that the call is a dynamic method call.MethodNodemakeDynamic(MethodCall call, ClassNode returnType)Used to instruct the type checker that the call is a dynamic method call.voidmakeDynamic(PropertyExpression pexp)Instructs the type checker that a property access is dynamic, returning an instance of an Object.voidmakeDynamic(PropertyExpression pexp, ClassNode returnType)Instructs the type checker that a property access is dynamic.voidmakeDynamic(VariableExpression vexp)Instructs the type checker that an unresolved variable is a dynamic variable of type Object.voidmakeDynamic(VariableExpression vexp, ClassNode returnType)Instructs the type checker that an unresolved variable is a dynamic variable.MethodNodenewMethod(java.lang.String name, java.lang.Class returnType)MethodNodenewMethod(java.lang.String name, java.util.concurrent.Callable<ClassNode> returnType)MethodNodenewMethod(java.lang.String name, ClassNode returnType)org.codehaus.groovy.transform.stc.AbstractTypeCheckingExtension.TypeCheckingScopenewScope()org.codehaus.groovy.transform.stc.AbstractTypeCheckingExtension.TypeCheckingScopenewScope(Closure code)BinaryExpressionpopEnclosingBinaryExpression()ClassNodepopEnclosingClassNode()TypeCheckingContext.EnclosingClosurepopEnclosingClosure()MethodNodepopEnclosingMethod()ExpressionpopEnclosingMethodCall()voidpopTemporaryTypeInfo()voidpushEnclosingBinaryExpression(BinaryExpression binaryExpression)voidpushEnclosingClassNode(ClassNode classNode)voidpushEnclosingClosureExpression(ClosureExpression closureExpression)voidpushEnclosingMethod(MethodNode methodNode)voidpushEnclosingMethodCall(Expression call)voidpushTemporaryTypeInfo()protected java.lang.ObjectsafeCall(Closure closure, java.lang.Object... args)org.codehaus.groovy.transform.stc.AbstractTypeCheckingExtension.TypeCheckingScopescopeExit()org.codehaus.groovy.transform.stc.AbstractTypeCheckingExtension.TypeCheckingScopescopeExit(Closure code)voidsetHandled(boolean handled)java.util.List<MethodNode>unique(MethodNode node)<R> RwithTypeChecker(Closure<R> code)-
Methods inherited from class org.codehaus.groovy.transform.stc.TypeCheckingExtension
addStaticTypeError, afterMethodCall, afterVisitClass, afterVisitMethod, beforeMethodCall, beforeVisitClass, beforeVisitMethod, buildListType, buildMapType, classNodeFor, classNodeFor, existsProperty, existsProperty, extractStaticReceiver, finish, getArgumentTypes, getTargetMethod, getType, handleAmbiguousMethods, handleIncompatibleAssignment, handleIncompatibleReturnType, handleMissingMethod, handleUnresolvedAttribute, handleUnresolvedProperty, handleUnresolvedVariableExpression, isStaticMethodCallOnClass, lookupClassNodeFor, onMethodSelection, parameterizedType, setup, storeType
-
-
-
-
Field Detail
-
context
protected final TypeCheckingContext context
-
handled
protected boolean handled
-
debug
protected boolean debug
-
-
Constructor Detail
-
AbstractTypeCheckingExtension
public AbstractTypeCheckingExtension(StaticTypeCheckingVisitor typeCheckingVisitor)
-
-
Method Detail
-
setHandled
public void setHandled(boolean handled)
-
newScope
public org.codehaus.groovy.transform.stc.AbstractTypeCheckingExtension.TypeCheckingScope newScope()
-
newScope
public org.codehaus.groovy.transform.stc.AbstractTypeCheckingExtension.TypeCheckingScope newScope(Closure code)
-
scopeExit
public org.codehaus.groovy.transform.stc.AbstractTypeCheckingExtension.TypeCheckingScope scopeExit()
-
getCurrentScope
public org.codehaus.groovy.transform.stc.AbstractTypeCheckingExtension.TypeCheckingScope getCurrentScope()
-
scopeExit
public org.codehaus.groovy.transform.stc.AbstractTypeCheckingExtension.TypeCheckingScope scopeExit(Closure code)
-
isGenerated
public boolean isGenerated(MethodNode node)
-
unique
public java.util.List<MethodNode> unique(MethodNode node)
-
newMethod
public MethodNode newMethod(java.lang.String name, java.lang.Class returnType)
-
newMethod
public MethodNode newMethod(java.lang.String name, ClassNode returnType)
-
newMethod
public MethodNode newMethod(java.lang.String name, java.util.concurrent.Callable<ClassNode> returnType)
-
delegatesTo
public void delegatesTo(ClassNode type)
-
delegatesTo
public void delegatesTo(ClassNode type, int strategy)
-
delegatesTo
public void delegatesTo(ClassNode type, int strategy, org.codehaus.groovy.transform.stc.DelegationMetadata parent)
-
isAnnotatedBy
public boolean isAnnotatedBy(ASTNode node, java.lang.Class annotation)
-
isDynamic
public boolean isDynamic(VariableExpression var)
-
isExtensionMethod
public boolean isExtensionMethod(MethodNode node)
-
getArguments
public ArgumentListExpression getArguments(MethodCall call)
-
safeCall
protected java.lang.Object safeCall(Closure closure, java.lang.Object... args)
-
isMethodCall
public boolean isMethodCall(java.lang.Object o)
-
argTypesMatches
public boolean argTypesMatches(ClassNode[] argTypes, java.lang.Class... classes)
-
argTypesMatches
public boolean argTypesMatches(MethodCall call, java.lang.Class... classes)
-
firstArgTypesMatches
public boolean firstArgTypesMatches(ClassNode[] argTypes, java.lang.Class... classes)
-
firstArgTypesMatches
public boolean firstArgTypesMatches(MethodCall call, java.lang.Class... classes)
-
argTypeMatches
public boolean argTypeMatches(ClassNode[] argTypes, int index, java.lang.Class clazz)
-
argTypeMatches
public boolean argTypeMatches(MethodCall call, int index, java.lang.Class clazz)
-
withTypeChecker
public <R> R withTypeChecker(Closure<R> code)
-
makeDynamic
public MethodNode makeDynamic(MethodCall call)
Used to instruct the type checker that the call is a dynamic method call. Calling this method automatically sets the handled flag to true. The expected return type of the dynamic method call is Object.- Parameters:
call- the method call which is a dynamic method call- Returns:
- a virtual method node with the same name as the expected call
-
makeDynamic
public MethodNode makeDynamic(MethodCall call, ClassNode returnType)
Used to instruct the type checker that the call is a dynamic method call. Calling this method automatically sets the handled flag to true.- Parameters:
call- the method call which is a dynamic method callreturnType- the expected return type of the dynamic call- Returns:
- a virtual method node with the same name as the expected call
-
makeDynamic
public void makeDynamic(PropertyExpression pexp)
Instructs the type checker that a property access is dynamic, returning an instance of an Object. Calling this method automatically sets the handled flag to true.- Parameters:
pexp- the property or attribute expression
-
makeDynamic
public void makeDynamic(PropertyExpression pexp, ClassNode returnType)
Instructs the type checker that a property access is dynamic. Calling this method automatically sets the handled flag to true.- Parameters:
pexp- the property or attribute expressionreturnType- the type of the property
-
makeDynamic
public void makeDynamic(VariableExpression vexp)
Instructs the type checker that an unresolved variable is a dynamic variable of type Object. Calling this method automatically sets the handled flag to true.- Parameters:
vexp- the dynamic variable
-
makeDynamic
public void makeDynamic(VariableExpression vexp, ClassNode returnType)
Instructs the type checker that an unresolved variable is a dynamic variable.- Parameters:
returnType- the type of the dynamic variable Calling this method automatically sets the handled flag to true.vexp- the dynamic variable
-
log
public void log(java.lang.String message)
-
getEnclosingBinaryExpression
public BinaryExpression getEnclosingBinaryExpression()
-
pushEnclosingBinaryExpression
public void pushEnclosingBinaryExpression(BinaryExpression binaryExpression)
-
pushEnclosingClosureExpression
public void pushEnclosingClosureExpression(ClosureExpression closureExpression)
-
getEnclosingMethodCall
public Expression getEnclosingMethodCall()
-
popEnclosingMethodCall
public Expression popEnclosingMethodCall()
-
popEnclosingMethod
public MethodNode popEnclosingMethod()
-
getEnclosingClassNode
public ClassNode getEnclosingClassNode()
-
getEnclosingMethods
public java.util.List<MethodNode> getEnclosingMethods()
-
getEnclosingMethod
public MethodNode getEnclosingMethod()
-
popTemporaryTypeInfo
public void popTemporaryTypeInfo()
-
pushEnclosingClassNode
public void pushEnclosingClassNode(ClassNode classNode)
-
popEnclosingBinaryExpression
public BinaryExpression popEnclosingBinaryExpression()
-
getEnclosingClassNodes
public java.util.List<ClassNode> getEnclosingClassNodes()
-
getEnclosingClosureStack
public java.util.List<TypeCheckingContext.EnclosingClosure> getEnclosingClosureStack()
-
popEnclosingClassNode
public ClassNode popEnclosingClassNode()
-
pushEnclosingMethod
public void pushEnclosingMethod(MethodNode methodNode)
-
getGeneratedMethods
public java.util.Set<MethodNode> getGeneratedMethods()
-
getEnclosingBinaryExpressionStack
public java.util.List<BinaryExpression> getEnclosingBinaryExpressionStack()
-
getEnclosingClosure
public TypeCheckingContext.EnclosingClosure getEnclosingClosure()
-
getEnclosingMethodCalls
public java.util.List<Expression> getEnclosingMethodCalls()
-
pushEnclosingMethodCall
public void pushEnclosingMethodCall(Expression call)
-
popEnclosingClosure
public TypeCheckingContext.EnclosingClosure popEnclosingClosure()
-
pushTemporaryTypeInfo
public void pushTemporaryTypeInfo()
-
-