Skip to content

Commit ba9ef09

Browse files
stereotype441Commit Queue
authored andcommitted
[analyzer] Switch more types to "Impl" types.
Field types, getter types, method return types, and method parameter types are changed to `Impl` types in the following classes and extensions: - `CompoundAssignmentExpressionImpl` - `ExecutableElementExtensionQuestion` - `ExtensionElementImpl` - `ExtensionResolutionError` - `FunctionReferenceResolver` - `InstanceElementImpl2` - `InstantiatedExtensionWithMember` - `InstantiatedExtensionWithMember2` - `InterfaceElementImpl` - `InvocationInferrer` - `LexicalLookupResult` - `LocalVariableTypeProvider` - `PostfixExpressionResolver` - `PropertyElementResolverResult` - `RecordTypeExtension` - `ResolutionResult` - `ResolverVisitor` - `SimpleResolutionResult` - `TypePropertyResolver` There is no change to the analyzer public API. This is part of a larger arc of work to change the analyzer's use of the shared code so that the type parameters it supplies are not part of the analyzer public API. See #59763. Change-Id: I5d0d432301df38c7a5ccc7c65767cf73ce7b5d7d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/405801 Commit-Queue: Paul Berry <[email protected]> Auto-Submit: Paul Berry <[email protected]> Reviewed-by: Konstantin Shcheglov <[email protected]>
1 parent 4c3e7ab commit ba9ef09

20 files changed

+180
-136
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3691,10 +3691,10 @@ base mixin CompoundAssignmentExpressionImpl
36913691
Element? writeElement;
36923692

36933693
@override
3694-
DartType? readType;
3694+
TypeImpl? readType;
36953695

36963696
@override
3697-
DartType? writeType;
3697+
TypeImpl? writeType;
36983698

36993699
@experimental
37003700
@override

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

Lines changed: 46 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1717,7 +1717,7 @@ class ConstructorElementImpl2 extends ExecutableElementImpl2
17171717
?.element;
17181718

17191719
@override
1720-
InterfaceType get returnType {
1720+
InterfaceTypeImpl get returnType {
17211721
return firstFragment.returnType;
17221722
}
17231723

@@ -3721,6 +3721,16 @@ class EnumElementImpl2 extends InterfaceElementImpl2
37213721
}
37223722
}
37233723

3724+
/// Common base class for all analyzer-internal classes that implement
3725+
/// `ExecutableElement2`.
3726+
abstract class ExecutableElement2OrMember implements ExecutableElement2 {
3727+
@override
3728+
TypeImpl get returnType;
3729+
3730+
@override
3731+
FunctionTypeImpl get type;
3732+
}
3733+
37243734
/// A base class for concrete implementations of an [ExecutableElement].
37253735
abstract class ExecutableElementImpl extends _ExistingElementImpl
37263736
with TypeParameterizedElementMixin, MacroTargetElement
@@ -3917,7 +3927,7 @@ abstract class ExecutableElementImpl extends _ExistingElementImpl
39173927
}
39183928

