public class TypeCheckingContext extends Object
Modifiers | Name | Description |
---|---|---|
static class |
TypeCheckingContext.EnclosingClosure |
Represents the context of an enclosing closure. |
Modifiers | Name | 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 (! |
protected 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 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<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<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 and description |
---|
TypeCheckingContext
(StaticTypeCheckingVisitor visitor) |
Type Params | Return Type | Name and description |
---|---|---|
|
public CompilationUnit |
getCompilationUnit() |
|
public BinaryExpression |
getEnclosingBinaryExpression() Returns the binary expression which is on the top of the stack, or null if there's no such element. |
|
public List<BinaryExpression> |
getEnclosingBinaryExpressionStack() Returns the current stack of enclosing binary expressions. |
|
public ClassNode |
getEnclosingClassNode() Returns the class node which is on the top of the stack, or null if there's no such element. |
|
public List<ClassNode> |
getEnclosingClassNodes() Returns the current stack of enclosing classes. |
|
public TypeCheckingContext.EnclosingClosure |
getEnclosingClosure() Returns the closure expression which is on the top of the stack, or null if there's no such element. |
|
public List<EnclosingClosure> |
getEnclosingClosureStack() Returns the current stack of enclosing closure expressions. |
|
public MethodNode |
getEnclosingMethod() Returns the method node which is on the top of the stack, or null if there's no such element. |
|
public Expression |
getEnclosingMethodCall() Returns the method call which is on the top of the stack, or null if there's no such element. |
|
public List<Expression> |
getEnclosingMethodCalls() Returns the current stack of enclosing method calls. |
|
public List<MethodNode> |
getEnclosingMethods() Returns the current stack of enclosing methods. |
|
public SwitchStatement |
getEnclosingSwitchStatement() Returns the switch statement which is on the top of the stack, or null if there's no such element. |
|
public List<SwitchStatement> |
getEnclosingSwitchStatements() Returns the current stack of enclosing switch statements. |
|
public ErrorCollector |
getErrorCollector() |
|
public List<ErrorCollector> |
getErrorCollectors() |
|
public SourceUnit |
getSource() |
|
public boolean |
isTargetOfEnclosingAssignment(Expression expression) |
|
public BinaryExpression |
popEnclosingBinaryExpression() Pops a binary expression from the binary expression stack. |
|
public ClassNode |
popEnclosingClassNode() Pops a class from the enclosing classes stack. |
|
public TypeCheckingContext.EnclosingClosure |
popEnclosingClosure() Pops a closure expression from the closure expression stack. |
|
public MethodNode |
popEnclosingMethod() Pops a method from the enclosing methods stack. |
|
public Expression |
popEnclosingMethodCall() Pops a method call from the enclosing method call stack. |
|
public SwitchStatement |
popEnclosingSwitchStatement() Pops a switch statement from the enclosing switch statements stack. |
|
public ErrorCollector |
popErrorCollector() |
|
public void |
popTemporaryTypeInfo() |
|
public void |
pushEnclosingBinaryExpression(BinaryExpression binaryExpression) Pushes a binary expression into the binary expression stack. |
|
public void |
pushEnclosingClassNode(ClassNode classNode) Pushes a class into the classes stack. |
|
public void |
pushEnclosingClosureExpression(ClosureExpression closureExpression) Pushes a closure expression into the closure expression stack. |
|
public void |
pushEnclosingMethod(MethodNode methodNode) Pushes a method into the method stack. |
|
public void |
pushEnclosingMethodCall(Expression call) Pushes a method call into the method call stack. |
|
public void |
pushEnclosingSwitchStatement(SwitchStatement switchStatement) Pushes a switch statement into the switch statement stack. |
|
public ErrorCollector |
pushErrorCollector() |
|
public void |
pushErrorCollector(ErrorCollector collector) |
|
public void |
pushTemporaryTypeInfo() |
|
public void |
setCompilationUnit(CompilationUnit compilationUnit) |
This field used for type derivation Check IfStatement matched pattern: Object var1; if (!(var1 instanceOf Runnable)){ return } // Here var1 instance of Runnable
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.
Whenever a method using a closure as argument (typically, "with") is detected, this list is updated with the receiver type of the with method.
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.
The type of the last encountered "it" implicit parameter.
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.
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
Returns the binary expression which is on the top of the stack, or null if there's no such element.
Returns the current stack of enclosing binary expressions. The first element is the top of the stack.
Returns the class node which is on the top of the stack, or null if there's no such element.
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 the closure expression which is on the top of the stack, or null if there's no such element.
Returns the current stack of enclosing closure expressions. The first element is the top of the stack.
Returns the method node which is on the top of the stack, or null if there's no such element.
Returns the method call which is on the top of the stack, or null if there's no such element.
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 the current stack of enclosing methods. The first element is the top of the stack, that is to say the last visited method.
Returns the switch statement which is on the top of the stack, or null if there's no such element.
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.
Pops a binary expression from the binary expression stack.
Pops a class from the enclosing classes stack.
Pops a closure expression from the closure expression stack.
Pops a method from the enclosing methods stack.
Pops a method call from the enclosing method call stack.
Pops a switch statement from the enclosing switch statements stack.
Pushes a binary expression into the binary expression stack.
Pushes a class into the classes stack.
Pushes a closure expression into the closure expression stack.
Pushes a method into the method stack.
Pushes a method call into the method call stack.
call
- the call expression to be pushed, either a MethodCallExpression or a StaticMethodCallExpressionPushes a switch statement into the switch statement stack.
Copyright © 2003-2021 The Apache Software Foundation. All rights reserved.