Class TypeCheckingContext


  • public class TypeCheckingContext
    extends Object
    • Field Detail

      • 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.
      • 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.
      • reportedErrors

        protected final Set<Long> reportedErrors
    • Method Detail

      • setCompilationUnit

        public void setCompilationUnit​(CompilationUnit compilationUnit)
      • pushErrorCollector

        public void pushErrorCollector​(ErrorCollector collector)
      • 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.
      • 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.
      • 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.