Package org.codehaus.groovy.transform.stc

# 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 final 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`
`protected final LinkedList<BinaryExpression>`
`enclosingBinaryExpressions`
`protected final LinkedList<ClassNode>`
`enclosingClassNodes`
`protected final LinkedList<TypeCheckingContext.EnclosingClosure>`
`enclosingClosures`
`protected final LinkedList<Expression>`
`enclosingMethodCalls`
`protected final LinkedList<MethodNode>`
`enclosingMethods`
`protected final 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 final Set<Long>`
`reportedErrors`
`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.
`protected SourceUnit`
`source`
`protected Stack<Map<Object,List<ClassNode>>>`
`temporaryIfBranchTypeInformation`
Stores information which is only valid in the "if" branch of an if-then-else statement.
`protected final StaticTypeCheckingVisitor`
`visitor`

## Constructor Summary

Constructors
Constructor
Description
`TypeCheckingContext(StaticTypeCheckingVisitor staticTypeCheckingVisitor)`

## Method Summary

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 classes.
`List<MethodNode>`
`getEnclosingMethods()`
Returns the current stack of enclosing methods.
`ErrorCollector`
`getErrorCollector()`
`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.
`MethodNode`
`popEnclosingMethod()`
Pops a method from the enclosing methods stack.
`Expression`
`popEnclosingMethodCall()`
Pops a method call from the enclosing method call 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.
`ErrorCollector`
`pushErrorCollector()`
`void`
`pushErrorCollector(ErrorCollector collector)`
`void`
`pushTemporaryTypeInfo()`
`void`
`setCompilationUnit(CompilationUnit compilationUnit)`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### source

protected SourceUnit source

### methodsToBeVisited

protected Set<MethodNode> methodsToBeVisited

### isInStaticContext

protected boolean isInStaticContext

### errorCollectors

protected final LinkedList<ErrorCollector> errorCollectors

### enclosingClassNodes

protected final LinkedList<ClassNode> enclosingClassNodes

### enclosingMethods

protected final LinkedList<MethodNode> enclosingMethods

### enclosingMethodCalls

protected final LinkedList<Expression> enclosingMethodCalls

### enclosingClosures

protected final 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 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, String)

### 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

### 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.

### controlStructureVariables

protected Map<Parameter,ClassNode> controlStructureVariables

### reportedErrors

protected final Set<Long> reportedErrors

### enclosingBinaryExpressions

protected final LinkedList<BinaryExpression> enclosingBinaryExpressions

### visitor

protected final StaticTypeCheckingVisitor visitor

### compilationUnit

protected CompilationUnit compilationUnit

## Constructor Details

### TypeCheckingContext

public TypeCheckingContext(StaticTypeCheckingVisitor staticTypeCheckingVisitor)

## Method Details

### 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 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 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.

### 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.

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 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()

### pushEnclosingMethodCall

public void pushEnclosingMethodCall(Expression call)
Pushes a method call into the method call stack.

Parameters:
  `call` - the call expression to be pushed, either a `MethodCallExpression` or a `StaticMethodCallExpression`

### 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 List<Expression> getEnclosingMethodCalls()
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.

### getErrorCollectors

public 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()