39193929
abstract class ExecutableElementImpl2 extends FunctionTypedElementImpl2
3920-
implements ExecutableElement2 {
3930+
implements ExecutableElement2OrMember {
39213931
@override
39223932
ExecutableElement2 get baseElement => this;
39233933

@@ -4001,7 +4011,7 @@ class ExtensionElementImpl extends InstanceElementImpl
40014011
}
40024012

40034013
@override
4004-
DartType get extendedType {
4014+
TypeImpl get extendedType {
40054015
return augmented.extendedType;
40064016
}
40074017

@@ -4245,7 +4255,7 @@ class ExtensionTypeElementImpl2 extends InterfaceElementImpl2
42454255
/// A concrete implementation of a [FieldElement].
42464256
class FieldElementImpl extends PropertyInducingElementImpl
42474257
with AugmentableElement<FieldElementImpl>
4248-
implements FieldElement, FieldFragment {
4258+
implements FieldElementOrMember, FieldFragment {
42494259
/// True if this field inherits from a covariant parameter. This happens
42504260
/// when it overrides a field in a supertype that is covariant.
42514261
bool inheritsCovariant = false;
@@ -4448,6 +4458,13 @@ class FieldElementImpl2 extends PropertyInducingElementImpl2
44484458
DartObject? computeConstantValue() => firstFragment.computeConstantValue();
44494459
}
44504460

4461+
/// Common base class for all analyzer-internal classes that implement
4462+
/// `FieldElement`.
4463+
abstract class FieldElementOrMember implements FieldElement {
4464+
@override
4465+
TypeImpl get type;
4466+
}
4467+
44514468
/// A [ParameterElementImpl] that has the additional information of the
44524469
/// [FieldElement] associated with the parameter.
44534470
class FieldFormalParameterElementImpl extends ParameterElementImpl
@@ -5136,7 +5153,7 @@ mixin FragmentedFunctionTypedElementMixin<E extends ExecutableFragment>
51365153
};
51375154
}
51385155

5139-
DartType get returnType => type.returnType;
5156+
TypeImpl get returnType => type.returnType;
51405157

51415158
// TODO(augmentations): This is wrong. The function type needs to be a merge
51425159
// of the function types of all of the fragments, but I don't know how to
@@ -5718,7 +5735,7 @@ abstract class InstanceElementImpl2 extends ElementImpl2
57185735
InstanceElement2,
57195736
TypeParameterizedElement2 {
57205737
@override
5721-
List<FieldElement> fields = [];
5738+
List<FieldElementOrMember> fields = [];
57225739

57235740
@override
57245741
List<PropertyAccessorElementOrMember> accessors = [];
@@ -5833,7 +5850,7 @@ abstract class InstanceElementImpl2 extends ElementImpl2
58335850
multiline: multiline, preferTypeAlias: preferTypeAlias);
58345851

58355852
@override
5836-
FieldElement? getField(String name) {
5853+
FieldElementOrMember? getField(String name) {
58375854
var length = fields.length;
58385855
for (var i = 0; i < length; i++) {
58395856
var field = fields[i];
@@ -6279,13 +6296,13 @@ abstract class InterfaceElementImpl extends InstanceElementImpl
62796296
}
62806297

62816298
@override
6282-
PropertyAccessorElement? getGetter(String getterName) {
6299+
PropertyAccessorElementOrMember? getGetter(String getterName) {
62836300
return accessors.firstWhereOrNull(
62846301
(accessor) => accessor.isGetter && accessor.name == getterName);
62856302
}
62866303

62876304
@override
6288-
MethodElement? getMethod(String methodName) {
6305+
MethodElementOrMember? getMethod(String methodName) {
62896306
return methods.firstWhereOrNull((method) => method.name == methodName);
62906307
}
62916308

@@ -6398,7 +6415,7 @@ abstract class InterfaceElementImpl extends InstanceElementImpl
63986415
/// This method should be used only for error recovery during analysis,
63996416
/// when instance access to a static class member, defined in this class,
64006417
/// or a superclass.
6401-
PropertyAccessorElement? lookupStaticGetter(
6418+
PropertyAccessorElementOrMember? lookupStaticGetter(
64026419
String name, LibraryElement library) {
64036420
return _implementationsOfGetter(name).firstWhereOrNull(
64046421
(element) => element.isStatic && element.isAccessibleIn(library));
@@ -6409,7 +6426,8 @@ abstract class InterfaceElementImpl extends InstanceElementImpl
64096426
/// This method should be used only for error recovery during analysis,
64106427
/// when instance access to a static class member, defined in this class,
64116428
/// or a superclass.
6412-
MethodElement? lookupStaticMethod(String name, LibraryElement library) {
6429+
MethodElementOrMember? lookupStaticMethod(
6430+
String name, LibraryElement library) {
64136431
return _implementationsOfMethod(name).firstWhereOrNull(
64146432
(element) => element.isStatic && element.isAccessibleIn(library));
64156433
}
@@ -6443,16 +6461,16 @@ abstract class InterfaceElementImpl extends InstanceElementImpl
64436461
/// The getters are returned based on the depth of their defining class; if
64446462
/// this class contains a definition of the getter it will occur first, if
64456463
/// Object contains a definition of the getter it will occur last.
6446-
Iterable<PropertyAccessorElement> _implementationsOfGetter(
6464+
Iterable<PropertyAccessorElementOrMember> _implementationsOfGetter(
64476465
String getterName) sync* {
64486466
var visitedClasses = <InterfaceElement>{};
6449-
InterfaceElement? classElement = this;
6467+
InterfaceElementImpl? classElement = this;
64506468
while (classElement != null && visitedClasses.add(classElement)) {
64516469
var getter = classElement.getGetter(getterName);
64526470
if (getter != null) {
64536471
yield getter;
64546472
}
6455-
for (InterfaceType mixin in classElement.mixins.reversed) {
6473+
for (var mixin in classElement.mixins.reversed) {
64566474
getter = mixin.element.getGetter(getterName);
64576475
if (getter != null) {
64586476
yield getter;
@@ -6473,15 +6491,16 @@ abstract class InterfaceElementImpl extends InstanceElementImpl
64736491
/// The methods are returned based on the depth of their defining class; if
64746492
/// this class contains a definition of the method it will occur first, if
64756493
/// Object contains a definition of the method it will occur last.
6476-
Iterable<MethodElement> _implementationsOfMethod(String methodName) sync* {
6494+
Iterable<MethodElementOrMember> _implementationsOfMethod(
6495+
String methodName) sync* {
64776496
var visitedClasses = <InterfaceElement>{};
6478-
InterfaceElement? classElement = this;
6497+
InterfaceElementImpl? classElement = this;
64796498
while (classElement != null && visitedClasses.add(classElement)) {
64806499
var method = classElement.getMethod(methodName);
64816500
if (method != null) {
64826501
yield method;
64836502
}
6484-
for (InterfaceType mixin in classElement.mixins.reversed) {
6503+
for (var mixin in classElement.mixins.reversed) {
64856504
method = mixin.element.getMethod(methodName);
64866505
if (method != null) {
64876506
yield method;
@@ -7734,10 +7753,10 @@ class LocalFunctionElementImpl extends ExecutableElementImpl2
77347753
Metadata get metadata2 => _wrappedElement.metadata2;
77357754

77367755
@override
7737-
DartType get returnType => _wrappedElement.returnType;
7756+
TypeImpl get returnType => _wrappedElement.returnType;
77387757

77397758
@override
7740-
FunctionType get type => _wrappedElement.type;
7759+
FunctionTypeImpl get type => _wrappedElement.type;
77417760

77427761
@override
77437762
List<TypeParameterElement2> get typeParameters2 =>
@@ -8296,10 +8315,8 @@ final class MetadataImpl implements Metadata {
82968315

82978316
/// Common base class for all analyzer-internal classes that implement
82988317
/// `MethodElement2`.
8299-
abstract class MethodElement2OrMember implements MethodElement2 {
8300-
@override
8301-
FunctionTypeImpl get type;
8302-
}
8318+
abstract class MethodElement2OrMember
8319+
implements MethodElement2, ExecutableElement2OrMember {}
83038320

83048321
/// A concrete implementation of a [MethodElement].
83058322
class MethodElementImpl extends ExecutableElementImpl
@@ -9924,6 +9941,11 @@ class PrefixFragmentImpl implements PrefixFragment {
99249941
abstract class PromotableElementImpl2 extends VariableElementImpl2
99259942
implements PromotableElement2 {}
99269943

9944+
/// Common base class for all analyzer-internal classes that implement
9945+
/// `PropertyAccessorElement2`.
9946+
abstract class PropertyAccessorElement2OrMember
9947+
implements PropertyAccessorElement2, ExecutableElement2OrMember {}
9948+
99279949
/// A concrete implementation of a [PropertyAccessorElement].
99289950
class PropertyAccessorElementImpl extends ExecutableElementImpl
99299951
with AugmentableElement<PropertyAccessorElementImpl>
@@ -10123,7 +10145,7 @@ class PropertyAccessorElementImpl extends ExecutableElementImpl
1012310145
}
1012410146

1012510147
abstract class PropertyAccessorElementImpl2 extends ExecutableElementImpl2
10126-
implements PropertyAccessorElement2 {
10148+
implements PropertyAccessorElement2OrMember {
1012710149
@override
1012810150
PropertyAccessorElement2 get baseElement => this;
1012910151

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

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import 'package:analyzer/dart/element/element2.dart';
1010
import 'package:analyzer/dart/element/nullability_suffix.dart';
1111
import 'package:analyzer/dart/element/type.dart';
1212
import 'package:analyzer/src/dart/element/element.dart';
13+
import 'package:analyzer/src/dart/element/type.dart';
1314
import 'package:analyzer/src/generated/utilities_dart.dart';
1415
import 'package:meta/meta_meta.dart';
1516

@@ -178,10 +179,12 @@ extension ExecutableElementExtension on ExecutableElement {
178179
}
179180

180181
extension ExecutableElementExtensionQuestion on ExecutableElement? {
181-
DartType? get firstParameterType {
182+
TypeImpl? get firstParameterType {
182183
var self = this;
183-
if (self is MethodElement) {
184-
return self.parameters.firstOrNull?.type;
184+
if (self is MethodElementOrMember) {
185+
// TODO(paulberry): eliminate this cast by changing this extension to
186+
// apply to `ExecutableElementOrMember?`.
187+
return self.parameters.firstOrNull?.type as TypeImpl?;
185188
}
186189
return null;
187190
}
@@ -262,23 +265,27 @@ extension RecordTypeExtension on RecordType {
262265

263266
/// The [name] is either an actual name like `foo` in `({int foo})`, or
264267
/// the name of a positional field like `$1` in `(int, String)`.
265-
RecordTypeField? fieldByName(String name) {
268+
RecordTypeFieldImpl? fieldByName(String name) {
266269
return namedField(name) ?? positionalField(name);
267270
}
268271

269-
RecordTypeNamedField? namedField(String name) {
272+
RecordTypeNamedFieldImpl? namedField(String name) {
270273
for (var field in namedFields) {
271274
if (field.name == name) {
272-
return field;
275+
// TODO(paulberry): eliminate this cast by changing the extension to
276+
// only apply to `RecordTypeImpl`.
277+
return field as RecordTypeNamedFieldImpl;
273278
}
274279
}
275280
return null;
276281
}
277282

278-
RecordTypePositionalField? positionalField(String name) {
283+
RecordTypePositionalFieldImpl? positionalField(String name) {
279284
var index = positionalFieldIndex(name);
280285
if (index != null && index < positionalFields.length) {
281-
return positionalFields[index];
286+
// TODO(paulberry): eliminate this cast by changing the extension to only
287+
// apply to `RecordTypeImpl`.
288+
return positionalFields[index] as RecordTypePositionalFieldImpl;
282289
}
283290
return null;
284291
}

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -299,8 +299,6 @@ class InheritanceManager3 {
299299
}
300300

301301
var substitution = Substitution.fromInterfaceType(type);
302-
// TODO(paulberry): eliminate this cast by changing the return type of
303-
// `ExecutalbeMember.from2`.
304302
return ExecutableMember.from2(rawElement, substitution);
305303
}
306304

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ class ConstructorMember extends ExecutableMember
202202
/// An executable element defined in a parameterized type where the values of
203203
/// the type parameters are known.
204204
abstract class ExecutableMember extends Member
205-
implements ExecutableElementOrMember, ExecutableElement2 {
205+
implements ExecutableElementOrMember, ExecutableElement2OrMember {
206206
@override
207207
final List<TypeParameterElement> typeParameters;
208208

@@ -379,7 +379,7 @@ abstract class ExecutableMember extends Member
379379
}
380380
}
381381

382-
static ExecutableElement2 from(
382+
static ExecutableElement2OrMember from(
383383
ExecutableElement2 element,
384384
MapSubstitution substitution,
385385
) {
@@ -507,7 +507,7 @@ class FieldFormalParameterMember extends ParameterMember
507507
/// parameters are known.
508508
class FieldMember extends VariableMember
509509
implements
510-
FieldElement,
510+
FieldElementOrMember,
511511
FieldElement2,
512512
VariableElement2OrMember,
513513
PropertyInducingElementOrMember {
@@ -1348,7 +1348,9 @@ class ParameterMember extends VariableMember
13481348
/// A property accessor element defined in a parameterized type where the values
13491349
/// of the type parameters are known.
13501350
abstract class PropertyAccessorMember extends ExecutableMember
1351-
implements PropertyAccessorElementOrMember, PropertyAccessorElement2 {
1351+
implements
1352+
PropertyAccessorElementOrMember,
1353+
PropertyAccessorElement2OrMember {
13521354
factory PropertyAccessorMember(
13531355
PropertyAccessorElement declaration,
13541356
MapSubstitution augmentationSubstitution,

pkg/analyzer/lib/src/dart/resolver/applicable_extensions.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class InstantiatedExtensionWithMember {
3535

3636
ExtensionElement2 get extension => candidate.extension;
3737

38-
ExecutableElement2? get getter {
38+
ExecutableElement2OrMember? get getter {
3939
var getter = candidate.getter;
4040
if (getter == null) {
4141
return null;

pkg/analyzer/lib/src/dart/resolver/comment_reference_resolver.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ class CommentReferenceResolver {
154154
}
155155

156156
if (element == null) {
157-
InterfaceType enclosingType;
157+
InterfaceTypeImpl enclosingType;
158158
var enclosingClass = _resolver.enclosingClass;
159159
if (enclosingClass != null) {
160160
enclosingType = enclosingClass.thisType;

pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -483,10 +483,10 @@ enum ExtensionResolutionError implements ExtensionResolutionResult {
483483
ambiguous;
484484

485485
@override
486-
ExecutableElement? get getter => null;
486+
ExecutableElementOrMember? get getter => null;
487487

488488
@override
489-
ExecutableElement2? get getter2 => null;
489+
ExecutableElement2OrMember? get getter2 => null;
490490

491491
@override
492492
ExecutableElement? get setter => null;

0 commit comments

Comments
 (0)