@@ -24,6 +24,7 @@ class LibraryManifest {
2424 final Map <LookupName , ManifestItemId > reExportMap;
2525
2626 final Map <LookupName , ClassItem > declaredClasses;
27+ final Map <LookupName , EnumItem > declaredEnums;
2728 final Map <LookupName , MixinItem > declaredMixins;
2829 final Map <LookupName , TopLevelGetterItem > declaredGetters;
2930 final Map <LookupName , TopLevelSetterItem > declaredSetters;
@@ -33,6 +34,7 @@ class LibraryManifest {
3334 LibraryManifest ({
3435 required this .reExportMap,
3536 required this .declaredClasses,
37+ required this .declaredEnums,
3638 required this .declaredMixins,
3739 required this .declaredGetters,
3840 required this .declaredSetters,
@@ -46,6 +48,9 @@ class LibraryManifest {
4648 declaredClasses: reader.readLookupNameMap (
4749 readValue: () => ClassItem .read (reader),
4850 ),
51+ declaredEnums: reader.readLookupNameMap (
52+ readValue: () => EnumItem .read (reader),
53+ ),
4954 declaredMixins: reader.readLookupNameMap (
5055 readValue: () => MixinItem .read (reader),
5156 ),
@@ -68,6 +73,7 @@ class LibraryManifest {
6873 /// or `null` if there is no such element.
6974 ManifestItemId ? getExportedId (LookupName name) {
7075 return declaredClasses[name]? .id ??
76+ declaredEnums[name]? .id ??
7177 declaredMixins[name]? .id ??
7278 declaredGetters[name]? .id ??
7379 declaredSetters[name]? .id ??
@@ -78,6 +84,7 @@ class LibraryManifest {
7884 void write (BufferedSink sink) {
7985 reExportMap.write (sink);
8086 declaredClasses.write (sink);
87+ declaredEnums.write (sink);
8188 declaredMixins.write (sink);
8289 declaredGetters.write (sink);
8390 declaredSetters.write (sink);
@@ -227,6 +234,33 @@ class LibraryManifestBuilder {
227234 }
228235 }
229236
237+ void _addEnum ({
238+ required EncodeContext encodingContext,
239+ required Map <LookupName , TopLevelItem > newItems,
240+ required EnumElementImpl2 element,
241+ required LookupName lookupName,
242+ }) {
243+ var enumItem = _getOrBuildElementItem (element, () {
244+ return EnumItem .fromElement (
245+ id: ManifestItemId .generate (),
246+ context: encodingContext,
247+ element: element,
248+ );
249+ });
250+ newItems[lookupName] = enumItem;
251+
252+ encodingContext.withTypeParameters (element.typeParameters2, (
253+ typeParameters,
254+ ) {
255+ enumItem.beforeUpdatingMembers ();
256+ _addInterfaceElementMembers (
257+ encodingContext: encodingContext,
258+ instanceElement: element,
259+ interfaceItem: enumItem,
260+ );
261+ });
262+ }
263+
230264 void _addInstanceElementField ({
231265 required EncodeContext encodingContext,
232266 required InstanceItem instanceItem,
@@ -564,6 +598,7 @@ class LibraryManifestBuilder {
564598 for (var libraryElement in libraryElements) {
565599 var libraryUri = libraryElement.uri;
566600 var newClassItems = < LookupName , ClassItem > {};
601+ var newEnumItems = < LookupName , EnumItem > {};
567602 var newMixinItems = < LookupName , MixinItem > {};
568603 var newTopLevelGetters = < LookupName , TopLevelGetterItem > {};
569604 var newTopLevelSetters = < LookupName , TopLevelSetterItem > {};
@@ -584,6 +619,13 @@ class LibraryManifestBuilder {
584619 element: element,
585620 lookupName: lookupName,
586621 );
622+ case EnumElementImpl2 ():
623+ _addEnum (
624+ encodingContext: encodingContext,
625+ newItems: newEnumItems,
626+ element: element,
627+ lookupName: lookupName,
628+ );
587629 case GetterElementImpl ():
588630 _addTopLevelGetter (
589631 encodingContext: encodingContext,
@@ -627,6 +669,7 @@ class LibraryManifestBuilder {
627669 var newManifest = LibraryManifest (
628670 reExportMap: {},
629671 declaredClasses: newClassItems,
672+ declaredEnums: newEnumItems,
630673 declaredMixins: newMixinItems,
631674 declaredGetters: newTopLevelGetters,
632675 declaredSetters: newTopLevelSetters,
@@ -778,6 +821,7 @@ class LibraryManifestBuilder {
778821 LibraryManifest (
779822 reExportMap: {},
780823 declaredClasses: {},
824+ declaredEnums: {},
781825 declaredMixins: {},
782826 declaredGetters: {},
783827 declaredSetters: {},
@@ -893,6 +937,10 @@ class _LibraryMatch {
893937 if (! _matchClass (name: name, element: element)) {
894938 structureMismatched.add (element);
895939 }
940+ case EnumElementImpl2 ():
941+ if (! _matchEnum (name: name, element: element)) {
942+ structureMismatched.add (element);
943+ }
896944 case GetterElementImpl ():
897945 if (! _matchTopGetter (name: name, element: element)) {
898946 structureMismatched.add (element);
@@ -961,6 +1009,37 @@ class _LibraryMatch {
9611009 return true ;
9621010 }
9631011
1012+ bool _matchEnum ({
1013+ required LookupName ? name,
1014+ required EnumElementImpl2 element,
1015+ }) {
1016+ var item = manifest.declaredEnums[name];
1017+ if (item is ! EnumItem ) {
1018+ return false ;
1019+ }
1020+
1021+ var matchContext = MatchContext (parent: null );
1022+ if (! item.match (matchContext, element)) {
1023+ return false ;
1024+ }
1025+
1026+ _addMatchingElementItem (element, item, matchContext);
1027+
1028+ _matchInterfaceElementConstructors (
1029+ matchContext: matchContext,
1030+ interfaceElement: element,
1031+ item: item,
1032+ );
1033+
1034+ _matchInstanceElementExecutables (
1035+ matchContext: matchContext,
1036+ element: element,
1037+ item: item,
1038+ );
1039+
1040+ return true ;
1041+ }
1042+
9641043 void _matchInstanceElementExecutables ({
9651044 required InstanceElementImpl2 element,
9661045 required InstanceItem item,
0 commit comments