@@ -26,6 +26,7 @@ class LibraryManifest {
2626
2727 final Map <LookupName , ClassItem > declaredClasses;
2828 final Map <LookupName , EnumItem > declaredEnums;
29+ final Map <LookupName , ExtensionItem > declaredExtensions;
2930 final Map <LookupName , ExtensionTypeItem > declaredExtensionTypes;
3031 final Map <LookupName , MixinItem > declaredMixins;
3132 final Map <LookupName , TopLevelGetterItem > declaredGetters;
@@ -37,6 +38,7 @@ class LibraryManifest {
3738 required this .reExportMap,
3839 required this .declaredClasses,
3940 required this .declaredEnums,
41+ required this .declaredExtensions,
4042 required this .declaredExtensionTypes,
4143 required this .declaredMixins,
4244 required this .declaredGetters,
@@ -54,6 +56,9 @@ class LibraryManifest {
5456 declaredEnums: reader.readLookupNameMap (
5557 readValue: () => EnumItem .read (reader),
5658 ),
59+ declaredExtensions: reader.readLookupNameMap (
60+ readValue: () => ExtensionItem .read (reader),
61+ ),
5762 declaredExtensionTypes: reader.readLookupNameMap (
5863 readValue: () => ExtensionTypeItem .read (reader),
5964 ),
@@ -81,6 +86,7 @@ class LibraryManifest {
8186 ...< Map <LookupName , TopLevelItem >> [
8287 declaredClasses,
8388 declaredEnums,
89+ declaredExtensions,
8490 declaredExtensionTypes,
8591 declaredMixins,
8692 declaredGetters,
@@ -98,6 +104,7 @@ class LibraryManifest {
98104 ManifestItemId ? getExportedId (LookupName name) {
99105 return declaredClasses[name]? .id ??
100106 declaredEnums[name]? .id ??
107+ declaredExtensions[name]? .id ??
101108 declaredExtensionTypes[name]? .id ??
102109 declaredMixins[name]? .id ??
103110 declaredGetters[name]? .id ??
@@ -110,6 +117,7 @@ class LibraryManifest {
110117 reExportMap.write (sink);
111118 declaredClasses.write (sink);
112119 declaredEnums.write (sink);
120+ declaredExtensions.write (sink);
113121 declaredExtensionTypes.write (sink);
114122 declaredMixins.write (sink);
115123 declaredGetters.write (sink);
@@ -287,6 +295,33 @@ class LibraryManifestBuilder {
287295 });
288296 }
289297
298+ void _addExtension ({
299+ required EncodeContext encodingContext,
300+ required Map <LookupName , ExtensionItem > newItems,
301+ required ExtensionElementImpl2 element,
302+ required LookupName lookupName,
303+ }) {
304+ var extensionItem = _getOrBuildElementItem (element, () {
305+ return ExtensionItem .fromElement (
306+ id: ManifestItemId .generate (),
307+ context: encodingContext,
308+ element: element,
309+ );
310+ });
311+ newItems[lookupName] = extensionItem;
312+
313+ encodingContext.withTypeParameters (element.typeParameters2, (
314+ typeParameters,
315+ ) {
316+ extensionItem.beforeUpdatingMembers ();
317+ _addInstanceElementMembers (
318+ encodingContext: encodingContext,
319+ instanceElement: element,
320+ instanceItem: extensionItem,
321+ );
322+ });
323+ }
324+
290325 void _addExtensionType ({
291326 required EncodeContext encodingContext,
292327 required Map <LookupName , TopLevelItem > newItems,
@@ -652,6 +687,7 @@ class LibraryManifestBuilder {
652687 var libraryUri = libraryElement.uri;
653688 var newClassItems = < LookupName , ClassItem > {};
654689 var newEnumItems = < LookupName , EnumItem > {};
690+ var newExtensionItems = < LookupName , ExtensionItem > {};
655691 var newExtensionTypeItems = < LookupName , ExtensionTypeItem > {};
656692 var newMixinItems = < LookupName , MixinItem > {};
657693 var newTopLevelGetters = < LookupName , TopLevelGetterItem > {};
@@ -680,6 +716,13 @@ class LibraryManifestBuilder {
680716 element: element,
681717 lookupName: lookupName,
682718 );
719+ case ExtensionElementImpl2 ():
720+ _addExtension (
721+ encodingContext: encodingContext,
722+ newItems: newExtensionItems,
723+ element: element,
724+ lookupName: lookupName,
725+ );
683726 case ExtensionTypeElementImpl2 ():
684727 _addExtensionType (
685728 encodingContext: encodingContext,
@@ -731,6 +774,7 @@ class LibraryManifestBuilder {
731774 reExportMap: {},
732775 declaredClasses: newClassItems,
733776 declaredEnums: newEnumItems,
777+ declaredExtensions: newExtensionItems,
734778 declaredExtensionTypes: newExtensionTypeItems,
735779 declaredMixins: newMixinItems,
736780 declaredGetters: newTopLevelGetters,
@@ -909,6 +953,7 @@ class LibraryManifestBuilder {
909953 reExportMap: {},
910954 declaredClasses: {},
911955 declaredEnums: {},
956+ declaredExtensions: {},
912957 declaredExtensionTypes: {},
913958 declaredMixins: {},
914959 declaredGetters: {},
@@ -1041,6 +1086,10 @@ class _LibraryMatch {
10411086 if (! _matchEnum (name: name, element: element)) {
10421087 structureMismatched.add (element);
10431088 }
1089+ case ExtensionElementImpl2 ():
1090+ if (! _matchExtension (name: name, element: element)) {
1091+ structureMismatched.add (element);
1092+ }
10441093 case ExtensionTypeElementImpl2 ():
10451094 if (! _matchExtensionType (name: name, element: element)) {
10461095 structureMismatched.add (element);
@@ -1144,6 +1193,31 @@ class _LibraryMatch {
11441193 return true ;
11451194 }
11461195
1196+ bool _matchExtension ({
1197+ required LookupName ? name,
1198+ required ExtensionElementImpl2 element,
1199+ }) {
1200+ var item = manifest.declaredExtensions[name];
1201+ if (item == null ) {
1202+ return false ;
1203+ }
1204+
1205+ var matchContext = MatchContext (parent: null );
1206+ if (! item.match (matchContext, element)) {
1207+ return false ;
1208+ }
1209+
1210+ _addMatchingElementItem (element, item, matchContext);
1211+
1212+ _matchInstanceElementExecutables (
1213+ matchContext: matchContext,
1214+ element: element,
1215+ item: item,
1216+ );
1217+
1218+ return true ;
1219+ }
1220+
11471221 bool _matchExtensionType ({
11481222 required LookupName ? name,
11491223 required ExtensionTypeElementImpl2 element,
0 commit comments