Skip to content

Commit 593daf0

Browse files
committed
Cache PrefixElement(s) in LibraryElementImpl.
This makes DDC compilation about 5% faster. R=brianwilkerson@google.com BUG= Review URL: https://codereview.chromium.org/1997183002 .
1 parent 41f8eae commit 593daf0

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

pkg/analyzer/lib/src/dart/element/element.dart

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3750,7 +3750,7 @@ class ImportElementImpl extends UriReferencedElementImpl
37503750

37513751
PrefixElement get prefix {
37523752
if (_unlinkedImport != null) {
3753-
if (_unlinkedImport.prefixReference != 0) {
3753+
if (_unlinkedImport.prefixReference != 0 && _prefix == null) {
37543754
LibraryElementImpl library = enclosingElement as LibraryElementImpl;
37553755
_prefix = new PrefixElementImpl.forSerialized(_unlinkedImport, library);
37563756
}
@@ -3980,6 +3980,11 @@ class LibraryElementImpl extends ElementImpl implements LibraryElement {
39803980
*/
39813981
int _resolutionCapabilities = 0;
39823982

3983+
/**
3984+
* The cached list of prefixes.
3985+
*/
3986+
List<PrefixElement> _prefixes;
3987+
39833988
/**
39843989
* Initialize a newly created library element in the given [context] to have
39853990
* the given [name] and [offset].
@@ -4168,6 +4173,7 @@ class LibraryElementImpl extends ElementImpl implements LibraryElement {
41684173
}
41694174
}
41704175
this._imports = imports;
4176+
this._prefixes = null;
41714177
}
41724178

41734179
@override
@@ -4340,14 +4346,17 @@ class LibraryElementImpl extends ElementImpl implements LibraryElement {
43404346

43414347
@override
43424348
List<PrefixElement> get prefixes {
4343-
HashSet<PrefixElement> prefixes = new HashSet<PrefixElement>();
4344-
for (ImportElement element in _imports) {
4345-
PrefixElement prefix = element.prefix;
4346-
if (prefix != null) {
4347-
prefixes.add(prefix);
4349+
if (_prefixes == null) {
4350+
HashSet<PrefixElement> prefixes = new HashSet<PrefixElement>();
4351+
for (ImportElement element in _imports) {
4352+
PrefixElement prefix = element.prefix;
4353+
if (prefix != null) {
4354+
prefixes.add(prefix);
4355+
}
43484356
}
4357+
_prefixes = prefixes.toList();
43494358
}
4350-
return new List.from(prefixes);
4359+
return _prefixes;
43514360
}
43524361

43534362
@override

0 commit comments

Comments
 (0)