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 classTypeCheckingContext.EnclosingClosureRepresents the context of an enclosing closure. -
Field Summary
Fields Modifier and Type Field Description protected java.util.Set<MethodNode>alreadyVisitedMethodsprotected java.util.IdentityHashMap<BlockStatement,java.util.Map<VariableExpression,java.util.List<ClassNode>>>blockStatements2TypesDeprecated.protected java.util.Map<VariableExpression,java.util.List<ClassNode>>closureSharedVariablesAssignmentTypesA map used to store every type used in closure shared variable assignments.protected CompilationUnitcompilationUnitprotected java.util.Map<Parameter,ClassNode>controlStructureVariablesprotected org.codehaus.groovy.transform.stc.DelegationMetadatadelegationMetadataWhenever a method using a closure as argument (typically, "with") is detected, this list is updated with the receiver type of the with method.protected java.util.LinkedList<BinaryExpression>enclosingBinaryExpressionsprotected java.util.LinkedList<BlockStatement>enclosingBlocksDeprecated.protected java.util.LinkedList<ClassNode>enclosingClassNodesprotected java.util.LinkedList<TypeCheckingContext.EnclosingClosure>enclosingClosuresprotected java.util.LinkedList<Expression>enclosingMethodCallsprotected java.util.LinkedList<MethodNode>enclosingMethodsprotected java.util.LinkedList<ErrorCollector>errorCollectorsprotected java.util.Map<VariableExpression,java.util.List<ClassNode>>ifElseForWhileAssignmentTrackerThis field is used to track assignments in if/else branches, for loops and while loops.protected booleanisInStaticContextprotected ClassNodelastImplicitItTypeThe type of the last encountered "it" implicit parameter.protected java.util.Set<MethodNode>methodsToBeVisitedprotected java.util.Set<java.lang.Long>reportedErrorsprotected java.util.LinkedHashSet<org.codehaus.groovy.transform.stc.SecondPassExpression>secondPassExpressionsSome expressions need to be visited twice, because type information may be insufficient at some point.protected SourceUnitsourceprotected java.util.LinkedList<SwitchStatement>switchStatementsprotected java.util.Stack<java.util.Map<java.lang.Object,java.util.List<ClassNode>>>temporaryIfBranchTypeInformationStores information which is only valid in the "if" branch of an if-then-else statement.protected StaticTypeCheckingVisitorvisitor -
Constructor Summary
Constructors Constructor Description TypeCheckingContext(StaticTypeCheckingVisitor visitor) -
Method Summary
Modifier and Type Method Description CompilationUnitgetCompilationUnit()BinaryExpressiongetEnclosingBinaryExpression()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.ClassNodegetEnclosingClassNode()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.EnclosingClosuregetEnclosingClosure()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.MethodNodegetEnclosingMethod()Returns the method node which is on the top of the stack, or null if there's no such element.ExpressiongetEnclosingMethodCall()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.SwitchStatementgetEnclosingSwitchStatement()Returns the switch statement which is on the top of the stack, or null if there's no such element.java.util.List<SwitchStatement>getEnclosingSwitchStatements()Returns the current stack of enclosing switch statements.ErrorCollectorgetErrorCollector()java.util.List<ErrorCollector>getErrorCollectors()SourceUnitgetSource()booleanisTargetOfEnclosingAssignment(Expression expression)BinaryExpressionpopEnclosingBinaryExpression()Pops a binary expression from the binary expression stack.ClassNodepopEnclosingClassNode()Pops a class from the enclosing classes stack.TypeCheckingContext.EnclosingClosurepopEnclosingClosure()Pops a closure expression from the closure expression stack.MethodNodepopEnclosingMethod()Pops a method from the enclosing methods stack.ExpressionpopEnclosingMethodCall()Pops a method call from the enclosing method call stack.SwitchStatementpopEnclosingSwitchStatement()Pops a switch statement from the enclosing switch statements stack.ErrorCollectorpopErrorCollector()voidpopTemporaryTypeInfo()voidpushEnclosingBinaryExpression(BinaryExpression binaryExpression)Pushes a binary expression into the binary expression stack.voidpushEnclosingClassNode(ClassNode classNode)Pushes a class into the classes stack.voidpushEnclosingClosureExpression(ClosureExpression closureExpression)Pushes a closure expression into the closure expression stack.voidpushEnclosingMethod(MethodNode methodNode)Pushes a method into the method stack.voidpushEnclosingMethodCall(Expression call)Pushes a method call into the method call stack.voidpushEnclosingSwitchStatement(SwitchStatement switchStatement)Pushes a switch statement into the switch statement stack.ErrorCollectorpushErrorCollector()voidpushErrorCollector(ErrorCollector collector)voidpushTemporaryTypeInfo()voidsetCompilationUnit(CompilationUnit compilationUnit)Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Field Details
-
visitor
-
source
-
compilationUnit
-
errorCollectors
-
temporaryIfBranchTypeInformation
protected java.util.Stack<java.util.Map<java.lang.Object,java.util.List<ClassNode>>> temporaryIfBranchTypeInformationStores 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 delegationMetadataWhenever 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
The type of the last encountered "it" implicit parameter. -
methodsToBeVisited
-
ifElseForWhileAssignmentTracker
protected java.util.Map<VariableExpression,java.util.List<ClassNode>> ifElseForWhileAssignmentTrackerThis 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. -
blockStatements2Types
@Deprecated protected final java.util.IdentityHashMap<BlockStatement,java.util.Map<VariableExpression,java.util.List<ClassNode>>> blockStatements2TypesDeprecated.This field used for type derivation Check IfStatement matched pattern: Object var1; if (!(var1 instanceOf Runnable)){ return } // Here var1 instance of Runnable -
alreadyVisitedMethods
-
secondPassExpressions
protected final java.util.LinkedHashSet<org.codehaus.groovy.transform.stc.SecondPassExpression> secondPassExpressionsSome 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. -
controlStructureVariables
-
reportedErrors
protected final java.util.Set<java.lang.Long> reportedErrors -
enclosingClassNodes
-
enclosingMethods
-
enclosingMethodCalls
-
enclosingBlocks
Deprecated. -
switchStatements
-
enclosingClosures
-
enclosingBinaryExpressions
-
-
Constructor Details
-
TypeCheckingContext
-
-
Method Details
-
getSource
-
getCompilationUnit
-
setCompilationUnit
-
pushErrorCollector
-
pushErrorCollector
-
popErrorCollector
-
getErrorCollector
-
getErrorCollectors
-
pushTemporaryTypeInfo
public void pushTemporaryTypeInfo() -
popTemporaryTypeInfo
public void popTemporaryTypeInfo() -
pushEnclosingBinaryExpression
Pushes a binary expression into the binary expression stack. -
popEnclosingBinaryExpression
Pops a binary expression from the binary expression stack. -
getEnclosingBinaryExpression
Returns the binary expression which is on the top of the stack, or null if there's no such element. -
getEnclosingBinaryExpressionStack
Returns the current stack of enclosing binary expressions. The first element is the top of the stack. -
isTargetOfEnclosingAssignment
-
pushEnclosingClosureExpression
Pushes a closure expression into the closure expression stack. -
popEnclosingClosure
Pops a closure expression from the closure expression stack. -
getEnclosingClosure
Returns the closure expression which is on the top of the stack, or null if there's no such element. -
getEnclosingClosureStack
Returns the current stack of enclosing closure expressions. The first element is the top of the stack. -
pushEnclosingClassNode
Pushes a class into the classes stack. -
popEnclosingClassNode
Pops a class from the enclosing classes stack. -
getEnclosingClassNode
Returns the class node which is on the top of the stack, or null if there's no such element. -
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
Pushes a method into the method stack. -
popEnclosingMethod
Pops a method from the enclosing methods stack. -
getEnclosingMethod
Returns the method node which is on the top of the stack, or null if there's no such element. -
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
Pushes a method call into the method call stack.- Parameters:
call- the call expression to be pushed, either aMethodCallExpressionor aStaticMethodCallExpression
-
popEnclosingMethodCall
Pops a method call from the enclosing method call stack. -
getEnclosingMethodCall
Returns the method call which is on the top of the stack, or null if there's no such element. -
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
Pushes a switch statement into the switch statement stack. -
popEnclosingSwitchStatement
Pops a switch statement from the enclosing switch statements stack. -
getEnclosingSwitchStatement
Returns the switch statement which is on the top of the stack, or null if there's no such element. -
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.
-