Skip to content

Commit 980baae

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Convert internal Element interfaces, known as '2OrMember', into mixins.
It was alreay a mixin for formal parameters, and I cannot think a disadvantage to make all other mixins. There is a possible advantage that we might provide also some methods with implementations, although currently we do not. This makes them consistent, which is nice IMHO. Change-Id: Ic8382c68b7e2719f94aeb01ff6553f6ff5249c70 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/442506 Reviewed-by: Paul Berry <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 0730b31 commit 980baae

File tree

2 files changed

+95
-59
lines changed

2 files changed

+95
-59
lines changed

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

Lines changed: 73 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -932,8 +932,8 @@ class ConstructorElementImpl extends ExecutableElementImpl
932932
}
933933

934934
/// Common implementation for methods defined in [ConstructorElement].
935-
mixin ConstructorElementMixin2
936-
implements ExecutableElement2OrMember, ConstructorElement {
935+
mixin ConstructorElementMixin2 on ExecutableElement2OrMember
936+
implements ConstructorElement {
937937
@override
938938
ConstructorElementImpl get baseElement;
939939

@@ -2190,7 +2190,7 @@ class EnumFragmentImpl extends InterfaceFragmentImpl implements EnumFragment {
21902190

21912191
/// Common base class for all analyzer-internal classes that implement
21922192
/// `ExecutableElement2`.
2193-
abstract class ExecutableElement2OrMember implements ExecutableElement {
2193+
mixin ExecutableElement2OrMember implements ExecutableElement {
21942194
@override
21952195
ExecutableElementImpl get baseElement;
21962196

@@ -2211,8 +2211,8 @@ abstract class ExecutableElement2OrMember implements ExecutableElement {
22112211
}
22122212

22132213
abstract class ExecutableElementImpl extends FunctionTypedElementImpl
2214-
with DeferredResolutionReadingMixin
2215-
implements ExecutableElement2OrMember, AnnotatableElementImpl {
2214+
with ExecutableElement2OrMember, DeferredResolutionReadingMixin
2215+
implements AnnotatableElementImpl {
22162216
TypeImpl? _returnType;
22172217
FunctionTypeImpl? _type;
22182218

@@ -2819,11 +2819,20 @@ class ExtensionTypeFragmentImpl extends InterfaceFragmentImpl
28192819

28202820
/// Common base class for all analyzer-internal classes that implement
28212821
/// `FieldElement2`.
2822-
abstract class FieldElement2OrMember
2823-
implements PropertyInducingElement2OrMember, FieldElement {}
2822+
mixin FieldElement2OrMember on PropertyInducingElement2OrMember
2823+
implements FieldElement {
2824+
@override
2825+
FieldElementImpl get baseElement;
2826+
2827+
@override
2828+
FieldFragmentImpl get firstFragment;
2829+
2830+
@override
2831+
List<FieldFragmentImpl> get fragments;
2832+
}
28242833

28252834
class FieldElementImpl extends PropertyInducingElementImpl
2826-
implements FieldElement2OrMember {
2835+
with FieldElement2OrMember {
28272836
@override
28282837
final Reference reference;
28292838

@@ -2836,7 +2845,7 @@ class FieldElementImpl extends PropertyInducingElementImpl
28362845
}
28372846

28382847
@override
2839-
FieldElement get baseElement => this;
2848+
FieldElementImpl get baseElement => this;
28402849

28412850
@override
28422851
InstanceElement get enclosingElement =>
@@ -3195,7 +3204,9 @@ class FormalParameterElementImpl extends PromotableElementImpl
31953204
@override
31963205
// TODO(augmentations): Implement the merge of formal parameters.
31973206
List<FormalParameterElementImpl> get formalParameters =>
3198-
wrappedElement.formalParameters.map((fragment) => fragment.element).toList();
3207+
wrappedElement.formalParameters
3208+
.map((fragment) => fragment.element)
3209+
.toList();
31993210

32003211
@override
32013212
List<FormalParameterFragmentImpl> get fragments {
@@ -3357,11 +3368,8 @@ class FormalParameterElementImpl extends PromotableElementImpl
33573368

33583369
/// A mixin that provides a common implementation for methods defined in
33593370
/// [FormalParameterElement].
3360-
mixin FormalParameterElementMixin
3361-
implements
3362-
FormalParameterElement,
3363-
SharedNamedFunctionParameter,
3364-
VariableElement2OrMember {
3371+
mixin FormalParameterElementMixin on VariableElement2OrMember
3372+
implements FormalParameterElement, SharedNamedFunctionParameter {
33653373
@override
33663374
FormalParameterElementImpl get baseElement;
33673375

@@ -4054,14 +4062,20 @@ class GenericFunctionTypeFragmentImpl extends FragmentImpl
40544062

40554063
/// Common base class for all analyzer-internal classes that implement
40564064
/// [GetterElement].
4057-
abstract class GetterElement2OrMember
4058-
implements PropertyAccessorElement2OrMember, GetterElement {
4065+
mixin GetterElement2OrMember on PropertyAccessorElement2OrMember
4066+
implements GetterElement {
40594067
@override
40604068
GetterElementImpl get baseElement;
4069+
4070+
@override
4071+
GetterFragmentImpl get firstFragment;
4072+
4073+
@override
4074+
List<GetterFragmentImpl> get fragments;
40614075
}
40624076

40634077
class GetterElementImpl extends PropertyAccessorElementImpl
4064-
implements GetterElement2OrMember {
4078+
with GetterElement2OrMember {
40654079
@override
40664080
Reference reference;
40674081

@@ -7469,14 +7483,20 @@ final class MetadataImpl implements Metadata {
74697483

74707484
/// Common base class for all analyzer-internal classes that implement
74717485
/// `MethodElement2`.
7472-
abstract class MethodElement2OrMember
7473-
implements MethodElement, ExecutableElement2OrMember {
7486+
mixin MethodElement2OrMember on ExecutableElement2OrMember
7487+
implements MethodElement {
74747488
@override
74757489
MethodElementImpl get baseElement;
7490+
7491+
@override
7492+
MethodFragmentImpl get firstFragment;
7493+
7494+
@override
7495+
List<MethodFragmentImpl> get fragments;
74767496
}
74777497

74787498
class MethodElementImpl extends ExecutableElementImpl
7479-
implements MethodElement2OrMember {
7499+
with MethodElement2OrMember {
74807500
@override
74817501
final Reference reference;
74827502

@@ -8591,11 +8611,17 @@ abstract class PromotableElementImpl extends VariableElementImpl {}
85918611

85928612
/// Common base class for all analyzer-internal classes that implement
85938613
/// `PropertyAccessorElement2`.
8594-
abstract class PropertyAccessorElement2OrMember
8595-
implements PropertyAccessorElement, ExecutableElement2OrMember {
8614+
mixin PropertyAccessorElement2OrMember on ExecutableElement2OrMember
8615+
implements PropertyAccessorElement {
85968616
@override
85978617
PropertyAccessorElementImpl get baseElement;
85988618

8619+
@override
8620+
PropertyAccessorFragmentImpl get firstFragment;
8621+
8622+
@override
8623+
List<PropertyAccessorFragmentImpl> get fragments;
8624+
85998625
@override
86008626
PropertyInducingElement2OrMember get variable;
86018627

@@ -8605,7 +8631,7 @@ abstract class PropertyAccessorElement2OrMember
86058631
}
86068632

86078633
abstract class PropertyAccessorElementImpl extends ExecutableElementImpl
8608-
implements PropertyAccessorElement2OrMember {
8634+
with PropertyAccessorElement2OrMember {
86098635
PropertyInducingElementImpl? _variable3;
86108636

86118637
@override
@@ -8723,15 +8749,21 @@ sealed class PropertyAccessorFragmentImpl extends ExecutableFragmentImpl
87238749

87248750
/// Common base class for all analyzer-internal classes that implement
87258751
/// [PropertyInducingElement].
8726-
abstract class PropertyInducingElement2OrMember
8727-
implements VariableElement2OrMember, PropertyInducingElement {
8752+
mixin PropertyInducingElement2OrMember on VariableElement2OrMember
8753+
implements PropertyInducingElement {
8754+
@override
8755+
PropertyInducingElementImpl get baseElement;
8756+
87288757
@override
87298758
GetterElement2OrMember? get getter;
87308759

87318760
@Deprecated('Use getter instead')
87328761
@override
87338762
GetterElement2OrMember? get getter2;
87348763

8764+
@override
8765+
LibraryElementImpl get library;
8766+
87358767
@override
87368768
MetadataImpl get metadata;
87378769

@@ -8744,8 +8776,8 @@ abstract class PropertyInducingElement2OrMember
87448776
}
87458777

87468778
abstract class PropertyInducingElementImpl extends VariableElementImpl
8747-
with DeferredResolutionReadingMixin
8748-
implements PropertyInducingElement2OrMember, AnnotatableElementImpl {
8779+
with PropertyInducingElement2OrMember, DeferredResolutionReadingMixin
8780+
implements AnnotatableElementImpl {
87498781
@override
87508782
GetterElementImpl? getter;
87518783

@@ -8932,14 +8964,20 @@ abstract class PropertyInducingFragmentImpl
89328964

89338965
/// Common base class for all analyzer-internal classes that implement
89348966
/// [SetterElement].
8935-
abstract class SetterElement2OrMember
8936-
implements PropertyAccessorElement2OrMember, SetterElement {
8967+
mixin SetterElement2OrMember on PropertyAccessorElement2OrMember
8968+
implements SetterElement {
89378969
@override
89388970
SetterElementImpl get baseElement;
8971+
8972+
@override
8973+
SetterFragmentImpl get firstFragment;
8974+
8975+
@override
8976+
List<SetterFragmentImpl> get fragments;
89398977
}
89408978

89418979
class SetterElementImpl extends PropertyAccessorElementImpl
8942-
implements SetterElement2OrMember {
8980+
with SetterElement2OrMember {
89438981
@override
89448982
Reference reference;
89458983

@@ -9411,7 +9449,7 @@ class TopLevelVariableElementImpl extends PropertyInducingElementImpl
94119449
}
94129450

94139451
@override
9414-
TopLevelVariableElement get baseElement => this;
9452+
TopLevelVariableElementImpl get baseElement => this;
94159453

94169454
@override
94179455
LibraryElementImpl get enclosingElement => library;
@@ -10273,13 +10311,14 @@ mixin TypeParameterizedFragmentMixin on FragmentImpl
1027310311

1027410312
/// Common base class for all analyzer-internal classes that implement
1027510313
/// `VariableElement2`.
10276-
abstract class VariableElement2OrMember implements VariableElement {
10314+
mixin VariableElement2OrMember implements VariableElement {
1027710315
@override
1027810316
TypeImpl get type;
1027910317
}
1028010318

1028110319
abstract class VariableElementImpl extends ElementImpl
10282-
implements VariableElement2OrMember, ConstantEvaluationTarget {
10320+
with VariableElement2OrMember
10321+
implements ConstantEvaluationTarget {
1028310322
ConstantInitializerImpl? _constantInitializer;
1028410323

1028510324
/// The result of evaluating [constantInitializer2].

0 commit comments

Comments
 (0)