Class TypeCheckingContext
- java.lang.Object
-
- org.codehaus.groovy.transform.stc.TypeCheckingContext
-
public class TypeCheckingContext extends Object
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
TypeCheckingContext.EnclosingClosure
Represents the context of an enclosing closure.
-
Field Summary
Fields Modifier and Type Field Description protected Set<MethodNode>
alreadyVisitedMethods
protected IdentityHashMap<BlockStatement,Map<VariableExpression,List<ClassNode>>>
blockStatements2Types
This field used for type derivation Check IfStatement matched pattern: Object var1; if (!(var1 instanceOf Runnable)){ return } // Here var1 instance of Runnableprotected Map<VariableExpression,List<ClassNode>>
closureSharedVariablesAssignmentTypes
A map used to store every type used in closure shared variable assignments.protected CompilationUnit
compilationUnit
protected Map<Parameter,ClassNode>
controlStructureVariables
protected org.codehaus.groovy.transform.stc.DelegationMetadata
delegationMetadata
Whenever a method using a closure as argument (typically, "with") is detected, this list is updated with the receiver type of the with method.protected LinkedList<BinaryExpression>
enclosingBinaryExpressions
protected LinkedList<BlockStatement>
enclosingBlocks
protected LinkedList<ClassNode>
enclosingClassNodes
protected LinkedList<TypeCheckingContext.EnclosingClosure>
enclosingClosures
protected LinkedList<Expression>
enclosingMethodCalls
protected LinkedList<MethodNode>
enclosingMethods
protected LinkedList<ErrorCollector>
errorCollectors
protected Map<VariableExpression,List<ClassNode>>
ifElseForWhileAssignmentTracker
This field is used to track assignments in if/else branches, for loops and while loops.protected boolean
isInStaticContext
protected ClassNode
lastImplicitItType
The type of the last encountered "it" implicit parameter.protected Set<MethodNode>
methodsToBeVisited
protected Set<Long>
reportedErrors
protected LinkedHashSet<org.codehaus.groovy.transform.stc.SecondPassExpression>
secondPassExpressions
Some expressions need to be visited twice, because type information may be insufficient at some point.protected SourceUnit
source
protected LinkedList<SwitchStatement>
switchStatements
protected Stack<Map<Object,List<ClassNode>>>
temporaryIfBranchTypeInformation
Stores information which is only valid in the "if" branch of an if-then-else statement.protected StaticTypeCheckingVisitor
visitor
-
Constructor Summary
Constructors Constructor Description TypeCheckingContext(StaticTypeCheckingVisitor visitor)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description CompilationUnit
getCompilationUnit()
BinaryExpression
getEnclosingBinaryExpression()
Returns the binary expression which is on the top of the stack, or null if there's no such element.List<BinaryExpression>
getEnclosingBinaryExpressionStack()
Returns the current stack of enclosing binary expressions.ClassNode
getEnclosingClassNode()
Returns the class node which is on the top of the stack, or null if there's no such element.List<ClassNode>
getEnclosingClassNodes()
Returns the current stack of enclosing classes.TypeCheckingContext.EnclosingClosure
getEnclosingClosure()
Returns the closure expression which is on the top of the stack, or null if there's no such element.List<TypeCheckingContext.EnclosingClosure>
getEnclosingClosureStack()
Returns the current stack of enclosing closure expressions.MethodNode
getEnclosingMethod()
Returns the method node which is on the top of the stack, or null if there's no such element.Expression
getEnclosingMethodCall()
Returns the method call which is on the top of the stack, or null if there's no such element.List<Expression>
getEnclosingMethodCalls()
Returns the current stack of enclosing method calls.List<MethodNode>
getEnclosingMethods()
Returns the current stack of enclosing methods.SwitchStatement
getEnclosingSwitchStatement()
Returns the switch statement which is on the top of the stack, or null if there's no such element.List<SwitchStatement>
getEnclosingSwitchStatements()
Returns the current stack of enclosing switch statements.ErrorCollector
getErrorCollector()
List<ErrorCollector>
getErrorCollectors()
SourceUnit
getSource()
boolean
isTargetOfEnclosingAssignment(Expression expression)
BinaryExpression
popEnclosingBinaryExpression()
Pops a binary expression from the binary expression stack.ClassNode
popEnclosingClassNode()
Pops a class from the enclosing classes stack.TypeCheckingContext.EnclosingClosure
popEnclosingClosure()
Pops a closure expression from the closure expression stack.MethodNode
popEnclosingMethod()
Pops a method from the enclosing methods stack.Expression
popEnclosingMethodCall()
Pops a method call from the enclosing method call stack.SwitchStatement
popEnclosingSwitchStatement()
Pops a switch statement from the enclosing switch statements stack.ErrorCollector
popErrorCollector()
void
popTemporaryTypeInfo()
void
pushEnclosingBinaryExpression(BinaryExpression binaryExpression)
Pushes a binary expression into the binary expression stack.void
pushEnclosingClassNode(ClassNode classNode)
Pushes a class into the classes stack.void
pushEnclosingClosureExpression(ClosureExpression closureExpression)
Pushes a closure expression into the closure expression stack.void
pushEnclosingMethod(MethodNode methodNode)
Pushes a method into the method stack.void
pushEnclosingMethodCall(Expression call)
Pushes a method call into the method call stack.void
pushEnclosingSwitchStatement(SwitchStatement switchStatement)
Pushes a switch statement into the switch statement stack.ErrorCollector
pushErrorCollector()
void
pushErrorCollector(ErrorCollector collector)
void
pushTemporaryTypeInfo()
void
setCompilationUnit(CompilationUnit compilationUnit)
-
-
-
Field Detail
-
visitor
protected final StaticTypeCheckingVisitor visitor
-
source
protected SourceUnit source
-
compilationUnit
protected CompilationUnit compilationUnit
-
errorCollectors
protected final LinkedList<ErrorCollector> errorCollectors
-
temporaryIfBranchTypeInformation
protected Stack<Map<Object,List<ClassNode>>> temporaryIfBranchTypeInformation
Stores information which is only valid in the "if" branch of an if-then-else statement. This is used when the if condition expression makes use of an instanceof check
-
delegationMetadata
protected org.codehaus.groovy.transform.stc.DelegationMetadata delegationMetadata
Whenever a method using a closure as argument (typically, "with") is detected, this list is updated with the receiver type of the with method.
-
isInStaticContext
protected boolean isInStaticContext
-
lastImplicitItType
protected ClassNode lastImplicitItType
The type of the last encountered "it" implicit parameter.
-
methodsToBeVisited
protected Set<MethodNode> methodsToBeVisited
-
ifElseForWhileAssignmentTracker
protected Map<VariableExpression,List<ClassNode>> ifElseForWhileAssignmentTracker
This field is used to track assignments in if/else branches, for loops and while loops. For example, in the following code:if (cond) { x = 1 } else { x = '123' }
the inferred type of x after the if/else statement should be the LUB of int and String.
-
blockStatements2Types
protected final IdentityHashMap<BlockStatement,Map<VariableExpression,List<ClassNode>>> blockStatements2Types
This field used for type derivation Check IfStatement matched pattern: Object var1; if (!(var1 instanceOf Runnable)){ return } // Here var1 instance of Runnable
-
alreadyVisitedMethods
protected Set<MethodNode> alreadyVisitedMethods
-
secondPassExpressions
protected final LinkedHashSet<org.codehaus.groovy.transform.stc.SecondPassExpression> secondPassExpressions
Some expressions need to be visited twice, because type information may be insufficient at some point. For example, for closure shared variables, we need a first pass to collect every type which is assigned to a closure shared variable, then a second pass to ensure that every method call on such a variable is made on a LUB.
-
closureSharedVariablesAssignmentTypes
protected final Map<VariableExpression,List<ClassNode>> closureSharedVariablesAssignmentTypes
A map used to store every type used in closure shared variable assignments. In a second pass, we will compute the LUB of each type and check that method calls on those variables are valid.
-
enclosingClassNodes
protected final LinkedList<ClassNode> enclosingClassNodes
-
enclosingMethods
protected final LinkedList<MethodNode> enclosingMethods
-
enclosingMethodCalls
protected final LinkedList<Expression> enclosingMethodCalls
-
enclosingBlocks
protected final LinkedList<BlockStatement> enclosingBlocks
-
switchStatements
protected final LinkedList<SwitchStatement> switchStatements
-
enclosingClosures
protected final LinkedList<TypeCheckingContext.EnclosingClosure> enclosingClosures
-
enclosingBinaryExpressions
protected final LinkedList<BinaryExpression> enclosingBinaryExpressions
-
-
Constructor Detail
-
TypeCheckingContext
public TypeCheckingContext(StaticTypeCheckingVisitor visitor)
-
-
Method Detail
-
getSource
public SourceUnit getSource()
-
getCompilationUnit
public CompilationUnit getCompilationUnit()
-
setCompilationUnit
public void setCompilationUnit(CompilationUnit compilationUnit)
-
pushErrorCollector
public ErrorCollector pushErrorCollector()
-
pushErrorCollector
public void pushErrorCollector(ErrorCollector collector)
-
popErrorCollector
public ErrorCollector popErrorCollector()
-
getErrorCollector
public ErrorCollector getErrorCollector()
-
getErrorCollectors
public List<ErrorCollector> getErrorCollectors()
-
pushTemporaryTypeInfo
public void pushTemporaryTypeInfo()
-
popTemporaryTypeInfo
public void popTemporaryTypeInfo()
-
pushEnclosingBinaryExpression
public void pushEnclosingBinaryExpression(BinaryExpression binaryExpression)
Pushes a binary expression into the binary expression stack.
-
popEnclosingBinaryExpression
public BinaryExpression popEnclosingBinaryExpression()
Pops a binary expression from the binary expression stack.
-
getEnclosingBinaryExpression
public BinaryExpression getEnclosingBinaryExpression()
Returns the binary expression which is on the top of the stack, or null if there's no such element.
-
getEnclosingBinaryExpressionStack
public List<BinaryExpression> getEnclosingBinaryExpressionStack()
Returns the current stack of enclosing binary expressions. The first element is the top of the stack.
-
isTargetOfEnclosingAssignment
public boolean isTargetOfEnclosingAssignment(Expression expression)
-
pushEnclosingClosureExpression
public void pushEnclosingClosureExpression(ClosureExpression closureExpression)
Pushes a closure expression into the closure expression stack.
-
popEnclosingClosure
public TypeCheckingContext.EnclosingClosure popEnclosingClosure()
Pops a closure expression from the closure expression stack.
-
getEnclosingClosure
public TypeCheckingContext.EnclosingClosure getEnclosingClosure()
Returns the closure expression which is on the top of the stack, or null if there's no such element.
-
getEnclosingClosureStack
public List<TypeCheckingContext.EnclosingClosure> getEnclosingClosureStack()
Returns the current stack of enclosing closure expressions. The first element is the top of the stack.
-
pushEnclosingClassNode
public void pushEnclosingClassNode(ClassNode classNode)
Pushes a class into the classes stack.
-
popEnclosingClassNode
public ClassNode popEnclosingClassNode()
Pops a class from the enclosing classes stack.
-
getEnclosingClassNode
public ClassNode getEnclosingClassNode()
Returns the class node which is on the top of the stack, or null if there's no such element.
-
getEnclosingClassNodes
public List<ClassNode> getEnclosingClassNodes()
Returns the current stack of enclosing classes. The first element is the top of the stack, that is to say the currently visited class.
-
pushEnclosingMethod
public void pushEnclosingMethod(MethodNode methodNode)
Pushes a method into the method stack.
-
popEnclosingMethod
public MethodNode popEnclosingMethod()
Pops a method from the enclosing methods stack.
-
getEnclosingMethod
public MethodNode getEnclosingMethod()
Returns the method node which is on the top of the stack, or null if there's no such element.
-
getEnclosingMethods
public List<MethodNode> getEnclosingMethods()
Returns the current stack of enclosing methods. The first element is the top of the stack, that is to say the last visited method.
-
pushEnclosingMethodCall
public void pushEnclosingMethodCall(Expression call)
Pushes a method call into the method call stack.- Parameters:
call
- the call expression to be pushed, either aMethodCallExpression
or aStaticMethodCallExpression
-
popEnclosingMethodCall
public Expression popEnclosingMethodCall()
Pops a method call from the enclosing method call stack.
-
getEnclosingMethodCall
public Expression getEnclosingMethodCall()
Returns the method call which is on the top of the stack, or null if there's no such element.
-
getEnclosingMethodCalls
public List<Expression> getEnclosingMethodCalls()
Returns the current stack of enclosing method calls. The first element is the top of the stack, that is to say the currently visited method call.
-
pushEnclosingSwitchStatement
public void pushEnclosingSwitchStatement(SwitchStatement switchStatement)
Pushes a switch statement into the switch statement stack.
-
popEnclosingSwitchStatement
public SwitchStatement popEnclosingSwitchStatement()
Pops a switch statement from the enclosing switch statements stack.
-
getEnclosingSwitchStatement
public SwitchStatement getEnclosingSwitchStatement()
Returns the switch statement which is on the top of the stack, or null if there's no such element.
-
getEnclosingSwitchStatements
public List<SwitchStatement> getEnclosingSwitchStatements()
Returns the current stack of enclosing switch statements. The first element is the top of the stack, that is to say the last visited switch statement.
-
-