Skip to content

Commit b18aad8

Browse files
scheglovCommit Queue
authored andcommitted
Fine. Extract InstanceItem and InterfaceItem.
Change-Id: I3678aeba2da34805119c9b3c22603618bea9e10e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/419360 Reviewed-by: Paul Berry <[email protected]> Reviewed-by: Johnni Winther <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 66666c3 commit b18aad8

File tree

2 files changed

+108
-43
lines changed

2 files changed

+108
-43
lines changed

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

Lines changed: 86 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,16 @@ import 'package:analyzer/src/summary2/data_reader.dart';
1212
import 'package:analyzer/src/summary2/data_writer.dart';
1313
import '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+
177183
sealed 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+
316359
class ManifestAnnotation {
317360
final ManifestNode ast;
318361

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -603,6 +603,10 @@ sealed class ManifestType {
603603
}
604604
}
605605

606+
static List<ManifestType> readList(SummaryDataReader reader) {
607+
return reader.readTypedList(() => ManifestType.read(reader));
608+
}
609+
606610
static ManifestType? readOptional(SummaryDataReader reader) {
607611
return reader.readOptionalObject(() => ManifestType.read(reader));
608612
}
@@ -656,6 +660,10 @@ class ManifestTypeParameter {
656660

657661
return true;
658662
}
663+
664+
static List<ManifestTypeParameter> readList(SummaryDataReader reader) {
665+
return reader.readTypedList(() => ManifestTypeParameter.read(reader));
666+
}
659667
}
660668

661669
final class ManifestTypeParameterType extends ManifestType {
@@ -802,6 +810,16 @@ extension ListOfManifestTypeExtension on List<ManifestType> {
802810
}
803811
return true;
804812
}
813+
814+
void writeList(BufferedSink sink) {
815+
sink.writeList(this, (x) => x.write(sink));
816+
}
817+
}
818+
819+
extension ListOfManifestTypeParameterExtension on List<ManifestTypeParameter> {
820+
void writeList(BufferedSink sink) {
821+
sink.writeList(this, (x) => x.write(sink));
822+
}
805823
}
806824

807825
extension ManifestTypeOrNullExtension on ManifestType? {
@@ -812,4 +830,8 @@ extension ManifestTypeOrNullExtension on ManifestType? {
812830
}
813831
return self.match(context, type);
814832
}
833+
834+
void writeOptional(BufferedSink sink) {
835+
sink.writeOptionalObject(this, (x) => x.write(sink));
836+
}
815837
}

0 commit comments

Comments
 (0)