@@ -26,6 +26,7 @@ class LibraryManifest {
2626 final String ? name;
2727 final Uint8List featureSet;
2828 final ManifestLibraryLanguageVersion languageVersion;
29+ final LibraryMetadataItem libraryMetadata;
2930
3031 final List <Uri > exportedLibraryUris;
3132
@@ -54,6 +55,7 @@ class LibraryManifest {
5455 required this .name,
5556 required this .featureSet,
5657 required this .languageVersion,
58+ required this .libraryMetadata,
5759 required this .exportedLibraryUris,
5860 required this .reExportMap,
5961 required this .reExportDeprecatedOnly,
@@ -75,6 +77,7 @@ class LibraryManifest {
7577 name: reader.readOptionalStringUtf8 (),
7678 featureSet: reader.readUint8List (),
7779 languageVersion: ManifestLibraryLanguageVersion .read (reader),
80+ libraryMetadata: LibraryMetadataItem .read (reader),
7881 exportedLibraryUris: reader.readUriList (),
7982 reExportMap: reader.readLookupNameToIdMap (),
8083 reExportDeprecatedOnly: reader.readLookupNameSet (),
@@ -156,6 +159,7 @@ class LibraryManifest {
156159 sink.writeOptionalStringUtf8 (name);
157160 sink.writeUint8List (featureSet);
158161 languageVersion.write (sink);
162+ libraryMetadata.write (sink);
159163 sink.writeUriList (exportedLibraryUris);
160164 reExportMap.write (sink);
161165 reExportDeprecatedOnly.write (sink);
@@ -784,12 +788,19 @@ class LibraryManifestBuilder {
784788 var newTopLevelFunctions = < LookupName , TopLevelFunctionItem > {};
785789 var newTopLevelVariables = < LookupName , TopLevelVariableItem > {};
786790
791+ var libraryMetadataItem = _getOrBuildElementItem (libraryElement, () {
792+ return LibraryMetadataItem .encode (
793+ id: ManifestItemId .generate (),
794+ context: encodingContext,
795+ metadata: libraryElement.metadata,
796+ );
797+ });
798+
787799 for (var element in libraryElement.children) {
788800 var lookupName = element.lookupName? .asLookupName;
789801 if (lookupName == null ) {
790802 continue ;
791803 }
792-
793804 switch (element) {
794805 case ClassElementImpl ():
795806 _addClass (
@@ -870,6 +881,7 @@ class LibraryManifestBuilder {
870881 languageVersion: ManifestLibraryLanguageVersion .encode (
871882 libraryElement.languageVersion,
872883 ),
884+ libraryMetadata: libraryMetadataItem,
873885 exportedLibraryUris: libraryElement.exportedLibraries
874886 .map ((e) => e.uri)
875887 .toList (),
@@ -1093,6 +1105,7 @@ class LibraryManifestBuilder {
10931105 name: null ,
10941106 featureSet: Uint8List (0 ),
10951107 languageVersion: ManifestLibraryLanguageVersion .empty (),
1108+ libraryMetadata: LibraryMetadataItem .empty (),
10961109 exportedLibraryUris: [],
10971110 reExportMap: {},
10981111 reExportDeprecatedOnly: < LookupName > {},
@@ -1222,6 +1235,10 @@ class _LibraryMatch {
12221235 });
12231236
12241237 void compareStructures () {
1238+ if (! _matchLibraryMetadata ()) {
1239+ structureMismatched.add (library);
1240+ }
1241+
12251242 for (var element in library.children) {
12261243 var name = element.lookupName? .asLookupName;
12271244 switch (element) {
@@ -1584,6 +1601,18 @@ class _LibraryMatch {
15841601 }
15851602 }
15861603
1604+ bool _matchLibraryMetadata () {
1605+ var item = manifest.libraryMetadata;
1606+
1607+ var matchContext = MatchContext (parent: null );
1608+ if (! item.match (matchContext, library)) {
1609+ return false ;
1610+ }
1611+
1612+ _addMatchingElementItem (library, item, matchContext);
1613+ return true ;
1614+ }
1615+
15871616 bool _matchMixin ({
15881617 required LookupName ? name,
15891618 required MixinElementImpl element,
0 commit comments