Skip to content

Commit b0c6d97

Browse files
scheglovCommit Queue
authored andcommitted
Fine. Extract ManifestMetadata.
Change-Id: Ie51333b75a7ac67d1befa8906b133fcb3d9f37df Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/419984 Reviewed-by: Paul Berry <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 0fb8a42 commit b0c6d97

File tree

1 file changed

+56
-32
lines changed

1 file changed

+56
-32
lines changed

pkg/analyzer/lib/src/fine/manifest_item.dart

Lines changed: 56 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
398444
class TopLevelFunctionItem extends TopLevelItem {
399445
final ManifestFunctionType functionType;
400446

@@ -450,7 +496,7 @@ class TopLevelFunctionItem extends TopLevelItem {
450496
}
451497

452498
class 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

555593
class 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

Comments
 (0)