Class TypeCheckingContext
- java.lang.Object
-
- org.codehaus.groovy.transform.stc.TypeCheckingContext
-
public class TypeCheckingContext extends java.lang.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 java.util.Set<MethodNode>
alreadyVisitedMethods
protected java.util.IdentityHashMap<BlockStatement,java.util.Map<VariableExpression,java.util.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 java.util.Map<VariableExpression,java.util.List<ClassNode>>
closureSharedVariablesAssignmentTypes
A map used to store every type used in closure shared variable assignments.protected CompilationUnit
compilationUnit
protected java.util.Map<Parameter,ClassNode>
controlStructureVariables
protected org.codehaus.groovy.transform.stc.DelegationMetadata
delegationMetadata
protected java.util.LinkedList<BinaryExpression>
enclosingBinaryExpressions
protected java.util.LinkedList<BlockStatement>
enclosingBlocks
protected java.util.LinkedList<ClassNode>
enclosingClassNodes
protected java.util.LinkedList<TypeCheckingContext.EnclosingClosure>
enclosingClosures
protected java.util.LinkedList<ConstructorCallExpression>
enclosingConstructorCalls
protected java.util.LinkedList<Expression>
enclosingMethodCalls
protected java.util.LinkedList<MethodNode>
enclosingMethods
protected java.util.LinkedList<PropertyExpression>
enclosingPropertyExpressions
protected java.util.LinkedList<ReturnStatement>
enclosingReturnStatements
protected java.util.LinkedList<ErrorCollector>
errorCollectors
protected java.util.Map<VariableExpression,java.util.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 parameterprotected java.util.Set<MethodNode>
methodsToBeVisited
protected java.util.Set<java.lang.Long>
reportedErrors
protected java.util.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 java.util.Stack<java.util.Map<java.lang.Object,java.util.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 staticTypeCheckingVisitor)
-
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.java.util.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.java.util.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.java.util.List<TypeCheckingContext.EnclosingClosure>
getEnclosingClosureStack()
Returns the current stack of enclosing closure expressions.ConstructorCallExpression
getEnclosingConstructorCall()
Returns the constructor call which is on the top of the stack, or null if there's no such element.java.util.List<ConstructorCallExpression>
getEnclosingConstructorCalls()
Returns the current stack of enclosing constructor calls.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.java.util.List<Expression>
getEnclosingMethodCalls()
Returns the current stack of enclosing method calls.java.util.List<MethodNode>
getEnclosingMethods()
Returns the current stack of enclosing methods.Expression
getEnclosingPropertyExpression()
Returns the property expression which is on the top of the stack, or null if there's no such element.java.util.List<PropertyExpression>
getEnclosingPropertyExpressions()
Returns the current stack of property expressions.ReturnStatement
getEnclosingReturnStatement()
Returns the return statement which is on the top of the stack, or null if there's no such element.ErrorCollector
getErrorCollector()
java.util.List<ErrorCollector>
getErrorCollectors()
SourceUnit
getSource()
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.ConstructorCallExpression
popEnclosingConstructorCall()
Pops a constructor call from the enclosing constructor call stack.MethodNode
popEnclosingMethod()
Pops a method from the enclosing methods stack.Expression
popEnclosingMethodCall()
Pops a method call from the enclosing method call stack.Expression
popEnclosingPropertyExpression()
Pops a property expression from the property expression stack.ReturnStatement
popEnclosingReturnStatement()
Pops a return statement from the enclosing return 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
pushEnclosingConstructorCall(ConstructorCallExpression call)
Pushes a constructor call into the constructor call 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
pushEnclosingPropertyExpression(PropertyExpression propertyExpression)
Pushes a property expression into the property expression stack.void
pushEnclosingReturnStatement(ReturnStatement returnStatement)
Pushes a return statement into the return statement stack.ErrorCollector
pushErrorCollector()
void
pushErrorCollector(ErrorCollector collector)
void
pushTemporaryTypeInfo()
void
setCompilationUnit(CompilationUnit compilationUnit)
-
-
-
Field Detail
-
source
protected SourceUnit source
-
methodsToBeVisited
protected java.util.Set<MethodNode> methodsToBeVisited
-
isInStaticContext
protected boolean isInStaticContext
-
errorCollectors
protected final java.util.LinkedList<ErrorCollector> errorCollectors
-
enclosingClassNodes
protected final java.util.LinkedList<ClassNode> enclosingClassNodes
-
enclosingMethods
protected final java.util.LinkedList<MethodNode> enclosingMethods
-
enclosingMethodCalls
protected final java.util.LinkedList<Expression> enclosingMethodCalls
-
enclosingConstructorCalls
protected final java.util.LinkedList<ConstructorCallExpression> enclosingConstructorCalls
-
enclosingBlocks
protected final java.util.LinkedList<BlockStatement> enclosingBlocks
-
enclosingReturnStatements
protected final java.util.LinkedList<ReturnStatement> enclosingReturnStatements
-
enclosingPropertyExpressions
protected final java.util.LinkedList<PropertyExpression> enclosingPropertyExpressions
-
enclosingClosures
protected final java.util.LinkedList<TypeCheckingContext.EnclosingClosure> enclosingClosures
-
delegationMetadata
protected org.codehaus.groovy.transform.stc.DelegationMetadata delegationMetadata
-
lastImplicitItType
protected ClassNode lastImplicitItType
The type of the last encountered "it" implicit parameter
-
ifElseForWhileAssignmentTracker
protected java.util.Map<VariableExpression,java.util.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, String)
-
blockStatements2Types
protected final java.util.IdentityHashMap<BlockStatement,java.util.Map<VariableExpression,java.util.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
-
temporaryIfBranchTypeInformation
protected java.util.Stack<java.util.Map<java.lang.Object,java.util.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
-
alreadyVisitedMethods
protected java.util.Set<MethodNode> alreadyVisitedMethods
-
secondPassExpressions
protected final java.util.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 java.util.Map<VariableExpression,java.util.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.
-
reportedErrors
protected final java.util.Set<java.lang.Long> reportedErrors
-
enclosingBinaryExpressions
protected final java.util.LinkedList<BinaryExpression> enclosingBinaryExpressions
-
visitor
protected final StaticTypeCheckingVisitor visitor
-
compilationUnit
protected CompilationUnit compilationUnit
-
-
Constructor Detail
-
TypeCheckingContext
public TypeCheckingContext(StaticTypeCheckingVisitor staticTypeCheckingVisitor)
-
-
Method Detail
-
pushEnclosingBinaryExpression
public void pushEnclosingBinaryExpression(BinaryExpression binaryExpression)
Pushes a binary expression into the binary expression stack.- Parameters:
binaryExpression
- the binary expression to be pushed
-
popEnclosingBinaryExpression
public BinaryExpression popEnclosingBinaryExpression()
Pops a binary expression from the binary expression stack.- Returns:
- the popped binary expression
-
getEnclosingBinaryExpression
public BinaryExpression getEnclosingBinaryExpression()
Returns the binary expression which is on the top of the stack, or null if there's no such element.- Returns:
- the binary expression on top of the stack, or null if no such element.
-
getEnclosingBinaryExpressionStack
public java.util.List<BinaryExpression> getEnclosingBinaryExpressionStack()
Returns the current stack of enclosing binary expressions. The first element is the top of the stack.- Returns:
- an immutable list of binary expressions.
-
pushEnclosingClosureExpression
public void pushEnclosingClosureExpression(ClosureExpression closureExpression)
Pushes a closure expression into the closure expression stack.- Parameters:
closureExpression
- the closure expression to be pushed
-
popEnclosingClosure
public TypeCheckingContext.EnclosingClosure popEnclosingClosure()
Pops a closure expression from the closure expression stack.- Returns:
- the popped closure expression
-
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.- Returns:
- the closure expression on top of the stack, or null if no such element.
-
getEnclosingClosureStack
public java.util.List<TypeCheckingContext.EnclosingClosure> getEnclosingClosureStack()
Returns the current stack of enclosing closure expressions. The first element is the top of the stack.- Returns:
- an immutable list of closure expressions.
-
pushEnclosingMethod
public void pushEnclosingMethod(MethodNode methodNode)
Pushes a method into the method stack.- Parameters:
methodNode
- the method to be pushed
-
popEnclosingMethod
public MethodNode popEnclosingMethod()
Pops a method from the enclosing methods stack.- Returns:
- the popped method
-
getEnclosingMethod
public MethodNode getEnclosingMethod()
Returns the method node which is on the top of the stack, or null if there's no such element.- Returns:
- the enclosing method on top of the stack, or null if no such element.
-
pushEnclosingReturnStatement
public void pushEnclosingReturnStatement(ReturnStatement returnStatement)
Pushes a return statement into the return statement stack.- Parameters:
returnStatement
- the return statement to be pushed
-
popEnclosingReturnStatement
public ReturnStatement popEnclosingReturnStatement()
Pops a return statement from the enclosing return statements stack.- Returns:
- the popped return statement
-
getEnclosingReturnStatement
public ReturnStatement getEnclosingReturnStatement()
Returns the return statement which is on the top of the stack, or null if there's no such element.- Returns:
- the enclosing return statement on top of the stack, or null if no such element.
-
getEnclosingMethods
public java.util.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.- Returns:
- an immutable list of method nodes.
-
pushEnclosingClassNode
public void pushEnclosingClassNode(ClassNode classNode)
Pushes a class into the classes stack.- Parameters:
classNode
- the class to be pushed
-
popEnclosingClassNode
public ClassNode popEnclosingClassNode()
Pops a class from the enclosing classes stack.- Returns:
- the popped class
-
getEnclosingClassNode
public ClassNode getEnclosingClassNode()
Returns the class node which is on the top of the stack, or null if there's no such element.- Returns:
- the enclosing class on top of the stack, or null if no such element.
-
getEnclosingClassNodes
public java.util.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.- Returns:
- an immutable list of class nodes.
-
pushTemporaryTypeInfo
public void pushTemporaryTypeInfo()
-
popTemporaryTypeInfo
public void popTemporaryTypeInfo()
-
pushEnclosingPropertyExpression
public void pushEnclosingPropertyExpression(PropertyExpression propertyExpression)
Pushes a property expression into the property expression stack.- Parameters:
propertyExpression
- the property expression to be pushed
-
popEnclosingPropertyExpression
public Expression popEnclosingPropertyExpression()
Pops a property expression from the property expression stack.- Returns:
- the popped property expression
-
getEnclosingPropertyExpression
public Expression getEnclosingPropertyExpression()
Returns the property expression which is on the top of the stack, or null if there's no such element.- Returns:
- the property expression on top of the stack, or null if no such element.
-
getEnclosingPropertyExpressions
public java.util.List<PropertyExpression> getEnclosingPropertyExpressions()
Returns the current stack of property expressions. The first element is the top of the stack, that is to say the currently visited property expression.- Returns:
- an immutable list of property expressions.
-
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.- Returns:
- the popped call
-
getEnclosingMethodCall
public Expression getEnclosingMethodCall()
Returns the method call which is on the top of the stack, or null if there's no such element.- Returns:
- the enclosing method call on top of the stack, or null if no such element.
-
getEnclosingMethodCalls
public java.util.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.- Returns:
- an immutable list of enclosing method calls.
-
pushEnclosingConstructorCall
public void pushEnclosingConstructorCall(ConstructorCallExpression call)
Pushes a constructor call into the constructor call stack.- Parameters:
call
- the call expression to be pushed
-
popEnclosingConstructorCall
public ConstructorCallExpression popEnclosingConstructorCall()
Pops a constructor call from the enclosing constructor call stack.- Returns:
- the popped call
-
getEnclosingConstructorCall
public ConstructorCallExpression getEnclosingConstructorCall()
Returns the constructor call which is on the top of the stack, or null if there's no such element.- Returns:
- the enclosing constructor call on top of the stack, or null if no such element.
-
getEnclosingConstructorCalls
public java.util.List<ConstructorCallExpression> getEnclosingConstructorCalls()
Returns the current stack of enclosing constructor calls. The first element is the top of the stack, that is to say the currently visited constructor call.- Returns:
- an immutable list of enclosing constructor calls.
-
getErrorCollectors
public java.util.List<ErrorCollector> getErrorCollectors()
-
getErrorCollector
public ErrorCollector getErrorCollector()
-
pushErrorCollector
public void pushErrorCollector(ErrorCollector collector)
-
pushErrorCollector
public ErrorCollector pushErrorCollector()
-
popErrorCollector
public ErrorCollector popErrorCollector()
-
getCompilationUnit
public CompilationUnit getCompilationUnit()
-
setCompilationUnit
public void setCompilationUnit(CompilationUnit compilationUnit)
-
getSource
public SourceUnit getSource()
-
-