45
45
*/
46
46
public class NameBasedDefinitionProvider implements DefinitionProvider , CompilerPass {
47
47
protected final Multimap <String , Definition > nameDefinitionMultimap = LinkedHashMultimap .create ();
48
- protected final Map <Node , DefinitionSite > definitionSiteMap = new LinkedHashMap <>();
48
+ protected final Map <Node , DefinitionSite > definitionNodeByDefinitionSite = new LinkedHashMap <>();
49
49
protected final AbstractCompiler compiler ;
50
50
51
51
protected boolean hasProcessBeenRun = false ;
@@ -66,7 +66,8 @@ public void process(Node externs, Node source) {
66
66
@ Override
67
67
public Collection <Definition > getDefinitionsReferencedAt (Node useSite ) {
68
68
Preconditions .checkState (hasProcessBeenRun , "The process was not run" );
69
- if (definitionSiteMap .containsKey (useSite )) {
69
+ Preconditions .checkArgument (useSite .isGetProp () || useSite .isName ());
70
+ if (definitionNodeByDefinitionSite .containsKey (useSite )) {
70
71
return null ;
71
72
}
72
73
@@ -80,14 +81,9 @@ public Collection<Definition> getDefinitionsReferencedAt(Node useSite) {
80
81
String name = getSimplifiedName (useSite );
81
82
if (name != null ) {
82
83
Collection <Definition > defs = nameDefinitionMultimap .get (name );
83
- if (!defs .isEmpty ()) {
84
- return defs ;
85
- } else {
86
- return null ;
87
- }
88
- } else {
89
- return null ;
84
+ return defs .isEmpty () ? null : defs ;
90
85
}
86
+ return null ;
91
87
}
92
88
93
89
private class DefinitionGatheringCallback implements Callback {
@@ -157,7 +153,7 @@ public void visit(NodeTraversal traversal, Node node, Node parent) {
157
153
}
158
154
159
155
nameDefinitionMultimap .put (name , def );
160
- definitionSiteMap .put (
156
+ definitionNodeByDefinitionSite .put (
161
157
node ,
162
158
new DefinitionSite (
163
159
node , def , traversal .getModule (), traversal .inGlobalScope (), inExterns ));
@@ -190,7 +186,7 @@ public void visit(NodeTraversal traversal, Node node, Node parent) {
190
186
// Incomplete definition
191
187
Definition definition = new ExternalNameOnlyDefinition (node );
192
188
nameDefinitionMultimap .put (name , definition );
193
- definitionSiteMap .put (
189
+ definitionNodeByDefinitionSite .put (
194
190
node ,
195
191
new DefinitionSite (
196
192
node , definition , traversal .getModule (), traversal .inGlobalScope (), inExterns ));
@@ -212,7 +208,7 @@ private boolean jsdocContainsDeclarations(Node node) {
212
208
* higher chances of name collisions.
213
209
*
214
210
* <p>TODO(user) revisit. it would be helpful to at least use fully qualified names in the case of
215
- * namespaces. Might not matter as much if this pass runs after "collapsing properties" .
211
+ * namespaces. Might not matter as much if this pass runs after {@link CollapseProperties} .
216
212
*/
217
213
protected static String getSimplifiedName (Node node ) {
218
214
if (node .isName ()) {
@@ -235,12 +231,13 @@ protected static String getSimplifiedName(Node node) {
235
231
* @return definition site collection.
236
232
*/
237
233
public Collection <DefinitionSite > getDefinitionSites () {
238
- return definitionSiteMap .values ();
234
+ Preconditions .checkState (hasProcessBeenRun , "The process was not run" );
235
+ return definitionNodeByDefinitionSite .values ();
239
236
}
240
237
241
238
public DefinitionSite getDefinitionForFunction (Node function ) {
242
239
Preconditions .checkState (hasProcessBeenRun , "The process was not run" );
243
240
Preconditions .checkState (function .isFunction ());
244
- return definitionSiteMap .get (NodeUtil .getNameNode (function ));
241
+ return definitionNodeByDefinitionSite .get (NodeUtil .getNameNode (function ));
245
242
}
246
243
}
0 commit comments