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`
  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 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 final LinkedList<SwitchStatement>`
  `switchStatements`
  `protected Stack<Map<Object,List<ClassNode>>>`
  `temporaryIfBranchTypeInformation`
  Stores information which is valid in the "then" branch of an if-then-else statement.
  `protected final StaticTypeCheckingVisitor`
  `visitor`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `TypeCheckingContext(StaticTypeCheckingVisitor visitor)`

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

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

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

- ## Field Details

  - ### 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 valid in the "then" 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.

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

  - ### enclosingClassNodes

    protected final LinkedList<ClassNode> enclosingClassNodes

  - ### enclosingMethods

    protected final LinkedList<MethodNode> enclosingMethods

  - ### enclosingMethodCalls

    protected final LinkedList<Expression> enclosingMethodCalls

  - ### switchStatements

    protected final LinkedList<SwitchStatement> switchStatements

  - ### enclosingClosures

    protected final LinkedList<TypeCheckingContext.EnclosingClosure> enclosingClosures

  - ### enclosingBinaryExpressions

    protected final LinkedList<BinaryExpression> enclosingBinaryExpressions

- ## Constructor Details

  - ### TypeCheckingContext

    public TypeCheckingContext(StaticTypeCheckingVisitor visitor)

- ## Method Details

  - ### 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 a `MethodCallExpression` or a `StaticMethodCallExpression`

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