public class NodeTraversal extends Object
Modifier and Type | Class and Description |
---|---|
static class |
NodeTraversal.AbstractModuleCallback
Abstract callback that knows when goog.modules (and in the future ES6 modules) are entered
and exited.
|
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
|
Constructor and Description |
---|
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.
|
Scope |
getClosestHoistScope() |
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.
|
TypedScope |
getTypedScope() |
boolean |
inFunctionBlockScope()
Determines whether the traversal is currently in the scope of the block of a function.
|
boolean |
inGlobalHoistScope()
Determines whether the hoist scope of the current traversal is global.
|
boolean |
inGlobalScope()
Determines whether the traversal is currently in the global scope.
|
boolean |
inModuleHoistScope()
Determines whether the hoist scope of the current traversal is global.
|
boolean |
inModuleScope()
Determines whether the traversal is currently in the global scope.
|
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)
|
void |
reportCodeChange() |
void |
reportCodeChange(Node n) |
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.
|
static void |
traverseEs6(AbstractCompiler compiler,
Node root,
NodeTraversal.Callback cb)
Traverses using the ES6SyntacticScopeCreator
|
void |
traverseFunctionOutOfBand(Node node,
Scope scope)
Traverse a function out-of-band of normal traversal.
|
static void |
traverseRootsEs6(AbstractCompiler compiler,
NodeTraversal.Callback cb,
Node externs,
Node root) |
static void |
traverseRootsTyped(AbstractCompiler compiler,
NodeTraversal.Callback cb,
Node externs,
Node root) |
static void |
traverseTyped(AbstractCompiler compiler,
Node root,
NodeTraversal.Callback cb) |
public NodeTraversal(AbstractCompiler compiler, NodeTraversal.Callback cb, com.google.javascript.jscomp.ScopeCreator scopeCreator)
public void traverse(Node root)
public void traverseFunctionOutOfBand(Node node, Scope scope)
node
- The function node.scope
- The scope the function is contained in. Does not fire enter/exit
callback events for this scope.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. Passes that do cross-scope modifications call Compiler.reportChangeToEnclosingScope(Node n).
public static void traverseEs6(AbstractCompiler compiler, Node root, NodeTraversal.Callback cb)
public static void traverseTyped(AbstractCompiler compiler, Node root, NodeTraversal.Callback cb)
public static void traverseRootsEs6(AbstractCompiler compiler, NodeTraversal.Callback cb, Node externs, Node root)
public static void traverseRootsTyped(AbstractCompiler compiler, NodeTraversal.Callback cb, Node externs, Node root)
public Node getEnclosingFunction()
public Scope getScope()
public Scope getClosestHoistScope()
public TypedScope getTypedScope()
public ControlFlowGraph<Node> getControlFlowGraph()
public Node getScopeRoot()
public boolean inGlobalScope()
public boolean inFunctionBlockScope()
public boolean inGlobalHoistScope()
public boolean inModuleScope()
public boolean inModuleHoistScope()
public void report(Node n, DiagnosticType diagnosticType, String... arguments)
public void reportCodeChange()
public void reportCodeChange(Node n)
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-2017 Google. All Rights Reserved.