class SimpleDefinitionFinder extends java.lang.Object implements CompilerPass, DefinitionProvider
DefinitionProvider
.
It treats all variable writes as happening in the global scope and
treats all objects as capable of having the same set of properties.
The current implementation only handles definitions whose right
hand side is an immutable value or function expression. All
complex definitions are treated as unknowns.Modifier and Type | Class and Description |
---|---|
private class |
SimpleDefinitionFinder.DefinitionGatheringCallback |
private class |
SimpleDefinitionFinder.UseSiteGatheringCallback |
Modifier and Type | Field and Description |
---|---|
private AbstractCompiler |
compiler |
private java.util.Map<Node,DefinitionSite> |
definitionSiteMap |
private boolean |
hasProcessBeenRun |
private com.google.common.collect.Multimap<java.lang.String,DefinitionsRemover.Definition> |
nameDefinitionMultimap |
private com.google.common.collect.Multimap<java.lang.String,UseSite> |
nameUseSiteMultimap |
Constructor and Description |
---|
SimpleDefinitionFinder(AbstractCompiler compiler) |
Modifier and Type | Method and Description |
---|---|
(package private) boolean |
canModifyDefinition(DefinitionsRemover.Definition definition) |
private DefinitionSite |
getDefinitionAt(Node node) |
(package private) DefinitionSite |
getDefinitionForFunction(Node function) |
java.util.Collection<DefinitionSite> |
getDefinitionSites()
Returns the collection of definition sites found during traversal.
|
java.util.Collection<DefinitionsRemover.Definition> |
getDefinitionsReferencedAt(Node useSite)
Returns a collection of definitions that characterize the
possible values of a variable or property.
|
(package private) static Node |
getNameNodeFromFunctionNode(Node function) |
private static java.lang.String |
getSimplifiedName(Node node)
Extract a name from a node.
|
(package private) java.util.Collection<UseSite> |
getUseSites(DefinitionsRemover.Definition definition)
Returns a collection of use sites that may refer to provided
definition.
|
(package private) static boolean |
isCallOrNewSite(UseSite use) |
private boolean |
isExported(DefinitionsRemover.Definition definition) |
(package private) static boolean |
isSimpleFunctionDeclaration(Node fn) |
void |
process(Node externs,
Node source)
Process the JS with root node root.
|
(package private) void |
removeReferences(Node node)
Traverse a node and its children and remove any references to from
the structures.
|
private final AbstractCompiler compiler
private final java.util.Map<Node,DefinitionSite> definitionSiteMap
private final com.google.common.collect.Multimap<java.lang.String,DefinitionsRemover.Definition> nameDefinitionMultimap
private final com.google.common.collect.Multimap<java.lang.String,UseSite> nameUseSiteMultimap
private boolean hasProcessBeenRun
public SimpleDefinitionFinder(AbstractCompiler compiler)
public java.util.Collection<DefinitionSite> getDefinitionSites()
private DefinitionSite getDefinitionAt(Node node)
DefinitionSite getDefinitionForFunction(Node function)
public java.util.Collection<DefinitionsRemover.Definition> getDefinitionsReferencedAt(Node useSite)
DefinitionProvider
getDefinitionsReferencedAt
in interface DefinitionProvider
public void process(Node externs, Node source)
CompilerPass
process
in interface CompilerPass
externs
- Top of external JS treesource
- Top of JS treejava.util.Collection<UseSite> getUseSites(DefinitionsRemover.Definition definition)
definition
- Definition of interest.private static java.lang.String getSimplifiedName(Node node)
static boolean isCallOrNewSite(UseSite use)
use
- A use site to check.boolean canModifyDefinition(DefinitionsRemover.Definition definition)
private boolean isExported(DefinitionsRemover.Definition definition)
static boolean isSimpleFunctionDeclaration(Node fn)
static Node getNameNodeFromFunctionNode(Node function)
void removeReferences(Node node)