Skip to content

Commit fe3c184

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Use more TypeImpl, and less casts.
Change-Id: I98e3818380cb58d04aa5017a3047bb156ab4c9b3 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/412500 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 323039c commit fe3c184

40 files changed

+357
-330
lines changed

pkg/analyzer/lib/src/dart/ast/ast.dart

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5686,7 +5686,7 @@ final class EnumConstantDeclarationImpl extends DeclarationImpl
56865686
final EnumConstantArgumentsImpl? arguments;
56875687

56885688
@override
5689-
ConstructorElement? constructorElement;
5689+
ConstructorElementMixin? constructorElement;
56905690

56915691
/// Initializes a newly created enum constant declaration.
56925692
///
@@ -5704,10 +5704,10 @@ final class EnumConstantDeclarationImpl extends DeclarationImpl
57045704

57055705
@experimental
57065706
@override
5707-
ConstructorElement2? get constructorElement2 =>
5707+
ConstructorElementMixin2? get constructorElement2 =>
57085708
constructorElement?.asElement2;
57095709

5710-
set constructorElement2(ConstructorElement2? value) {
5710+
set constructorElement2(ConstructorElementMixin2? value) {
57115711
constructorElement = value?.asElement;
57125712
}
57135713

@@ -10860,10 +10860,10 @@ sealed class InvocationExpressionImpl extends ExpressionImpl
1086010860
TypeArgumentListImpl? _typeArguments;
1086110861

1086210862
@override
10863-
List<DartType>? typeArgumentTypes;
10863+
List<TypeImpl>? typeArgumentTypes;
1086410864

1086510865
@override
10866-
DartType? staticInvokeType;
10866+
TypeImpl? staticInvokeType;
1086710867

1086810868
/// Initializes a newly created invocation.
1086910869
InvocationExpressionImpl({

pkg/analyzer/lib/src/dart/constant/constant_verifier.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ class ConstantVerifier extends RecursiveAstVisitor<void> {
130130
}
131131

132132
@override
133-
void visitConstantPattern(ConstantPattern node) {
133+
void visitConstantPattern(covariant ConstantPatternImpl node) {
134134
var expression = node.expression.unParenthesized;
135135
if (expression.typeOrThrow is InvalidType) {
136136
return;
@@ -517,7 +517,7 @@ class ConstantVerifier extends RecursiveAstVisitor<void> {
517517
/// Returns `false` if we can prove that `constant == value` always returns
518518
/// `false`, taking into account the fact that [constantType] has primitive
519519
/// equality.
520-
bool _canBeEqual(DartType constantType, DartType valueType) {
520+
bool _canBeEqual(TypeImpl constantType, TypeImpl valueType) {
521521
if (constantType is InterfaceType) {
522522
if (valueType is InterfaceTypeImpl) {
523523
if (constantType.isDartCoreInt && valueType.isDartCoreDouble) {
@@ -776,7 +776,7 @@ class ConstantVerifier extends RecursiveAstVisitor<void> {
776776

777777
/// Check if the object [obj] matches the type [type] according to runtime
778778
/// type checking rules.
779-
bool _runtimeTypeMatch(DartObjectImpl obj, DartType type) {
779+
bool _runtimeTypeMatch(DartObjectImpl obj, TypeImpl type) {
780780
return _currentLibrary.typeSystem.runtimeTypeMatch(obj, type);
781781
}
782782

pkg/analyzer/lib/src/dart/constant/evaluation.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2910,7 +2910,8 @@ class _InstanceCreationEvaluator {
29102910
if (baseParameter.isInitializingFormal) {
29112911
var field = (parameter as FieldFormalParameterElement).field;
29122912
if (field != null) {
2913-
var fieldType = field.type;
2913+
// TODO(scheglov): eliminate this cast
2914+
var fieldType = field.type as TypeImpl;
29142915
if (fieldType != parameter.type) {
29152916
// We've already checked that the argument can be assigned to the
29162917
// parameter; we also need to check that it can be assigned to
@@ -3192,7 +3193,7 @@ extension RuntimeExtensions on TypeSystemImpl {
31923193
/// type-checking rules.
31933194
bool runtimeTypeMatch(
31943195
DartObjectImpl obj,
3195-
DartType type,
3196+
TypeImpl type,
31963197
) {
31973198
type = type.extensionTypeErasure;
31983199
var objType = obj.type;

pkg/analyzer/lib/src/dart/element/element.dart

Lines changed: 33 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1807,6 +1807,9 @@ mixin ConstructorElementMixin2
18071807
@override
18081808
ConstructorElementImpl2 get baseElement;
18091809

1810+
@override
1811+
InterfaceElementImpl2 get enclosingElement2;
1812+
18101813
@override
18111814
InterfaceTypeImpl get returnType;
18121815
}
@@ -1974,10 +1977,9 @@ class DefaultSuperFormalParameterElementImpl
19741977
return null;
19751978
}
19761979

1980+
// TODO(scheglov): eliminate this cast
1981+
superDefault as DartObjectImpl;
19771982
var superDefaultType = superDefault.type;
1978-
if (superDefaultType == null) {
1979-
return null;
1980-
}
19811983

19821984
var typeSystem = library?.typeSystem;
19831985
if (typeSystem == null) {
@@ -3745,12 +3747,12 @@ class EnumElementImpl2 extends InterfaceElementImpl2
37453747
}
37463748

37473749
@override
3748-
List<FieldElement> get constants {
3750+
List<FieldElementOrMember> get constants {
37493751
return fields.where((field) => field.isEnumConstant).toList();
37503752
}
37513753

37523754
@override
3753-
List<FieldElement2> get constants2 =>
3755+
List<FieldElement2OrMember> get constants2 =>
37543756
constants.map((e) => e.asElement2).toList();
37553757

37563758
@override
@@ -4328,7 +4330,7 @@ class ExtensionTypeElementImpl2 extends InterfaceElementImpl2
43284330
ConstructorElement2 get primaryConstructor2 => primaryConstructor.element;
43294331

43304332
@override
4331-
FieldElement2 get representation2 => representation.asElement2;
4333+
FieldElement2OrMember get representation2 => representation.asElement2;
43324334

43334335
@override
43344336
T? accept2<T>(ElementVisitor2<T> visitor) {
@@ -4489,7 +4491,7 @@ class FieldElementImpl2 extends PropertyInducingElementImpl2
44894491
}
44904492

44914493
@override
4492-
GetterElement? get getter2 => firstFragment.getter?.element as GetterElement?;
4494+
GetterElementImpl? get getter2 => firstFragment.getter?.element;
44934495

44944496
@override
44954497
bool get hasImplicitType => firstFragment.hasImplicitType;
@@ -4533,7 +4535,7 @@ class FieldElementImpl2 extends PropertyInducingElementImpl2
45334535
String? get name3 => firstFragment.name2;
45344536

45354537
@override
4536-
SetterElement? get setter2 => firstFragment.setter?.element as SetterElement?;
4538+
SetterElementImpl? get setter2 => firstFragment.setter?.element;
45374539

45384540
@override
45394541
TypeImpl get type => firstFragment.type;
@@ -4611,8 +4613,9 @@ class FieldFormalParameterElementImpl2 extends FormalParameterElementImpl
46114613
FieldFormalParameterElementImpl2(super.firstFragment);
46124614

46134615
@override
4614-
FieldElement2? get field2 => switch (firstFragment) {
4615-
FieldFormalParameterElementImpl(:FieldFragment field) => field.element,
4616+
FieldElementImpl2? get field2 => switch (firstFragment) {
4617+
FieldFormalParameterElementImpl(:FieldElementImpl field) =>
4618+
field.element,
46164619
_ => null,
46174620
};
46184621

@@ -5940,11 +5943,11 @@ abstract class InstanceElementImpl2 extends ElementImpl2
59405943
InstanceElementImpl get firstFragment;
59415944

59425945
@override
5943-
List<GetterElement> get getters2 {
5946+
List<GetterElement2OrMember> get getters2 {
59445947
_readMembers();
59455948
return accessors
59465949
.where((e) => e.isGetter)
5947-
.map((e) => e.asElement2 as GetterElement?)
5950+
.map((e) => e.asElement2 as GetterElement2OrMember)
59485951
.nonNulls
59495952
.toList();
59505953
}
@@ -6484,7 +6487,7 @@ abstract class InterfaceElementImpl extends InstanceElementImpl
64846487
}
64856488

64866489
@override
6487-
PropertyAccessorElement? getSetter(String setterName) {
6490+
PropertyAccessorElementOrMember? getSetter(String setterName) {
64886491
return getSetterFromAccessors(setterName, accessors);
64896492
}
64906493

@@ -6708,8 +6711,8 @@ abstract class InterfaceElementImpl extends InstanceElementImpl
67086711
}
67096712
}
67106713

6711-
static PropertyAccessorElement? getSetterFromAccessors(
6712-
String setterName, List<PropertyAccessorElement> accessors) {
6714+
static PropertyAccessorElementOrMember? getSetterFromAccessors(
6715+
String setterName, List<PropertyAccessorElementOrMember> accessors) {
67136716
// Do we need the check for isSetter below?
67146717
if (!setterName.endsWith('=')) {
67156718
setterName += '=';
@@ -7443,12 +7446,12 @@ class LibraryElementImpl extends ElementImpl
74437446
}
74447447

74457448
@override
7446-
List<GetterElement> get getters {
7447-
var declarations = <GetterElement>{};
7449+
List<GetterElement2OrMember> get getters {
7450+
var declarations = <GetterElement2OrMember>{};
74487451
for (var unit in units) {
74497452
declarations.addAll(unit._accessors
74507453
.where((accessor) => accessor.isGetter)
7451-
.map((accessor) => (accessor as GetterFragment).element));
7454+
.map((accessor) => accessor.element as GetterElement2OrMember));
74527455
}
74537456
return declarations.toList();
74547457
}
@@ -10441,7 +10444,13 @@ abstract class PropertyAccessorElementOrMember
1044110444
/// Common base class for all analyzer-internal classes that implement
1044210445
/// [PropertyInducingElement2].
1044310446
abstract class PropertyInducingElement2OrMember
10444-
implements VariableElement2OrMember, PropertyInducingElement2 {}
10447+
implements VariableElement2OrMember, PropertyInducingElement2 {
10448+
@override
10449+
GetterElement2OrMember? get getter2;
10450+
10451+
@override
10452+
SetterElement2OrMember? get setter2;
10453+
}
1044510454

1044610455
/// A concrete implementation of a [PropertyInducingElement].
1044710456
abstract class PropertyInducingElementImpl
@@ -10936,7 +10945,7 @@ class SuperFormalParameterElementImpl2 extends FormalParameterElementImpl
1093610945
}
1093710946

1093810947
@override
10939-
FormalParameterElement? get superConstructorParameter2 {
10948+
FormalParameterElementMixin? get superConstructorParameter2 {
1094010949
return firstFragment.superConstructorParameter?.asElement2;
1094110950
}
1094210951

@@ -11097,7 +11106,8 @@ class TopLevelVariableElementImpl2 extends PropertyInducingElementImpl2
1109711106
}
1109811107

1109911108
@override
11100-
GetterElement? get getter2 => firstFragment.getter2?.element;
11109+
GetterElementImpl? get getter2 =>
11110+
firstFragment.getter2?.element as GetterElementImpl?;
1110111111

1110211112
@override
1110311113
bool get hasImplicitType => firstFragment.hasImplicitType;
@@ -11129,7 +11139,8 @@ class TopLevelVariableElementImpl2 extends PropertyInducingElementImpl2
1112911139
String? get name3 => firstFragment.name2;
1113011140

1113111141
@override
11132-
SetterElement? get setter2 => firstFragment.setter2?.element;
11142+
SetterElementImpl? get setter2 =>
11143+
firstFragment.setter2?.element as SetterElementImpl?;
1113311144

1113411145
@override
1113511146
TypeImpl get type => firstFragment.type;

pkg/analyzer/lib/src/dart/element/generic_inferrer.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,7 @@ class GenericInferrer {
399399
void _checkArgumentsNotMatchingBounds({
400400
required SyntacticEntity? errorEntity,
401401
required ErrorReporter? errorReporter,
402-
required List<DartType> typeArguments,
402+
required List<TypeImpl> typeArguments,
403403
}) {
404404
for (int i = 0; i < _typeFormals.length; i++) {
405405
var parameter = _typeFormals[i];

pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -83,27 +83,22 @@ class InheritanceManager3 {
8383
/// not `null`, add a new [Conflict] to it.
8484
ExecutableElementOrMember? combineSignatures({
8585
required InterfaceElement targetClass,
86-
required List<ExecutableElement> candidates,
86+
required List<ExecutableElementOrMember> candidates,
8787
required bool doTopMerge,
8888
required Name name,
8989
List<Conflict>? conflicts,
9090
}) {
9191
// If just one candidate, it is always valid.
9292
if (candidates.length == 1) {
93-
// TODO(paulberry): eliminate this cast by changing the type of the
94-
// parameter `candidates`.
95-
return candidates[0] as ExecutableElementOrMember;
93+
return candidates[0];
9694
}
9795

9896
var targetLibrary = targetClass.library as LibraryElementImpl;
9997
var typeSystem = targetLibrary.typeSystem;
10098

10199
var validOverrides = <ExecutableElementOrMember>[];
102100
for (var i = 0; i < candidates.length; i++) {
103-
// TODO(paulberry): eliminate this cast by changing the type of the
104-
// parameter `candidates`.
105-
ExecutableElementOrMember? validOverride =
106-
candidates[i] as ExecutableElementOrMember;
101+
ExecutableElementOrMember? validOverride = candidates[i];
107102
var validOverrideType = validOverride.type;
108103
for (var j = 0; j < candidates.length; j++) {
109104
var candidate = candidates[j];
@@ -136,7 +131,7 @@ class InheritanceManager3 {
136131
}
137132

138133
/// Return the result of [getInherited2] with [type] substitution.
139-
ExecutableElement? getInherited(InterfaceType type, Name name) {
134+
ExecutableElementOrMember? getInherited(InterfaceType type, Name name) {
140135
var rawElement = getInherited2(type.element, name);
141136
if (rawElement == null) {
142137
return null;
@@ -228,7 +223,7 @@ class InheritanceManager3 {
228223
_findMostSpecificFromNamedCandidates(
229224
element,
230225
inheritedMap,
231-
element is ExtensionTypeElement
226+
element is ExtensionTypeElementImpl
232227
? interface.redeclared
233228
: interface.overridden,
234229
doTopMerge: false,
@@ -417,7 +412,8 @@ class InheritanceManager3 {
417412
/// Return all members of mixins, superclasses, and interfaces that a member
418413
/// with the given [name], defined in the [element], would override; or `null`
419414
/// if no members would be overridden.
420-
List<ExecutableElementOrMember>? getOverridden2(InterfaceElement element, Name name) {
415+
List<ExecutableElementOrMember>? getOverridden2(
416+
InterfaceElement element, Name name) {
421417
var interface = getInterface(element);
422418
return interface.overridden[name];
423419
}
@@ -535,7 +531,7 @@ class InheritanceManager3 {
535531
List<Conflict> _findMostSpecificFromNamedCandidates(
536532
InterfaceElement targetClass,
537533
Map<Name, ExecutableElement> map,
538-
Map<Name, List<ExecutableElement>> namedCandidates, {
534+
Map<Name, List<ExecutableElementOrMember>> namedCandidates, {
539535
required bool doTopMerge,
540536
}) {
541537
var conflicts = <Conflict>[];
@@ -623,7 +619,8 @@ class InheritanceManager3 {
623619
// }
624620
// So, each mixin always replaces members in the interface.
625621
// And there are individual override conflicts for each mixin.
626-
var candidatesFromSuperAndMixin = <Name, List<ExecutableElement>>{};
622+
var candidatesFromSuperAndMixin =
623+
<Name, List<ExecutableElementOrMember>>{};
627624
var mixinConflicts = <Conflict>[];
628625
for (var entry in mixinInterface.map.entries) {
629626
var name = entry.key;
@@ -807,7 +804,7 @@ class InheritanceManager3 {
807804
}
808805
}
809806

810-
var redeclared = <Name, List<ExecutableElement>>{};
807+
var redeclared = <Name, List<ExecutableElementOrMember>>{};
811808
var conflicts = <Conflict>[];
812809

813810
// Add extension type members.
@@ -915,7 +912,7 @@ class InheritanceManager3 {
915912
}
916913

917914
// Ensure unique overridden elements.
918-
var uniqueRedeclared = <Name, List<ExecutableElement>>{};
915+
var uniqueRedeclared = <Name, List<ExecutableElementOrMember>>{};
919916
for (var entry in redeclared.entries) {
920917
var name = entry.key;
921918
var elements = entry.value;
@@ -1267,7 +1264,7 @@ class Interface {
12671264

12681265
/// The map of names to the signatures from superinterfaces that a member
12691266
/// declaration in this extension type redeclares.
1270-
final Map<Name, List<ExecutableElement>> redeclared;
1267+
final Map<Name, List<ExecutableElementOrMember>> redeclared;
12711268

12721269
/// The map of names to the signatures from superinterfaces that a member
12731270
/// declaration in this extension type redeclares.
@@ -1308,7 +1305,7 @@ class Interface {
13081305

13091306
/// The map of names to their signature in the interface.
13101307
@experimental
1311-
Map<Name, ExecutableElement2> get map2 {
1308+
Map<Name, ExecutableElement2OrMember> get map2 {
13121309
return map.mapValue((element) => element.asElement2);
13131310
}
13141311

@@ -1420,7 +1417,7 @@ class _ExtensionTypeCandidates {
14201417

14211418
_ExtensionTypeCandidates(this.name);
14221419

1423-
List<ExecutableElement> get all {
1420+
List<ExecutableElementOrMember> get all {
14241421
return [...methods, ...getters, ...setters];
14251422
}
14261423

0 commit comments

Comments
 (0)