@@ -23,41 +23,60 @@ class LibraryManifest {
2323 /// This does not include names that are declared in this library.
2424 final Map <LookupName , ManifestItemId > reExportMap;
2525
26- /// The manifests of the top-level items.
27- final Map <LookupName , TopLevelItem > items;
28-
29- LibraryManifest ({required this .reExportMap, required this .items});
26+ final Map <LookupName , ClassItem > declaredClasses;
27+ final Map <LookupName , MixinItem > declaredMixins;
28+ final Map <LookupName , TopLevelGetterItem > declaredGetters;
29+ final Map <LookupName , TopLevelSetterItem > declaredSetters;
30+ final Map <LookupName , TopLevelFunctionItem > declaredFunctions;
31+
32+ LibraryManifest ({
33+ required this .reExportMap,
34+ required this .declaredClasses,
35+ required this .declaredMixins,
36+ required this .declaredGetters,
37+ required this .declaredSetters,
38+ required this .declaredFunctions,
39+ });
3040
3141 factory LibraryManifest .read (SummaryDataReader reader) {
3242 return LibraryManifest (
33- reExportMap: reader.readMap (
34- readKey: () => LookupName .read (reader),
35- readValue: () => ManifestItemId .read (reader),
43+ reExportMap: reader.readLookupNameToIdMap (),
44+ declaredClasses: reader.readLookupNameMap (
45+ readValue: () => ClassItem .read (reader),
46+ ),
47+ declaredMixins: reader.readLookupNameMap (
48+ readValue: () => MixinItem .read (reader),
49+ ),
50+ declaredGetters: reader.readLookupNameMap (
51+ readValue: () => TopLevelGetterItem .read (reader),
3652 ),
37- items: reader.readMap (
38- readKey: () => LookupName .read (reader),
39- readValue: () => TopLevelItem .read (reader),
53+ declaredSetters: reader.readLookupNameMap (
54+ readValue: () => TopLevelSetterItem .read (reader),
55+ ),
56+ declaredFunctions: reader.readLookupNameMap (
57+ readValue: () => TopLevelFunctionItem .read (reader),
4058 ),
4159 );
4260 }
4361
4462 /// Returns the ID of a top-level element either declared or re-exported,
4563 /// or `null` if there is no such element.
4664 ManifestItemId ? getExportedId (LookupName name) {
47- return items[name]? .id ?? reExportMap[name];
65+ return declaredClasses[name]? .id ??
66+ declaredMixins[name]? .id ??
67+ declaredGetters[name]? .id ??
68+ declaredSetters[name]? .id ??
69+ declaredFunctions[name]? .id ??
70+ reExportMap[name];
4871 }
4972
5073 void write (BufferedSink sink) {
51- sink.writeMap (
52- reExportMap,
53- writeKey: (lookupName) => lookupName.write (sink),
54- writeValue: (id) => id.write (sink),
55- );
56- sink.writeMap (
57- items,
58- writeKey: (lookupName) => lookupName.write (sink),
59- writeValue: (item) => item.write (sink),
60- );
74+ reExportMap.write (sink);
75+ declaredClasses.write (sink);
76+ declaredMixins.write (sink);
77+ declaredGetters.write (sink);
78+ declaredSetters.write (sink);
79+ declaredFunctions.write (sink);
6180 }
6281}
6382
@@ -119,7 +138,7 @@ class LibraryManifestBuilder {
119138
120139 void _addClass ({
121140 required EncodeContext encodingContext,
122- required Map <LookupName , TopLevelItem > newItems,
141+ required Map <LookupName , ClassItem > newItems,
123142 required ClassElementImpl2 element,
124143 required LookupName lookupName,
125144 }) {
@@ -374,7 +393,7 @@ class LibraryManifestBuilder {
374393
375394 void _addMixin ({
376395 required EncodeContext encodingContext,
377- required Map <LookupName , TopLevelItem > newItems,
396+ required Map <LookupName , MixinItem > newItems,
378397 required MixinElementImpl2 element,
379398 required LookupName lookupName,
380399 }) {
@@ -430,11 +449,8 @@ class LibraryManifestBuilder {
430449 // If not, then look into new manifest.
431450 if (id == null ) {
432451 var newManifest = newManifests[elementLibraryUri];
433- // Maybe declared in this library.
434- id ?? = newManifest? .items[name]? .id;
435- // Maybe exported from this library.
452+ id ?? = newManifest? .getExportedId (name);
436453 // TODO(scheglov): repeat for re-re-exports
437- id ?? = newManifest? .reExportMap[name];
438454 }
439455
440456 if (id == null ) {
@@ -448,7 +464,7 @@ class LibraryManifestBuilder {
448464
449465 void _addTopLevelFunction ({
450466 required EncodeContext encodingContext,
451- required Map <LookupName , TopLevelItem > newItems,
467+ required Map <LookupName , TopLevelFunctionItem > newItems,
452468 required TopLevelFunctionElementImpl element,
453469 required LookupName lookupName,
454470 }) {
@@ -464,7 +480,7 @@ class LibraryManifestBuilder {
464480
465481 void _addTopLevelGetter ({
466482 required EncodeContext encodingContext,
467- required Map <LookupName , TopLevelItem > newItems,
483+ required Map <LookupName , TopLevelGetterItem > newItems,
468484 required GetterElementImpl element,
469485 required LookupName lookupName,
470486 }) {
@@ -480,7 +496,7 @@ class LibraryManifestBuilder {
480496
481497 void _addTopLevelSetter ({
482498 required EncodeContext encodingContext,
483- required Map <LookupName , TopLevelItem > newItems,
499+ required Map <LookupName , TopLevelSetterItem > newItems,
484500 required SetterElementImpl element,
485501 required LookupName lookupName,
486502 }) {
@@ -525,7 +541,12 @@ class LibraryManifestBuilder {
525541
526542 for (var libraryElement in libraryElements) {
527543 var libraryUri = libraryElement.uri;
528- var newItems = < LookupName , TopLevelItem > {};
544+ var newClassItems = < LookupName , ClassItem > {};
545+ var newMixinItems = < LookupName , MixinItem > {};
546+ var newTopLevelGetters = < LookupName , TopLevelGetterItem > {};
547+ var newTopLevelSetters = < LookupName , TopLevelSetterItem > {};
548+ var newTopLevelFunctions = < LookupName , TopLevelFunctionItem > {};
549+
529550 for (var element in libraryElement.children2) {
530551 var lookupName = element.lookupName? .asLookupName;
531552 if (lookupName == null ) {
@@ -536,43 +557,50 @@ class LibraryManifestBuilder {
536557 case ClassElementImpl2 ():
537558 _addClass (
538559 encodingContext: encodingContext,
539- newItems: newItems ,
560+ newItems: newClassItems ,
540561 element: element,
541562 lookupName: lookupName,
542563 );
543564 case GetterElementImpl ():
544565 _addTopLevelGetter (
545566 encodingContext: encodingContext,
546- newItems: newItems ,
567+ newItems: newTopLevelGetters ,
547568 element: element,
548569 lookupName: lookupName,
549570 );
550571 case MixinElementImpl2 ():
551572 _addMixin (
552573 encodingContext: encodingContext,
553- newItems: newItems ,
574+ newItems: newMixinItems ,
554575 element: element,
555576 lookupName: lookupName,
556577 );
557578 case SetterElementImpl ():
558579 _addTopLevelSetter (
559580 encodingContext: encodingContext,
560- newItems: newItems ,
581+ newItems: newTopLevelSetters ,
561582 element: element,
562583 lookupName: lookupName,
563584 );
564585 case TopLevelFunctionElementImpl ():
565586 _addTopLevelFunction (
566587 encodingContext: encodingContext,
567- newItems: newItems ,
588+ newItems: newTopLevelFunctions ,
568589 element: element,
569590 lookupName: lookupName,
570591 );
571592 // TODO(scheglov): add remaining elements
572593 }
573594 }
574595
575- var newManifest = LibraryManifest (reExportMap: {}, items: newItems);
596+ var newManifest = LibraryManifest (
597+ reExportMap: {},
598+ declaredClasses: newClassItems,
599+ declaredMixins: newMixinItems,
600+ declaredGetters: newTopLevelGetters,
601+ declaredSetters: newTopLevelSetters,
602+ declaredFunctions: newTopLevelFunctions,
603+ );
576604 libraryElement.manifest = newManifest;
577605 newManifests[libraryUri] = newManifest;
578606 }
@@ -714,7 +742,15 @@ class LibraryManifestBuilder {
714742
715743 /// Returns the manifest from [inputManifests] , empty if absent.
716744 LibraryManifest _getInputManifest (Uri uri) {
717- return inputManifests[uri] ?? LibraryManifest (reExportMap: {}, items: {});
745+ return inputManifests[uri] ??
746+ LibraryManifest (
747+ reExportMap: {},
748+ declaredClasses: {},
749+ declaredMixins: {},
750+ declaredGetters: {},
751+ declaredSetters: {},
752+ declaredFunctions: {},
753+ );
718754 }
719755
720756 ManifestItemId _getInterfaceElementMemberId (ExecutableElementImpl2 element) {
@@ -861,8 +897,8 @@ class _LibraryMatch {
861897 required LookupName ? name,
862898 required ClassElementImpl2 element,
863899 }) {
864- var item = manifest.items [name];
865- if (item is ! ClassItem ) {
900+ var item = manifest.declaredClasses [name];
901+ if (item == null ) {
866902 return false ;
867903 }
868904
@@ -1074,8 +1110,8 @@ class _LibraryMatch {
10741110 required LookupName ? name,
10751111 required MixinElementImpl2 element,
10761112 }) {
1077- var item = manifest.items [name];
1078- if (item is ! MixinItem ) {
1113+ var item = manifest.declaredMixins [name];
1114+ if (item == null ) {
10791115 return false ;
10801116 }
10811117
@@ -1099,8 +1135,8 @@ class _LibraryMatch {
10991135 required LookupName ? name,
11001136 required TopLevelFunctionElementImpl element,
11011137 }) {
1102- var item = manifest.items [name];
1103- if (item is ! TopLevelFunctionItem ) {
1138+ var item = manifest.declaredFunctions [name];
1139+ if (item == null ) {
11041140 return false ;
11051141 }
11061142
@@ -1117,8 +1153,8 @@ class _LibraryMatch {
11171153 required LookupName ? name,
11181154 required GetterElementImpl element,
11191155 }) {
1120- var item = manifest.items [name];
1121- if (item is ! TopLevelGetterItem ) {
1156+ var item = manifest.declaredGetters [name];
1157+ if (item == null ) {
11221158 return false ;
11231159 }
11241160
@@ -1135,8 +1171,8 @@ class _LibraryMatch {
11351171 required LookupName ? name,
11361172 required SetterElementImpl element,
11371173 }) {
1138- var item = manifest.items [name];
1139- if (item is ! TopLevelSetterItem ) {
1174+ var item = manifest.declaredSetters [name];
1175+ if (item == null ) {
11401176 return false ;
11411177 }
11421178
0 commit comments