@@ -137,7 +137,10 @@ class ImportsTracking {
137
137
138
138
class ImportsTrackingOfPrefix {
139
139
final PrefixScope scope;
140
- final Map <Element , List <LibraryImportElementImpl >> elementImports;
140
+
141
+ /// Key: an element.
142
+ /// Value: the imports that provide the element.
143
+ final Map <Element , List <LibraryImportElementImpl >> _elementImports = {};
141
144
142
145
/// Key: an import.
143
146
/// Value: used elements imported from the import.
@@ -159,8 +162,9 @@ class ImportsTrackingOfPrefix {
159
162
160
163
ImportsTrackingOfPrefix ({
161
164
required this .scope,
162
- required this .elementImports,
163
- });
165
+ }) {
166
+ _buildElementToImportsMap ();
167
+ }
164
168
165
169
/// The elements that are used from [import] .
166
170
Set <Element > elementsOf (LibraryImportElementImpl import) {
@@ -218,14 +222,14 @@ class ImportsTrackingOfPrefix {
218
222
}
219
223
220
224
// SAFETY: if we have `element`, it is from a local import.
221
- var imports = elementImports [element]! ;
225
+ var imports = _elementImports [element]! ;
222
226
for (var import in imports) {
223
227
(importToUsedElements[import] ?? = {}).add (element);
224
228
}
225
229
}
226
230
227
231
void notifyExtensionUsed (ExtensionElement element) {
228
- var imports = elementImports [element];
232
+ var imports = _elementImports [element];
229
233
if (imports != null ) {
230
234
for (var import in imports) {
231
235
(importToUsedElements[import] ?? = {}).add (element);
@@ -242,6 +246,21 @@ class ImportsTrackingOfPrefix {
242
246
void notifyPrefixUsedInCommentReference () {
243
247
hasPrefixUsedInCommentReference = true ;
244
248
}
249
+
250
+ void _buildElementToImportsMap () {
251
+ for (var import in scope._importElements) {
252
+ var importedLibrary = import.importedLibrary! ;
253
+ var elementFactory = importedLibrary.session.elementFactory;
254
+ var combinators = import.combinators.build ();
255
+ for (var exportedReference in importedLibrary.exportedReferences) {
256
+ var reference = exportedReference.reference;
257
+ if (combinators.allows (reference.name)) {
258
+ var element = elementFactory.elementOfReference (reference)! ;
259
+ (_elementImports[element] ?? = []).add (import);
260
+ }
261
+ }
262
+ }
263
+ }
245
264
}
246
265
247
266
/// The scope defined by an instance element.
@@ -482,7 +501,6 @@ class PrefixScope implements Scope {
482
501
final PrefixScope ? parent;
483
502
484
503
final List <LibraryImportElementImpl > _importElements = [];
485
- final Map <Element , List <LibraryImportElementImpl >> _elementImports = {};
486
504
487
505
final Map <String , Element > _getters = {};
488
506
final Map <String , Element > _setters = {};
@@ -512,7 +530,6 @@ class PrefixScope implements Scope {
512
530
if (combinators.allows (reference.name)) {
513
531
var element = elementFactory.elementOfReference (reference)! ;
514
532
if (_shouldAdd (importedLibrary, element)) {
515
- (_elementImports[element] ?? = []).add (import);
516
533
_add (
517
534
element,
518
535
importedLibrary.isFromDeprecatedExport (exportedReference),
@@ -534,7 +551,6 @@ class PrefixScope implements Scope {
534
551
ImportsTrackingOfPrefix importsTrackingInit () {
535
552
return _importsTracking = ImportsTrackingOfPrefix (
536
553
scope: this ,
537
- elementImports: _elementImports,
538
554
);
539
555
}
540
556
0 commit comments