Package com.google.javascript.jscomp
Class TypeCheck
- java.lang.Object
-
- com.google.javascript.jscomp.TypeCheck
-
- All Implemented Interfaces:
CompilerPass
,NodeTraversal.Callback
public final class TypeCheck extends java.lang.Object implements NodeTraversal.Callback, CompilerPass
Checks the types of JS expressions against any declared type information.
-
-
Field Summary
Fields Modifier and Type Field Description static DiagnosticType
INEXISTENT_PROPERTY
protected static DiagnosticType
NOT_A_CONSTRUCTOR
static DiagnosticType
STRICT_INEXISTENT_PROPERTY
static DiagnosticType
STRICT_INEXISTENT_UNION_PROPERTY
-
Constructor Summary
Constructors Constructor Description TypeCheck(AbstractCompiler compiler, ReverseAbstractInterpreter reverseInterpreter, JSTypeRegistry typeRegistry)
TypeCheck(AbstractCompiler compiler, ReverseAbstractInterpreter reverseInterpreter, JSTypeRegistry typeRegistry, TypedScope topScope, com.google.javascript.jscomp.TypedScopeCreator scopeCreator)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
process(Node externsRoot, Node jsRoot)
Main entry point for this phase of processing.TypedScope
processForTesting(Node externsRoot, Node jsRoot)
Main entry point of this phase for testing code.boolean
shouldTraverse(NodeTraversal t, Node n, Node parent)
Visits a node in preorder (before its children) and decides whether its children should be traversed.void
visit(NodeTraversal t, Node n, Node parent)
This is the meat of the type checking.
-
-
-
Field Detail
-
INEXISTENT_PROPERTY
public static final DiagnosticType INEXISTENT_PROPERTY
-
STRICT_INEXISTENT_PROPERTY
public static final DiagnosticType STRICT_INEXISTENT_PROPERTY
-
STRICT_INEXISTENT_UNION_PROPERTY
public static final DiagnosticType STRICT_INEXISTENT_UNION_PROPERTY
-
NOT_A_CONSTRUCTOR
protected static final DiagnosticType NOT_A_CONSTRUCTOR
-
-
Constructor Detail
-
TypeCheck
public TypeCheck(AbstractCompiler compiler, ReverseAbstractInterpreter reverseInterpreter, JSTypeRegistry typeRegistry, TypedScope topScope, com.google.javascript.jscomp.TypedScopeCreator scopeCreator)
-
TypeCheck
public TypeCheck(AbstractCompiler compiler, ReverseAbstractInterpreter reverseInterpreter, JSTypeRegistry typeRegistry)
-
-
Method Detail
-
process
public void process(Node externsRoot, Node jsRoot)
Main entry point for this phase of processing. This follows the pattern for JSCompiler phases.- Specified by:
process
in interfaceCompilerPass
- Parameters:
externsRoot
- The root of the externs parse tree.jsRoot
- The root of the input parse tree to be checked.
-
processForTesting
public TypedScope processForTesting(Node externsRoot, Node jsRoot)
Main entry point of this phase for testing code.- Parameters:
externsRoot
- may be null or a ROOT node. If null the externs are not typechecked. Note: the externs node must always exist in the AST, even if not typechecked.jsRoot
- must be a ROOT node and the second child of the global ROOT.
-
shouldTraverse
public boolean shouldTraverse(NodeTraversal t, Node n, Node parent)
Description copied from interface:NodeTraversal.Callback
Visits a node in preorder (before its children) and decides whether its children should be traversed. If the children should be traversed, they will be visited byNodeTraversal.Callback.shouldTraverse(NodeTraversal, Node, Node)
in preorder and byNodeTraversal.Callback.visit(NodeTraversal, Node, Node)
in postorder.Siblings are always visited left-to-right.
Implementations can have side-effects (e.g. modify the parse tree). Removing the current node is legal, but removing or reordering nodes above the current node may cause nodes to be visited twice or not at all.
- Specified by:
shouldTraverse
in interfaceNodeTraversal.Callback
- Parameters:
t
- The current traversal.n
- The current node.parent
- The parent of the current node.- Returns:
- whether the children of this node should be visited
-
visit
public void visit(NodeTraversal t, Node n, Node parent)
This is the meat of the type checking. It is basically one big switch, with each case representing one type of parse tree node. The individual cases are usually pretty straightforward.- Specified by:
visit
in interfaceNodeTraversal.Callback
- Parameters:
t
- The node traversal object that supplies context, such as the scope chain to use in name lookups as well as error reporting.n
- The node being visited.parent
- The parent of the node n.
-
-