Skip to content

Commit 31d5a22

Browse files
stereotype441Commit Queue
authored and
Commit Queue
committed
[analyzer] Change InheritanceManager3 to use Impl types.
The following methods of `InheritanceManager3` are changed so that their return types refer to Impl classes rather than analyzer public API classes: - `combineSignatures` - `getInherited2` - `getInheritedMap2` - `getMember` - `getMember2` To reduce the number of type casts this introduces, some of the parameters and return types of various private methods of `InheritanceManager3` are also changed to use Impl types, and some similar changes are made to the inheritance manager's internal data structures (`Interface` and `_ExtensionTypeCandidates`). Also, the following new classes are introduced, to act as common base classes for analyzer-internal classes in situations where no common base class previously existed: - `ExecutableElementOrMember` (the common base class for all internal classes that implement `ExecutableElement`) - `PropertyAccessorElementOrMember` (the common base class for all internal classes that implement `PropertyAccessorElement`) - `PropertyInducingElementOrMember` (the common base class for all internal classes that implement `PropertyInducingElement`) - `VariableElement2OrMember` (the common base class for all internal classes that implement `VariableElement2`) - `VariableElementOrMember` (the common base class for all internal classes that implement `VariableElement`) 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: Ib7f20480c1f57af22a0214075e8f0e13c3429340 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/405565 Commit-Queue: Paul Berry <[email protected]> Reviewed-by: Konstantin Shcheglov <[email protected]>
1 parent 6edbfd9 commit 31d5a22

File tree

8 files changed

+166
-86
lines changed

8 files changed

+166
-86
lines changed

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

Lines changed: 77 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1746,7 +1746,8 @@ class ConstructorElementImpl2 extends ExecutableElementImpl2
17461746
}
17471747

