Skip to content

Commit dd0a62e

Browse files
scheglovCommit Queue
authored andcommitted
Fine. Make ManifestItem hierarchy generic.
Change-Id: I2448ba4a39218670d7e21a7d567489e5fcfb4742 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/422020 Reviewed-by: Paul Berry <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent addc7db commit dd0a62e

File tree

1 file changed

+44
-61
lines changed

1 file changed

+44
-61
lines changed

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

Lines changed: 44 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import 'package:analyzer/src/summary2/data_writer.dart';
1414
import 'package:analyzer/src/utilities/extensions/collection.dart';
1515
import 'package:meta/meta.dart';
1616

17-
class ClassItem extends InterfaceItem {
17+
class ClassItem extends InterfaceItem<ClassElementImpl2> {
1818
ClassItem({
1919
required super.id,
2020
required super.metadata,
@@ -69,7 +69,8 @@ class ClassItem extends InterfaceItem {
6969
}
7070

7171
/// The item for [InstanceElementImpl2].
72-
sealed class InstanceItem extends TopLevelItem {
72+
sealed class InstanceItem<E extends InstanceElementImpl2>
73+
extends TopLevelItem<E> {
7374
final List<ManifestTypeParameter> typeParameters;
7475
final Map<LookupName, InstanceItemMemberItem> declaredMembers;
7576

@@ -105,7 +106,7 @@ sealed class InstanceItem extends TopLevelItem {
105106
}
106107
}
107108

108-
class InstanceItemGetterItem extends InstanceItemMemberItem {
109+
class InstanceItemGetterItem extends InstanceItemMemberItem<GetterElementImpl> {
109110
final ManifestType returnType;
110111
final ManifestNode? constInitializer;
111112

@@ -145,10 +146,7 @@ class InstanceItemGetterItem extends InstanceItemMemberItem {
145146
}
146147

147148
@override
148-
bool match(
149-
MatchContext context,
150-
covariant GetterElementImpl element,
151-
) {
149+
bool match(MatchContext context, GetterElementImpl element) {
152150
return super.match(context, element) &&
153151
returnType.match(context, element.returnType) &&
154152
constInitializer.match(context, element.constInitializer);
@@ -163,7 +161,8 @@ class InstanceItemGetterItem extends InstanceItemMemberItem {
163161
}
164162
}
165163

166-
sealed class InstanceItemMemberItem extends ManifestItem {
164+
sealed class InstanceItemMemberItem<E extends ExecutableElementImpl2>
165+
extends ManifestItem<E> {
167166
final bool isStatic;
168167

169168
InstanceItemMemberItem({
@@ -172,7 +171,19 @@ sealed class InstanceItemMemberItem extends ManifestItem {
172171
required this.isStatic,
173172
});
174173

175-
factory InstanceItemMemberItem.read(SummaryDataReader reader) {
174+
@override
175+
bool match(MatchContext context, E element) {
176+
return super.match(context, element) && element.isStatic == isStatic;
177+
}
178+
179+
@override
180+
void write(BufferedSink sink) {
181+
super.write(sink);
182+
sink.writeBool(isStatic);
183+
}
184+
185+
static InstanceItemMemberItem<ExecutableElementImpl2> read(
186+
SummaryDataReader reader) {
176187
var kind = reader.readEnum(_ManifestItemKind2.values);
177188
switch (kind) {
178189
case _ManifestItemKind2.instanceGetter:
@@ -185,23 +196,10 @@ sealed class InstanceItemMemberItem extends ManifestItem {
185196
return InterfaceItemConstructorItem.read(reader);
186197
}
187198
}
188-
189-
@override
190-
bool match(
191-
MatchContext context,
192-
covariant ExecutableElementImpl2 element,
193-
) {
194-
return super.match(context, element) && element.isStatic == isStatic;
195-
}
196-
197-
@override
198-
void write(BufferedSink sink) {
199-
super.write(sink);
200-
sink.writeBool(isStatic);
201-
}
202199
}
203200

204-
class InstanceItemMethodItem extends InstanceItemMemberItem {
201+
class InstanceItemMethodItem
202+
extends InstanceItemMemberItem<MethodElementImpl2> {
205203
final ManifestFunctionType functionType;
206204

207205
InstanceItemMethodItem({
@@ -234,10 +232,7 @@ class InstanceItemMethodItem extends InstanceItemMemberItem {
234232
}
235233

236234
@override
237-
bool match(
238-
MatchContext context,
239-
covariant MethodElementImpl2 element,
240-
) {
235+
bool match(MatchContext context, MethodElementImpl2 element) {
241236
return super.match(context, element) &&
242237
functionType.match(context, element.type);
243238
}
@@ -250,7 +245,7 @@ class InstanceItemMethodItem extends InstanceItemMemberItem {
250245
}
251246
}
252247

253-
class InstanceItemSetterItem extends InstanceItemMemberItem {
248+
class InstanceItemSetterItem extends InstanceItemMemberItem<SetterElementImpl> {
254249
final ManifestType valueType;
255250

256251
InstanceItemSetterItem({
@@ -286,10 +281,7 @@ class InstanceItemSetterItem extends InstanceItemMemberItem {
286281
}
287282

288283
@override
289-
bool match(
290-
MatchContext context,
291-
covariant SetterElementImpl element,
292-
) {
284+
bool match(MatchContext context, SetterElementImpl element) {
293285
return super.match(context, element) &&
294286
valueType.match(context, element.formalParameters[0].type);
295287
}
@@ -303,7 +295,8 @@ class InstanceItemSetterItem extends InstanceItemMemberItem {
303295
}
304296

305297
/// The item for [InterfaceElementImpl2].
306-
sealed class InterfaceItem extends InstanceItem {
298+
sealed class InterfaceItem<E extends InterfaceElementImpl2>
299+
extends InstanceItem<E> {
307300
final ManifestType? supertype;
308301
final List<ManifestType> interfaces;
309302
final List<ManifestType> mixins;
@@ -334,7 +327,7 @@ sealed class InterfaceItem extends InstanceItem {
334327
}
335328

336329
@override
337-
bool match(MatchContext context, covariant InterfaceElementImpl2 element) {
330+
bool match(MatchContext context, E element) {
338331
context.addTypeParameters(element.typeParameters2);
339332
return super.match(context, element) &&
340333
supertype.match(context, element.supertype) &&
@@ -365,7 +358,8 @@ sealed class InterfaceItem extends InstanceItem {
365358
}
366359
}
367360

368-
class InterfaceItemConstructorItem extends InstanceItemMemberItem {
361+
class InterfaceItemConstructorItem
362+
extends InstanceItemMemberItem<ConstructorElementImpl2> {
369363
final bool isConst;
370364
final bool isFactory;
371365
final ManifestFunctionType functionType;
@@ -407,10 +401,7 @@ class InterfaceItemConstructorItem extends InstanceItemMemberItem {
407401
}
408402

409403
@override
410-
bool match(
411-
MatchContext context,
412-
covariant ConstructorElementImpl2 element,
413-
) {
404+
bool match(MatchContext context, ConstructorElementImpl2 element) {
414405
return super.match(context, element) &&
415406
isConst == element.isConst &&
416407
isFactory == element.isFactory &&
@@ -458,7 +449,7 @@ class ManifestAnnotation {
458449
}
459450
}
460451

461-
sealed class ManifestItem {
452+
sealed class ManifestItem<E extends AnnotatableElementImpl> {
462453
/// The unique identifier of this item.
463454
final ManifestItemId id;
464455
final ManifestMetadata metadata;
@@ -469,7 +460,7 @@ sealed class ManifestItem {
469460
});
470461

471462
@mustCallSuper
472-
bool match(MatchContext context, AnnotatableElementImpl element) {
463+
bool match(MatchContext context, E element) {
473464
return metadata.match(context, element.effectiveMetadata);
474465
}
475466

@@ -526,7 +517,7 @@ class ManifestMetadata {
526517
}
527518
}
528519

529-
class MixinItem extends InterfaceItem {
520+
class MixinItem extends InterfaceItem<MixinElementImpl2> {
530521
final List<ManifestType> superclassConstraints;
531522

532523
MixinItem({
@@ -581,7 +572,7 @@ class MixinItem extends InterfaceItem {
581572
}
582573

583574
@override
584-
bool match(MatchContext context, covariant MixinElementImpl2 element) {
575+
bool match(MatchContext context, MixinElementImpl2 element) {
585576
return super.match(context, element) &&
586577
superclassConstraints.match(context, element.superclassConstraints);
587578
}
@@ -594,7 +585,7 @@ class MixinItem extends InterfaceItem {
594585
}
595586
}
596587

597-
class TopLevelFunctionItem extends TopLevelItem {
588+
class TopLevelFunctionItem extends TopLevelItem<TopLevelFunctionElementImpl> {
598589
final ManifestFunctionType functionType;
599590

600591
TopLevelFunctionItem({
@@ -624,10 +615,7 @@ class TopLevelFunctionItem extends TopLevelItem {
624615
}
625616

626617
@override
627-
bool match(
628-
MatchContext context,
629-
covariant TopLevelFunctionElementImpl element,
630-
) {
618+
bool match(MatchContext context, TopLevelFunctionElementImpl element) {
631619
return super.match(context, element) &&
632620
functionType.match(context, element.type);
633621
}
@@ -640,7 +628,7 @@ class TopLevelFunctionItem extends TopLevelItem {
640628
}
641629
}
642630

643-
class TopLevelGetterItem extends TopLevelItem {
631+
class TopLevelGetterItem extends TopLevelItem<GetterElementImpl> {
644632
final ManifestType returnType;
645633
final ManifestNode? constInitializer;
646634

@@ -677,10 +665,7 @@ class TopLevelGetterItem extends TopLevelItem {
677665
}
678666

679667
@override
680-
bool match(
681-
MatchContext context,
682-
covariant GetterElementImpl element,
683-
) {
668+
bool match(MatchContext context, GetterElementImpl element) {
684669
return super.match(context, element) &&
685670
returnType.match(context, element.returnType) &&
686671
constInitializer.match(context, element.constInitializer);
@@ -695,13 +680,14 @@ class TopLevelGetterItem extends TopLevelItem {
695680
}
696681
}
697682

698-
sealed class TopLevelItem extends ManifestItem {
683+
sealed class TopLevelItem<E extends AnnotatableElementImpl>
684+
extends ManifestItem<E> {
699685
TopLevelItem({
700686
required super.id,
701687
required super.metadata,
702688
});
703689

704-
factory TopLevelItem.read(SummaryDataReader reader) {
690+
static TopLevelItem<AnnotatableElementImpl> read(SummaryDataReader reader) {
705691
var kind = reader.readEnum(_ManifestItemKind.values);
706692
switch (kind) {
707693
case _ManifestItemKind.class_:
@@ -718,7 +704,7 @@ sealed class TopLevelItem extends ManifestItem {
718704
}
719705
}
720706

721-
class TopLevelSetterItem extends TopLevelItem {
707+
class TopLevelSetterItem extends TopLevelItem<SetterElementImpl> {
722708
final ManifestType valueType;
723709

724710
TopLevelSetterItem({
@@ -751,10 +737,7 @@ class TopLevelSetterItem extends TopLevelItem {
751737
}
752738

753739
@override
754-
bool match(
755-
MatchContext context,
756-
covariant SetterElementImpl element,
757-
) {
740+
bool match(MatchContext context, SetterElementImpl element) {
758741
return super.match(context, element) &&
759742
valueType.match(context, element.formalParameters[0].type);
760743
}

0 commit comments

Comments
 (0)