|
Groovy 2.2.1 | |||||||
FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.codehaus.groovy.transform.stc.TypeCheckingExtension
public class TypeCheckingExtension extends Object
This interface defines a high-level API for handling type checking errors. As a dynamic language and a platform for developing DSLs, the Groovy language provides a lot of means to supply custom bindings or methods that are not possible to find at compile time. However, it is still possible to help the compiler, for example by telling it what is the type of an unresolved property. For basic DSL type checking, implementing those methods would help the type checker and make it silent where it normally throws errors.
Field Summary | |
---|---|
protected StaticTypeCheckingVisitor |
typeCheckingVisitor
|
Constructor Summary | |
TypeCheckingExtension(StaticTypeCheckingVisitor typeCheckingVisitor)
|
Method Summary | |
---|---|
void
|
addStaticTypeError(String msg, ASTNode expr)
Adds a type checking error, which will be displayed to the user during compilation. |
void
|
afterMethodCall(MethodCall call)
Allows the extension to perform additional tasks after the type checker actually visits a method call. |
void
|
afterVisitClass(ClassNode node)
Allows the extension to perform additional tasks after the type checker actually visited a class node. |
void
|
afterVisitMethod(MethodNode node)
Allows the extension to perform additional tasks after the type checker actually visited a method node. |
boolean
|
beforeMethodCall(MethodCall call)
Allows the extension to perform additional tasks before the type checker actually visits a method call. |
boolean
|
beforeVisitClass(ClassNode node)
Allows the extension to perform additional tasks before the type checker actually visits a class node. |
boolean
|
beforeVisitMethod(MethodNode node)
Allows the extension to perform additional tasks before the type checker actually visits a method node. |
ClassNode
|
buildListType(ClassNode componentType)
Builds a parametrized class node for List, to represent List<X> |
ClassNode
|
buildMapType(ClassNode keyType, ClassNode valueType)
Builds a parametrized class node representing the Map<keyType,valueType> type. |
ClassNode
|
classNodeFor(Class type)
|
ClassNode
|
classNodeFor(String type)
|
boolean
|
existsProperty(PropertyExpression pexp, boolean checkForReadOnly)
|
boolean
|
existsProperty(PropertyExpression pexp, boolean checkForReadOnly, ClassCodeVisitorSupport visitor)
|
ClassNode
|
extractStaticReceiver(MethodCall call)
Given a method call, first checks that it's a static method call, and if it is, returns the class node for the receiver. |
void
|
finish()
Subclasses should implement this method if they need to perform additional checks after the type checker has finished its work. |
ClassNode[]
|
getArgumentTypes(ArgumentListExpression args)
|
MethodNode
|
getTargetMethod(Expression expression)
|
ClassNode
|
getType(ASTNode exp)
Returns the inferred type of an expression. |
List
|
handleAmbiguousMethods(List nodes, Expression origin)
This method is called by the type checker before throwing an "ambiguous method" error, giving the chance to the extension to select the method properly. |
boolean
|
handleIncompatibleAssignment(ClassNode lhsType, ClassNode rhsType, Expression assignmentExpression)
This method is called by the type checker when an assignment is not allowed by the type checker. |
boolean
|
handleIncompatibleReturnType(ReturnStatement returnStatement, ClassNode inferredReturnType)
Allows the extension to catch incompatible return types. |
List
|
handleMissingMethod(ClassNode receiver, String name, ArgumentListExpression argumentList, ClassNode[] argumentTypes, MethodCall call)
This method is called by the type checker when a method call cannot be resolved. |
boolean
|
handleUnresolvedAttribute(AttributeExpression aexp)
This method is called by the type checker when an attribute expression cannot be resolved (for example, when an attribute doesn't exist). |
boolean
|
handleUnresolvedProperty(PropertyExpression pexp)
This method is called by the type checker when a property expression cannot be resolved (for example, when a property doesn't exist). |
boolean
|
handleUnresolvedVariableExpression(VariableExpression vexp)
This method is called by the type checker when a variable expression cannot be resolved. |
boolean
|
isStaticMethodCallOnClass(MethodCall call, ClassNode receiver)
Given a method call, checks if it's a static method call and if it is, tells if the receiver matches the one supplied as an argument. |
ClassNode
|
lookupClassNodeFor(String type)
Lookup a ClassNode by its name from the source unit |
void
|
onMethodSelection(Expression expression, MethodNode target)
Allows the extension to listen to method selection events. |
ClassNode
|
parameterizedType(ClassNode baseType, ClassNode... genericsTypeArguments)
|
void
|
setup()
Subclasses should implement this method whenever they need to perform special checks before the type checker starts working. |
void
|
storeType(Expression exp, ClassNode cn)
Stores an inferred type for an expression. |
Methods inherited from class Object | |
---|---|
wait, wait, wait, equals, toString, hashCode, getClass, notify, notifyAll |
Field Detail |
---|
protected final StaticTypeCheckingVisitor typeCheckingVisitor
Constructor Detail |
---|
public TypeCheckingExtension(StaticTypeCheckingVisitor typeCheckingVisitor)
Method Detail |
---|
public void addStaticTypeError(String msg, ASTNode expr)
msg
- the message for the errorexpr
- the expression which is the root cause of the error
public void afterMethodCall(MethodCall call)
call
- a method call, either a MethodCallExpression or a StaticMethodCallExpression
public void afterVisitClass(ClassNode node)
node
- a class node
public void afterVisitMethod(MethodNode node)
node
- a method node
public boolean beforeMethodCall(MethodCall call)
call
- a method call, either a MethodCallExpression or a StaticMethodCallExpression
public boolean beforeVisitClass(ClassNode node)
node
- a class node
public boolean beforeVisitMethod(MethodNode node)
node
- a method node
public ClassNode buildListType(ClassNode componentType)
componentType
- the classnode for the component type of the list
public ClassNode buildMapType(ClassNode keyType, ClassNode valueType)
keyType
- the classnode type of the keyvalueType
- the classnode type of the value
public ClassNode classNodeFor(Class type)
public ClassNode classNodeFor(String type)
public boolean existsProperty(PropertyExpression pexp, boolean checkForReadOnly)
public boolean existsProperty(PropertyExpression pexp, boolean checkForReadOnly, ClassCodeVisitorSupport visitor)
public ClassNode extractStaticReceiver(MethodCall call)
Person.findAll { ... }, it would return the class node for Person.
If it's not a static method call, returns null.
call
- a method call
public void finish()
public ClassNode[] getArgumentTypes(ArgumentListExpression args)
public MethodNode getTargetMethod(Expression expression)
public ClassNode getType(ASTNode exp)
exp
- the expression for which we want to find the inferred type
public List handleAmbiguousMethods(List nodes, Expression origin)
nodes
- the list of ambiguous methodsorigin
- the expression which originated the method selection process
public boolean handleIncompatibleAssignment(ClassNode lhsType, ClassNode rhsType, Expression assignmentExpression)
lhsType
- the type of the left hand side of the assignment, as found by the type checkerrhsType
- the type of the right hand side of the assignment, as found by the type checkerassignmentExpression
- the assignment expression which triggerred this callboolean
false if the extension does not handle this assignment, true otherwise
public boolean handleIncompatibleReturnType(ReturnStatement returnStatement, ClassNode inferredReturnType)
returnStatement
- the statement that triggered the errorinferredReturnType
- the inferred return type for this statement
public List handleMissingMethod(ClassNode receiver, String name, ArgumentListExpression argumentList, ClassNode[] argumentTypes, MethodCall call)
receiver
- the type of the receivername
- the name of the called methodargumentList
- the list of arguments of the callargumentTypes
- the types of the arguments of the callcall
- the method call itself, if needed
public boolean handleUnresolvedAttribute(AttributeExpression aexp)
aexp
- the unresolved attributeboolean
false if this extension doesn't resolve the attribute, true
if it resolves the attribute.
public boolean handleUnresolvedProperty(PropertyExpression pexp)
pexp
- the unresolved propertyboolean
false if this extension doesn't resolve the property, true
if it resolves the property.
public boolean handleUnresolvedVariableExpression(VariableExpression vexp)
vexp
- the unresolved variable extensionboolean
false if the extension doesn't handle it,
true if the extension handles this variable.
public boolean isStaticMethodCallOnClass(MethodCall call, ClassNode receiver)
call
- a method callreceiver
- a class node
public ClassNode lookupClassNodeFor(String type)
type
- the name of the class whose ClassNode we want to lookup
public void onMethodSelection(Expression expression, MethodNode target)
expression
- the expression for which a corresponding method has been foundtarget
- the method which has been chosen by the type checker
public ClassNode parameterizedType(ClassNode baseType, ClassNode... genericsTypeArguments)
public void setup()
public void storeType(Expression exp, ClassNode cn)
exp
- the expression for which we want to store an inferred typecn
- the type of the expression
Copyright © 2003-2013 The Codehaus. All rights reserved.