17481748
/// Common implementation for methods defined in [ConstructorElement].
1749-
mixin ConstructorElementMixin implements ConstructorElement {
1749+
mixin ConstructorElementMixin
1750+
implements ConstructorElement, ExecutableElementOrMember {
17501751
@override
17511752
bool get isDefaultConstructor {
17521753
// unnamed
@@ -3723,7 +3724,7 @@ class EnumElementImpl2 extends InterfaceElementImpl2
37233724
/// A base class for concrete implementations of an [ExecutableElement].
37243725
abstract class ExecutableElementImpl extends _ExistingElementImpl
37253726
with TypeParameterizedElementMixin, MacroTargetElement
3726-
implements ExecutableElement, ExecutableFragment {
3727+
implements ExecutableElementOrMember, ExecutableFragment {
37273728
/// A list containing all of the parameters defined by this executable
37283729
/// element.
37293730
List<ParameterElementImpl> _parameters = const [];
@@ -3950,6 +3951,16 @@ abstract class ExecutableElementImpl2 extends FunctionTypedElementImpl2
39503951
}
39513952
}
39523953

3954+
/// Common base class for all analyzer-internal classes that implement
3955+
/// `ExecutableElement`.
3956+
abstract class ExecutableElementOrMember implements ExecutableElement {
3957+
@override
3958+
TypeImpl get returnType;
3959+
3960+
@override
3961+
FunctionTypeImpl get type;
3962+
}
3963+
39533964
/// A concrete implementation of an [ExtensionElement].
39543965
class ExtensionElementImpl extends InstanceElementImpl
39553966
with AugmentableElement<ExtensionElementImpl>
@@ -4046,7 +4057,7 @@ class ExtensionElementImpl extends InstanceElementImpl
40464057
}
40474058

40484059
@override
4049-
PropertyAccessorElement? getGetter(String getterName) {
4060+
PropertyAccessorElementOrMember? getGetter(String getterName) {
40504061
for (var accessor in augmented.accessors) {
40514062
if (accessor.isGetter && accessor.name == getterName) {
40524063
return accessor;
@@ -4056,7 +4067,7 @@ class ExtensionElementImpl extends InstanceElementImpl
40564067
}
40574068

40584069
@override
4059-
MethodElement? getMethod(String methodName) {
4070+
MethodElementOrMember? getMethod(String methodName) {
40604071
for (var method in augmented.methods) {
40614072
if (method.name == methodName) {
40624073
return method;
@@ -4426,7 +4437,7 @@ class FieldElementImpl2 extends PropertyInducingElementImpl2
44264437
SetterElement? get setter2 => firstFragment.setter?.element as SetterElement?;
44274438

44284439
@override
4429-
DartType get type => firstFragment.type;
4440+
TypeImpl get type => firstFragment.type;
44304441

44314442
@override
44324443
T? accept2<T>(ElementVisitor2<T> visitor) {
@@ -4662,7 +4673,10 @@ class FormalParameterElementImpl extends PromotableElementImpl2
46624673
/// A mixin that provides a common implementation for methods defined in
46634674
/// [FormalParameterElement].
46644675
mixin FormalParameterElementMixin
4665-
implements FormalParameterElement, SharedNamedFunctionParameter {
4676+
implements
4677+
FormalParameterElement,
4678+
SharedNamedFunctionParameter,
4679+
VariableElement2OrMember {
46664680
@override
46674681
TypeImpl get type;
46684682

@@ -5157,7 +5171,8 @@ class FunctionElementImpl extends ExecutableElementImpl
51575171
FunctionElement,
51585172
FunctionTypedElementImpl,
51595173
LocalFunctionFragment,
5160-
TopLevelFunctionFragment {
5174+
TopLevelFunctionFragment,
5175+
ExecutableElementOrMember {
51615176
@override
51625177
String? name2;
51635178

@@ -5698,10 +5713,10 @@ abstract class InstanceElementImpl2 extends ElementImpl2
56985713
List<FieldElement> fields = [];
56995714

57005715
@override
5701-
List<PropertyAccessorElement> accessors = [];
5716+
List<PropertyAccessorElementOrMember> accessors = [];
57025717

57035718
@override
5704-
List<MethodElement> methods = [];
5719+
List<MethodElementOrMember> methods = [];
57055720

57065721
final List<MethodElementImpl2> internal_methods2 = [];
57075722

@@ -7734,7 +7749,10 @@ class LocalFunctionElementImpl extends ExecutableElementImpl2
77347749

77357750
/// A concrete implementation of a [LocalVariableElement].
77367751
class LocalVariableElementImpl extends NonParameterVariableElementImpl
7737-
implements LocalVariableElement, LocalVariableFragment {
7752+
implements
7753+
LocalVariableElement,
7754+
LocalVariableFragment,
7755+
VariableElementOrMember {
77387756
late LocalVariableElementImpl2 _element2 = switch (this) {
77397757
BindPatternVariableElementImpl() => BindPatternVariableElementImpl2(this),
77407758
JoinPatternVariableElementImpl() => JoinPatternVariableElementImpl2(this),
@@ -8268,6 +8286,8 @@ final class MetadataImpl implements Metadata {
82688286
}
82698287
}
82708288

8289+
/// Common base class for all analyzer-internal classes that implement
8290+
/// `MethodElement2`.
82718291
abstract class MethodElement2OrMember implements MethodElement2 {
82728292
@override
82738293
FunctionTypeImpl get type;
@@ -8433,7 +8453,13 @@ class MethodElementImpl2 extends ExecutableElementImpl2
84338453
}
84348454
}
84358455

8436-
abstract class MethodElementOrMember implements MethodElement {
8456+
/// Common base class for all analyzer-internal classes that implement
8457+
/// `MethodElement`.
8458+
abstract class MethodElementOrMember
8459+
implements MethodElement, ExecutableElementOrMember {
8460+
@override
8461+
TypeImpl get returnType;
8462+
84378463
@override
84388464
FunctionTypeImpl get type;
84398465
}
@@ -9522,7 +9548,8 @@ class ParameterElementImpl_ofImplicitSetter extends ParameterElementImpl {
95229548

95239549
/// A mixin that provides a common implementation for methods defined in
95249550
/// [ParameterElement].
9525-
mixin ParameterElementMixin implements ParameterElement {
9551+
mixin ParameterElementMixin
9552+
implements ParameterElement, VariableElementOrMember {
95269553
@override
95279554
bool get isNamed => parameterKind.isNamed;
95289555

@@ -9893,7 +9920,7 @@ abstract class PromotableElementImpl2 extends VariableElementImpl2
98939920
class PropertyAccessorElementImpl extends ExecutableElementImpl
98949921
with AugmentableElement<PropertyAccessorElementImpl>
98959922
implements
9896-
PropertyAccessorElement,
9923+
PropertyAccessorElementOrMember,
98979924
PropertyAccessorFragment,
98989925
GetterFragment,
98999926
SetterFragment {
@@ -10244,11 +10271,22 @@ class PropertyAccessorElementImpl_ImplicitSetter
1024410271
PropertyInducingElementImpl get variable2 => super.variable2!;
1024510272
}
1024610273

10274+
/// Common base class for all analyzer-internal classes that implement
10275+
/// `PropertyAccessorElement`.
10276+
abstract class PropertyAccessorElementOrMember
10277+
implements PropertyAccessorElement, ExecutableElementOrMember {
10278+
@override
10279+
TypeImpl get returnType;
10280+
10281+
@override
10282+
PropertyInducingElementOrMember? get variable2;
10283+
}
10284+
1024710285
/// A concrete implementation of a [PropertyInducingElement].
1024810286
abstract class PropertyInducingElementImpl
1024910287
extends NonParameterVariableElementImpl
1025010288
with MacroTargetElement
10251-
implements PropertyInducingElement, PropertyInducingFragment {
10289+
implements PropertyInducingElementOrMember, PropertyInducingFragment {
1025210290
@override
1025310291
String? name2;
1025410292

@@ -10449,6 +10487,14 @@ abstract class PropertyInducingElementImpl2 extends VariableElementImpl2
1044910487
List<PropertyInducingElementImpl> get _fragments;
1045010488
}
1045110489

10490+
/// Common base class for all analyzer-internal classes that implement
10491+
/// `PropertyInducingElement`.
10492+
abstract class PropertyInducingElementOrMember
10493+
implements PropertyInducingElement, VariableElementOrMember {
10494+
@override
10495+
TypeImpl get type;
10496+
}
10497+
1045210498
/// Instances of this class are set for fields and top-level variables
1045310499
/// to perform top-level type inference during linking.
1045410500
abstract class PropertyInducingElementTypeInference {
@@ -10844,7 +10890,7 @@ class TopLevelVariableElementImpl2 extends PropertyInducingElementImpl2
1084410890
firstFragment.setter2?.element as SetterElement?;
1084510891

1084610892
@override
10847-
DartType get type => firstFragment.type;
10893+
TypeImpl get type => firstFragment.type;
1084810894

1084910895
@override
1085010896
T? accept2<T>(ElementVisitor2<T> visitor) {
@@ -11553,9 +11599,16 @@ abstract class UriReferencedElementImpl extends _ExistingElementImpl
1155311599
}
1155411600
}
1155511601

11602+
/// Common base class for all analyzer-internal classes that implement
11603+
/// `VariableElement2`.
11604+
abstract class VariableElement2OrMember implements VariableElement2 {
11605+
@override
11606+
TypeImpl get type;
11607+
}
11608+
1155611609
/// A concrete implementation of a [VariableElement].
1155711610
abstract class VariableElementImpl extends ElementImpl
11558-
implements VariableElement {
11611+
implements VariableElementOrMember {
1155911612
/// The type of this variable.
1156011613
TypeImpl? _type;
1156111614

@@ -11665,7 +11718,7 @@ abstract class VariableElementImpl extends ElementImpl
1166511718
}
1166611719

1166711720
abstract class VariableElementImpl2 extends ElementImpl2
11668-
implements VariableElement2 {
11721+
implements VariableElement2OrMember {
1166911722
@override
1167011723
void visitChildren2<T>(ElementVisitor2<T> visitor) {
1167111724
for (var child in children2) {
@@ -11674,6 +11727,13 @@ abstract class VariableElementImpl2 extends ElementImpl2
1167411727
}
1167511728
}
1167611729

11730+
/// Common base class for all analyzer-internal classes that implement
11731+
/// `VariableElement`.
11732+
abstract class VariableElementOrMember implements VariableElement {
11733+
@override
11734+
TypeImpl get type;
11735+
}
11736+
1167711737
mixin WrappedElementMixin implements ElementImpl2 {
1167811738
@override
1167911739
bool get isSynthetic => _wrappedElement.isSynthetic;

0 commit comments

Comments
 (0)