public class NodeTraversal extends Object
Modifier and Type | Class and Description |
---|---|
static class |
NodeTraversal.AbstractNodeTypePruningCallback
Abstract callback to visit a pruned set of nodes.
|
static class |
NodeTraversal.AbstractPostOrderCallback
Abstract callback to visit all nodes in postorder.
|
static class |
NodeTraversal.AbstractPreOrderCallback
Abstract callback to visit all nodes in preorder.
|
static class |
NodeTraversal.AbstractScopedCallback
Abstract scoped callback to visit all nodes in postorder.
|
static class |
NodeTraversal.AbstractShallowCallback
Abstract callback to visit all nodes but not traverse into function
bodies.
|
static class |
NodeTraversal.AbstractShallowStatementCallback
Abstract callback to visit all structure and statement nodes but doesn't
traverse into functions or expressions.
|
static interface |
NodeTraversal.Callback
Callback for tree-based traversals
|
static interface |
NodeTraversal.FunctionCallback
Callback for passes that iterate over a list of functions
|
static interface |
NodeTraversal.ScopedCallback
Callback that also knows about scope changes
|
Modifier and Type | Field and Description |
---|---|
static DiagnosticType |
NODE_TRAVERSAL_ERROR |
Constructor and Description |
---|
NodeTraversal(AbstractCompiler compiler,
NodeTraversal.Callback cb)
Creates a node traversal using the specified callback interface.
|
NodeTraversal(AbstractCompiler compiler,
NodeTraversal.Callback cb,
com.google.javascript.jscomp.ScopeCreator scopeCreator)
Creates a node traversal using the specified callback interface
and the scope creator.
|
Modifier and Type | Method and Description |
---|---|
int |
getCharno()
Gets the current char number, or zero if it cannot be determined.
|
AbstractCompiler |
getCompiler() |
ControlFlowGraph<Node> |
getControlFlowGraph()
Gets the control flow graph for the current JS scope.
|
Node |
getCurrentNode()
Returns the node currently being traversed.
|
Node |
getEnclosingFunction()
Examines the functions stack for the last instance of a function node.
|
CompilerInput |
getInput()
Gets the current input source.
|
int |
getLineNumber()
Gets the current line number, or zero if it cannot be determined.
|
JSModule |
getModule()
Gets the current input module.
|
Scope |
getScope()
Gets the current scope.
|
Node |
getScopeRoot()
Returns the current scope's root.
|
String |
getSourceName()
Gets the current input source name.
|
boolean |
hasScope() |
JSError |
makeError(Node n,
CheckLevel level,
DiagnosticType type,
String... arguments)
Creates a JSError during NodeTraversal.
|
JSError |
makeError(Node n,
DiagnosticType type,
String... arguments)
Creates a JSError during NodeTraversal.
|
void |
report(Node n,
DiagnosticType diagnosticType,
String... arguments)
Reports a diagnostic (error or warning)
|
static void |
traverse(AbstractCompiler compiler,
Node root,
NodeTraversal.Callback cb)
Traverses a node recursively.
|
void |
traverse(Node root)
Traverses a parse tree recursively.
|
static void |
traverseChangedFunctions(AbstractCompiler compiler,
NodeTraversal.FunctionCallback callback)
Traversal for passes that work only on changed functions.
|
protected void |
traverseInnerNode(Node node,
Node parent,
Scope refinedScope)
Traverses an inner node recursively with a refined scope.
|
static void |
traverseRoots(AbstractCompiler compiler,
List<Node> roots,
NodeTraversal.Callback cb)
Traverses a list of node trees.
|
static void |
traverseRoots(AbstractCompiler compiler,
NodeTraversal.Callback cb,
Node... roots) |
void |
traverseRoots(List<Node> roots) |
void |
traverseRoots(Node... roots) |
public static final DiagnosticType NODE_TRAVERSAL_ERROR
public NodeTraversal(AbstractCompiler compiler, NodeTraversal.Callback cb)
public NodeTraversal(AbstractCompiler compiler, NodeTraversal.Callback cb, com.google.javascript.jscomp.ScopeCreator scopeCreator)
public void traverse(Node root)
public void traverseRoots(Node... roots)
protected void traverseInnerNode(Node node, Node parent, Scope refinedScope)
null
parent (i.e. all nodes except the
root).node
- the node to traverseparent
- the node's parent, it may not be null
refinedScope
- the refined scope of the scope currently at the top of
the scope stack or in trivial cases that very scope or null
public AbstractCompiler getCompiler()
public int getLineNumber()
public int getCharno()
public String getSourceName()
public CompilerInput getInput()
public JSModule getModule()
public Node getCurrentNode()
public static void traverseChangedFunctions(AbstractCompiler compiler, NodeTraversal.FunctionCallback callback)
Most changes are reported with calls to Compiler.reportCodeChange(), which doesn't know which scope changed. We keep track of the current scope by calling Compiler.setScope inside pushScope and popScope. The automatic tracking can be wrong in rare cases when a pass changes scope w/out causing a call to pushScope or popScope. It's very hard to find the places where this happens unless a bug is triggered. Passes that do cross-scope modifications call Compiler.reportChangeToEnclosingScope(Node n).
public static void traverse(AbstractCompiler compiler, Node root, NodeTraversal.Callback cb)
public static void traverseRoots(AbstractCompiler compiler, List<Node> roots, NodeTraversal.Callback cb)
public static void traverseRoots(AbstractCompiler compiler, NodeTraversal.Callback cb, Node... roots)
public Node getEnclosingFunction()
public Scope getScope()
public ControlFlowGraph<Node> getControlFlowGraph()
public Node getScopeRoot()
public boolean hasScope()
public void report(Node n, DiagnosticType diagnosticType, String... arguments)
public JSError makeError(Node n, CheckLevel level, DiagnosticType type, String... arguments)
n
- Determines the line and char position within the source file nametype
- The DiagnosticTypearguments
- Arguments to be incorporated into the messagepublic JSError makeError(Node n, DiagnosticType type, String... arguments)
n
- Determines the line and char position within the source file nametype
- The DiagnosticTypearguments
- Arguments to be incorporated into the messageCopyright © 2009-2015 Google. All Rights Reserved.