@@ -395,6 +395,52 @@ sealed class ManifestItem {
395395 void write (BufferedSink sink);
396396}
397397
398+ class ManifestMetadata {
399+ final List <ManifestAnnotation > annotations;
400+
401+ ManifestMetadata ({
402+ required this .annotations,
403+ });
404+
405+ factory ManifestMetadata .encode (
406+ EncodeContext context,
407+ MetadataImpl metadata,
408+ ) {
409+ return ManifestMetadata (
410+ annotations: metadata.annotations.map ((annotation) {
411+ return ManifestAnnotation .encode (context, annotation);
412+ }).toFixedList (),
413+ );
414+ }
415+
416+ factory ManifestMetadata .read (SummaryDataReader reader) {
417+ return ManifestMetadata (
418+ annotations: reader.readTypedList (() {
419+ return ManifestAnnotation .read (reader);
420+ }),
421+ );
422+ }
423+
424+ bool match (MatchContext context, MetadataImpl metadata) {
425+ var metadataAnnotations = metadata.annotations;
426+ if (annotations.length != metadataAnnotations.length) {
427+ return false ;
428+ }
429+
430+ for (var i = 0 ; i < metadataAnnotations.length; i++ ) {
431+ if (! annotations[i].match (context, metadataAnnotations[i])) {
432+ return false ;
433+ }
434+ }
435+
436+ return true ;
437+ }
438+
439+ void write (BufferedSink sink) {
440+ sink.writeList (annotations, (x) => x.write (sink));
441+ }
442+ }
443+
398444class TopLevelFunctionItem extends TopLevelItem {
399445 final ManifestFunctionType functionType;
400446
@@ -450,7 +496,7 @@ class TopLevelFunctionItem extends TopLevelItem {
450496}
451497
452498class TopLevelGetterItem extends TopLevelItem {
453- final List < ManifestAnnotation > metadata;
499+ final ManifestMetadata metadata;
454500 final ManifestType returnType;
455501
456502 TopLevelGetterItem ({
@@ -471,9 +517,7 @@ class TopLevelGetterItem extends TopLevelItem {
471517 libraryUri: element.library2.uri,
472518 name: name,
473519 id: id,
474- metadata: element.metadata2.annotations.map ((annotation) {
475- return ManifestAnnotation .encode (context, annotation);
476- }).toFixedList (),
520+ metadata: ManifestMetadata .encode (context, element.metadata2),
477521 returnType: element.returnType.encode (context),
478522 );
479523 }
@@ -483,23 +527,17 @@ class TopLevelGetterItem extends TopLevelItem {
483527 libraryUri: reader.readUri (),
484528 name: LookupName .read (reader),
485529 id: ManifestItemId .read (reader),
486- metadata: reader. readTypedList (() => ManifestAnnotation . read (reader) ),
530+ metadata: ManifestMetadata . read (reader),
487531 returnType: ManifestType .read (reader),
488532 );
489533 }
490534
491535 MatchContext ? match (GetterElementImpl element) {
492536 var context = MatchContext (parent: null );
493537
494- var annotations = element.metadata2.annotations;
495- if (annotations.length != metadata.length) {
538+ if (! metadata.match (context, element.metadata2)) {
496539 return null ;
497540 }
498- for (var i = 0 ; i < metadata.length; i++ ) {
499- if (! metadata[i].match (context, annotations[i])) {
500- return null ;
501- }
502- }
503541
504542 if (! returnType.match (context, element.returnType)) {
505543 return null ;
@@ -514,7 +552,7 @@ class TopLevelGetterItem extends TopLevelItem {
514552 sink.writeUri (libraryUri);
515553 name.write (sink);
516554 id.write (sink);
517- metadata.writeList (sink);
555+ metadata.write (sink);
518556 returnType.write (sink);
519557 }
520558}
@@ -553,7 +591,7 @@ sealed class TopLevelItem extends ManifestItem {
553591}
554592
555593class TopLevelSetterItem extends TopLevelItem {
556- final List < ManifestAnnotation > metadata;
594+ final ManifestMetadata metadata;
557595 final ManifestType valueType;
558596
559597 TopLevelSetterItem ({
@@ -574,9 +612,7 @@ class TopLevelSetterItem extends TopLevelItem {
574612 libraryUri: element.library2.uri,
575613 name: name,
576614 id: id,
577- metadata: element.metadata2.annotations.map ((annotation) {
578- return ManifestAnnotation .encode (context, annotation);
579- }).toFixedList (),
615+ metadata: ManifestMetadata .encode (context, element.metadata2),
580616 valueType: element.formalParameters[0 ].type.encode (context),
581617 );
582618 }
@@ -586,23 +622,17 @@ class TopLevelSetterItem extends TopLevelItem {
586622 libraryUri: reader.readUri (),
587623 name: LookupName .read (reader),
588624 id: ManifestItemId .read (reader),
589- metadata: reader. readTypedList (() => ManifestAnnotation . read (reader) ),
625+ metadata: ManifestMetadata . read (reader),
590626 valueType: ManifestType .read (reader),
591627 );
592628 }
593629
594630 MatchContext ? match (SetterElementImpl element) {
595631 var context = MatchContext (parent: null );
596632
597- var annotations = element.metadata2.annotations;
598- if (annotations.length != metadata.length) {
633+ if (! metadata.match (context, element.metadata2)) {
599634 return null ;
600635 }
601- for (var i = 0 ; i < metadata.length; i++ ) {
602- if (! metadata[i].match (context, annotations[i])) {
603- return null ;
604- }
605- }
606636
607637 if (! valueType.match (context, element.formalParameters[0 ].type)) {
608638 return null ;
@@ -617,7 +647,7 @@ class TopLevelSetterItem extends TopLevelItem {
617647 sink.writeUri (libraryUri);
618648 name.write (sink);
619649 id.write (sink);
620- metadata.writeList (sink);
650+ metadata.write (sink);
621651 valueType.write (sink);
622652 }
623653}
@@ -635,9 +665,3 @@ enum _ManifestItemKind2 {
635665 instanceMethod,
636666 interfaceConstructor,
637667}
638-
639- extension ListOfManifestAnnotationExtension on List <ManifestAnnotation > {
640- void writeList (BufferedSink sink) {
641- sink.writeList (this , (x) => x.write (sink));
642- }
643- }
0 commit comments