@@ -12,22 +12,16 @@ import 'package:analyzer/src/summary2/data_reader.dart';
1212import 'package:analyzer/src/summary2/data_writer.dart' ;
1313import 'package:analyzer/src/utilities/extensions/collection.dart' ;
1414
15- class ClassItem extends TopLevelItem {
16- final List <ManifestTypeParameter > typeParameters;
17- final ManifestType ? supertype;
18- final List <ManifestType > interfaces;
19- final List <ManifestType > mixins;
20- final Map <LookupName , InstanceMemberItem > members;
21-
15+ class ClassItem extends InterfaceItem {
2216 ClassItem ({
2317 required super .libraryUri,
2418 required super .name,
2519 required super .id,
26- required this .typeParameters,
27- required this .supertype,
28- required this .interfaces,
29- required this .mixins,
30- required this .members,
20+ required super .typeParameters,
21+ required super .supertype,
22+ required super .interfaces,
23+ required super .mixins,
24+ required super .members,
3125 });
3226
3327 factory ClassItem .fromElement ({
@@ -45,8 +39,8 @@ class ClassItem extends TopLevelItem {
4539 id: id,
4640 typeParameters: typeParameters,
4741 supertype: element.supertype? .encode (context),
48- interfaces: element.interfaces.encode (context),
4942 mixins: element.mixins.encode (context),
43+ interfaces: element.interfaces.encode (context),
5044 members: {},
5145 );
5246 },
@@ -58,45 +52,22 @@ class ClassItem extends TopLevelItem {
5852 libraryUri: reader.readUri (),
5953 name: LookupName .read (reader),
6054 id: ManifestItemId .read (reader),
61- typeParameters: reader.readTypedList (
62- () => ManifestTypeParameter .read (reader),
63- ),
64- supertype: reader.readOptionalObject (() => ManifestType .read (reader)),
65- interfaces: reader.readTypedList (() => ManifestType .read (reader)),
66- mixins: reader.readTypedList (() => ManifestType .read (reader)),
67- members: reader.readMap (
68- readKey: () => LookupName .read (reader),
69- readValue: () => InstanceMemberItem .read (reader),
70- ),
55+ typeParameters: ManifestTypeParameter .readList (reader),
56+ members: InstanceItem ._readMembers (reader),
57+ supertype: ManifestType .readOptional (reader),
58+ mixins: ManifestType .readList (reader),
59+ interfaces: ManifestType .readList (reader),
7160 );
7261 }
7362
7463 MatchContext ? match (ClassElementImpl2 element) {
75- var context = MatchContext (parent: null );
76- context.addTypeParameters (element.typeParameters2);
77- if (supertype.match (context, element.supertype) &&
78- interfaces.match (context, element.interfaces) &&
79- mixins.match (context, element.mixins)) {
80- return context;
81- }
82- return null ;
64+ return super ._matchInterfaceElement (element);
8365 }
8466
8567 @override
8668 void write (BufferedSink sink) {
8769 sink.writeEnum (_ManifestItemKind .class_);
88- sink.writeUri (libraryUri);
89- name.write (sink);
90- id.write (sink);
91- sink.writeList (typeParameters, (e) => e.write (sink));
92- sink.writeOptionalObject (supertype, (x) => x.write (sink));
93- sink.writeList (interfaces, (x) => x.write (sink));
94- sink.writeList (mixins, (x) => x.write (sink));
95- sink.writeMap (
96- members,
97- writeKey: (name) => name.write (sink),
98- writeValue: (member) => member.write (sink),
99- );
70+ super ._write (sink);
10071 }
10172}
10273
@@ -174,6 +145,41 @@ class InstanceGetterItem extends InstanceMemberItem {
174145 }
175146}
176147
148+ /// The item for [InstanceElementImpl2] .
149+ sealed class InstanceItem extends TopLevelItem {
150+ final List <ManifestTypeParameter > typeParameters;
151+ final Map <LookupName , InstanceMemberItem > members;
152+
153+ InstanceItem ({
154+ required super .libraryUri,
155+ required super .name,
156+ required super .id,
157+ required this .typeParameters,
158+ required this .members,
159+ });
160+
161+ void _write (BufferedSink sink) {
162+ sink.writeUri (libraryUri);
163+ name.write (sink);
164+ id.write (sink);
165+ typeParameters.writeList (sink);
166+ sink.writeMap (
167+ members,
168+ writeKey: (name) => name.write (sink),
169+ writeValue: (member) => member.write (sink),
170+ );
171+ }
172+
173+ static Map <LookupName , InstanceMemberItem > _readMembers (
174+ SummaryDataReader reader,
175+ ) {
176+ return reader.readMap (
177+ readKey: () => LookupName .read (reader),
178+ readValue: () => InstanceMemberItem .read (reader),
179+ );
180+ }
181+ }
182+
177183sealed class InstanceMemberItem extends ManifestItem {
178184 final LookupName name;
179185 final ManifestItemId id;
@@ -313,6 +319,43 @@ class InterfaceConstructorItem extends InstanceMemberItem {
313319 }
314320}
315321
322+ /// The item for [InterfaceElementImpl2] .
323+ sealed class InterfaceItem extends InstanceItem {
324+ final ManifestType ? supertype;
325+ final List <ManifestType > interfaces;
326+ final List <ManifestType > mixins;
327+
328+ InterfaceItem ({
329+ required super .libraryUri,
330+ required super .name,
331+ required super .id,
332+ required super .typeParameters,
333+ required super .members,
334+ required this .supertype,
335+ required this .interfaces,
336+ required this .mixins,
337+ });
338+
339+ MatchContext ? _matchInterfaceElement (InterfaceElementImpl2 element) {
340+ var context = MatchContext (parent: null );
341+ context.addTypeParameters (element.typeParameters2);
342+ if (supertype.match (context, element.supertype) &&
343+ interfaces.match (context, element.interfaces) &&
344+ mixins.match (context, element.mixins)) {
345+ return context;
346+ }
347+ return null ;
348+ }
349+
350+ @override
351+ void _write (BufferedSink sink) {
352+ super ._write (sink);
353+ supertype.writeOptional (sink);
354+ mixins.writeList (sink);
355+ interfaces.writeList (sink);
356+ }
357+ }
358+
316359class ManifestAnnotation {
317360 final ManifestNode ast;
318361
0 commit comments