private class PureFunctionIdentifier.FunctionAnalyzer extends java.lang.Object implements NodeTraversal.ScopedCallback
Modifier and Type | Field and Description |
---|---|
private boolean |
inExterns |
Constructor and Description |
---|
FunctionAnalyzer(boolean inExterns) |
Modifier and Type | Method and Description |
---|---|
void |
enterScope(NodeTraversal t)
Called immediately after entering a new scope.
|
void |
exitScope(NodeTraversal t)
Called immediately before exiting a scope.
|
private JSDocInfo |
getJSDocInfoForFunction(Node node,
Node parent,
Node gramp)
Get the doc info associated with the function.
|
private boolean |
hasNoSideEffectsAnnotation(JSDocInfo docInfo)
Get the value of the @nosideeffects annotation stored in the
doc info.
|
private boolean |
hasSideEffectsArgumentsAnnotation(JSDocInfo docInfo) |
private boolean |
hasSideEffectsThisAnnotation(JSDocInfo docInfo)
Get the value of the @modifies{this} annotation stored in the
doc info.
|
private boolean |
isLocalValueType(JSType jstype) |
boolean |
shouldTraverse(NodeTraversal traversal,
Node node,
Node parent)
Visits a node in pre order (before visiting its children) and decides
whether this node's children should be traversed.
|
private boolean |
varDeclaredInDifferentFunction(Var v,
Scope scope) |
void |
visit(NodeTraversal traversal,
Node node,
Node parent)
Visits a node in postorder (after its children have been visited).
|
private void |
visitAssignmentOrUnaryOperator(PureFunctionIdentifier.FunctionInformation sideEffectInfo,
Scope scope,
Node op,
Node lhs,
Node rhs)
Record information about the side effects caused by an
assignment or mutating unary operator.
|
private void |
visitCall(PureFunctionIdentifier.FunctionInformation sideEffectInfo,
Node node)
Record information about a call site.
|
private void |
visitFunction(NodeTraversal traversal,
Node node,
Node parent,
Node gramp)
Record function and check for @nosideeffects annotations.
|
private void |
visitThrow(PureFunctionIdentifier.FunctionInformation sideEffectInfo)
Record that the enclosing function throws.
|
public boolean shouldTraverse(NodeTraversal traversal, Node node, Node parent)
NodeTraversal.Callback
Visits a node in pre order (before visiting its children) and decides
whether this node's children should be traversed. If children are
traversed, they will be visited by
NodeTraversal.Callback.visit(NodeTraversal, Node, Node)
in postorder.
Implementations can have side effects (e.g. modifying the parse tree).
shouldTraverse
in interface NodeTraversal.Callback
public void visit(NodeTraversal traversal, Node node, Node parent)
NodeTraversal.Callback
Visits a node in postorder (after its children have been visited).
A node is visited only if all its parents should be traversed
(NodeTraversal.Callback.shouldTraverse(NodeTraversal, Node, Node)
).
Implementations can have side effects (e.g. modifying the parse tree).
visit
in interface NodeTraversal.Callback
public void enterScope(NodeTraversal t)
NodeTraversal.ScopedCallback
enterScope
in interface NodeTraversal.ScopedCallback
public void exitScope(NodeTraversal t)
NodeTraversal.ScopedCallback
exitScope
in interface NodeTraversal.ScopedCallback
private void visitAssignmentOrUnaryOperator(PureFunctionIdentifier.FunctionInformation sideEffectInfo, Scope scope, Node op, Node lhs, Node rhs)
op
- operation being performed.lhs
- The store location (name or get) being operated on.rhs
- The right have value, if any.private void visitCall(PureFunctionIdentifier.FunctionInformation sideEffectInfo, Node node)
private void visitFunction(NodeTraversal traversal, Node node, Node parent, Node gramp)
private boolean isLocalValueType(JSType jstype)
private void visitThrow(PureFunctionIdentifier.FunctionInformation sideEffectInfo)
private JSDocInfo getJSDocInfoForFunction(Node node, Node parent, Node gramp)
private boolean hasNoSideEffectsAnnotation(JSDocInfo docInfo)
private boolean hasSideEffectsThisAnnotation(JSDocInfo docInfo)
private boolean hasSideEffectsArgumentsAnnotation(JSDocInfo docInfo)