Skip to content

Commit 9bd6cbc

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Inline TypeParameterizedFragmentMixin and simplify element classes.
Remove `TypeParameterizedFragmentMixin` and inline its functionality directly into the classes that were using it. This refactoring simplifies the class hierarchy and makes the code easier to follow by co-locating the implementation with its usage. The mixin's implementation has been moved into the following classes: * `ExecutableFragmentImpl` * `GenericFunctionTypeFragmentImpl` * `InstanceFragmentImpl` * `TypeAliasFragmentImpl` This change also simplifies the `isSimplyBounded` getter in several related classes to return `true` directly, removing unnecessary delegation and ensuring consistent behavior. Change-Id: Ia6bb3f5784ba6a32693a42067adbf1622b8bb871 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/445621 Reviewed-by: Paul Berry <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 34ce33d commit 9bd6cbc

File tree

1 file changed

+116
-56
lines changed

1 file changed

+116
-56
lines changed

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

Lines changed: 116 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -2149,9 +2149,7 @@ abstract class ExecutableElementImpl extends FunctionTypedElementImpl
21492149
}
21502150

21512151
@override
2152-
bool get isSimplyBounded {
2153-
return firstFragment.isSimplyBounded;
2154-
}
2152+
bool get isSimplyBounded => true;
21552153

21562154
@override
21572155
bool get isStatic {
@@ -2250,11 +2248,10 @@ abstract class ExecutableElementImpl extends FunctionTypedElementImpl
22502248

22512249
@GenerateFragmentImpl(modifiers: _ExecutableFragmentImplModifiers.values)
22522250
abstract class ExecutableFragmentImpl extends FragmentImpl
2253-
with
2254-
DeferredResolutionReadingMixin,
2255-
TypeParameterizedFragmentMixin,
2256-
_ExecutableFragmentImplMixin
2251+
with DeferredResolutionReadingMixin, _ExecutableFragmentImplMixin
22572252
implements ExecutableFragment {
2253+
List<TypeParameterFragmentImpl> _typeParameters = const [];
2254+
22582255
/// A list containing all of the parameters defined by this executable
22592256
/// element.
22602257
List<FormalParameterFragmentImpl> _formalParameters = const [];
@@ -2311,14 +2308,38 @@ abstract class ExecutableFragmentImpl extends FragmentImpl
23112308
@override
23122309
bool get isSynchronous => !isAsynchronous;
23132310

2311+
@override
2312+
LibraryFragmentImpl get libraryFragment => enclosingUnit;
2313+
23142314
@override
23152315
MetadataImpl get metadata {
23162316
_ensureReadResolution();
23172317
return super.metadata;
23182318
}
23192319

2320+
@Deprecated('Use metadata instead')
2321+
@override
2322+
MetadataImpl get metadata2 => metadata;
2323+
23202324
@override
23212325
int get offset => nameOffset ?? firstTokenOffset!;
2326+
2327+
@override
2328+
List<TypeParameterFragmentImpl> get typeParameters {
2329+
_ensureReadResolution();
2330+
return _typeParameters;
2331+
}
2332+
2333+
set typeParameters(List<TypeParameterFragmentImpl> typeParameters) {
2334+
for (var typeParameter in typeParameters) {
2335+
typeParameter.enclosingFragment = this;
2336+
}
2337+
_typeParameters = typeParameters;
2338+
}
2339+
2340+
@Deprecated('Use typeParameters instead')
2341+
@override
2342+
List<TypeParameterFragmentImpl> get typeParameters2 => typeParameters;
23222343
}
23232344

23242345
class ExtensionElementImpl extends InstanceElementImpl
@@ -3600,7 +3621,7 @@ class GenericFunctionTypeElementImpl extends FunctionTypedElementImpl
36003621
}
36013622

36023623
@override
3603-
bool get isSimplyBounded => firstFragment.isSimplyBounded;
3624+
bool get isSimplyBounded => true;
36043625

36053626
@override
36063627
bool get isSynthetic => firstFragment.isSynthetic;
@@ -3659,8 +3680,10 @@ class GenericFunctionTypeElementImpl extends FunctionTypedElementImpl
36593680
///
36603681
/// Clients may not extend, implement or mix-in this class.
36613682
class GenericFunctionTypeFragmentImpl extends FragmentImpl
3662-
with DeferredResolutionReadingMixin, TypeParameterizedFragmentMixin
3683+
with DeferredResolutionReadingMixin
36633684
implements FunctionTypedFragmentImpl, GenericFunctionTypeFragment {
3685+
List<TypeParameterFragmentImpl> _typeParameters = const [];
3686+
36643687
/// The declared return type of the function.
36653688
TypeImpl? _returnType;
36663689

@@ -3704,6 +3727,13 @@ class GenericFunctionTypeFragmentImpl extends FragmentImpl
37043727
_formalParameters = formalParameters;
37053728
}
37063729

3730+
@override
3731+
LibraryFragmentImpl get libraryFragment => enclosingUnit;
3732+
3733+
@Deprecated('Use metadata instead')
3734+
@override
3735+
MetadataImpl get metadata2 => metadata;
3736+
37073737
@override
37083738
String? get name => null;
37093739

@@ -3753,6 +3783,23 @@ class GenericFunctionTypeFragmentImpl extends FragmentImpl
37533783
set type(FunctionTypeImpl type) {
37543784
_type = type;
37553785
}
3786+
3787+
@override
3788+
List<TypeParameterFragmentImpl> get typeParameters {
3789+
_ensureReadResolution();
3790+
return _typeParameters;
3791+
}
3792+
3793+
set typeParameters(List<TypeParameterFragmentImpl> typeParameters) {
3794+
for (var typeParameter in typeParameters) {
3795+
typeParameter.enclosingFragment = this;
3796+
}
3797+
_typeParameters = typeParameters;
3798+
}
3799+
3800+
@Deprecated('Use typeParameters instead')
3801+
@override
3802+
List<TypeParameterFragmentImpl> get typeParameters2 => typeParameters;
37563803
}
37573804

37583805
class GetterElementImpl extends PropertyAccessorElementImpl
@@ -4350,10 +4397,7 @@ abstract class InstanceElementImpl extends ElementImpl
43504397
}
43514398

43524399
abstract class InstanceFragmentImpl extends FragmentImpl
4353-
with
4354-
DeferredMembersReadingMixin,
4355-
DeferredResolutionReadingMixin,
4356-
TypeParameterizedFragmentMixin
4400+
with DeferredMembersReadingMixin, DeferredResolutionReadingMixin
43574401
implements InstanceFragment {
43584402
@override
43594403
final String? name;
@@ -4367,6 +4411,7 @@ abstract class InstanceFragmentImpl extends FragmentImpl
43674411
@override
43684412
InstanceFragmentImpl? nextFragment;
43694413

4414+
List<TypeParameterFragmentImpl> _typeParameters = const [];
43704415
List<FieldFragmentImpl> _fields = _Sentinel.fieldFragment;
43714416
List<GetterFragmentImpl> _getters = _Sentinel.getterFragment;
43724417
List<SetterFragmentImpl> _setters = _Sentinel.setterFragment;
@@ -4425,12 +4470,26 @@ abstract class InstanceFragmentImpl extends FragmentImpl
44254470
_getters = getters;
44264471
}
44274472

4473+
/// If the element defines a type, indicates whether the type may safely
4474+
/// appear without explicit type parameters as the bounds of a type parameter
4475+
/// declaration.
4476+
///
4477+
/// If the element does not define a type, returns `true`.
4478+
bool get isSimplyBounded;
4479+
4480+
@override
4481+
LibraryFragmentImpl get libraryFragment => enclosingUnit;
4482+
44284483
@override
44294484
MetadataImpl get metadata {
44304485
_ensureReadResolution();
44314486
return super.metadata;
44324487
}
44334488

4489+
@Deprecated('Use metadata instead')
4490+
@override
4491+
MetadataImpl get metadata2 => metadata;
4492+
44344493
@override
44354494
List<MethodFragmentImpl> get methods {
44364495
if (!identical(_methods, _Sentinel.methodFragment)) {
@@ -4474,6 +4533,23 @@ abstract class InstanceFragmentImpl extends FragmentImpl
44744533
_setters = setters;
44754534
}
44764535

4536+
@override
4537+
List<TypeParameterFragmentImpl> get typeParameters {
4538+
_ensureReadResolution();
4539+
return _typeParameters;
4540+
}
4541+
4542+
set typeParameters(List<TypeParameterFragmentImpl> typeParameters) {
4543+
for (var typeParameter in typeParameters) {
4544+
typeParameter.enclosingFragment = this;
4545+
}
4546+
_typeParameters = typeParameters;
4547+
}
4548+
4549+
@Deprecated('Use typeParameters instead')
4550+
@override
4551+
List<TypeParameterFragmentImpl> get typeParameters2 => typeParameters;
4552+
44774553
void addField(FieldFragmentImpl fragment) {
44784554
if (identical(_fields, _Sentinel.fieldFragment)) {
44794555
_fields = [];
@@ -9610,17 +9686,16 @@ class TypeAliasElementImpl extends ElementImpl
96109686
/// Clients may not extend, implement or mix-in this class.
96119687
@GenerateFragmentImpl(modifiers: _TypeAliasFragmentImplModifiers.values)
96129688
class TypeAliasFragmentImpl extends FragmentImpl
9613-
with
9614-
DeferredResolutionReadingMixin,
9615-
TypeParameterizedFragmentMixin,
9616-
_TypeAliasFragmentImplMixin
9689+
with DeferredResolutionReadingMixin, _TypeAliasFragmentImplMixin
96179690
implements TypeAliasFragment {
96189691
@override
96199692
final String? name;
96209693

96219694
@override
96229695
int? nameOffset;
96239696

9697+
List<TypeParameterFragmentImpl> _typeParameters = const [];
9698+
96249699
@override
96259700
TypeAliasFragmentImpl? previousFragment;
96269701

@@ -9668,15 +9743,39 @@ class TypeAliasFragmentImpl extends FragmentImpl
96689743
LibraryFragmentImpl get enclosingFragment =>
96699744
super.enclosingFragment as LibraryFragmentImpl;
96709745

9746+
@override
9747+
LibraryFragmentImpl get libraryFragment => enclosingUnit;
9748+
96719749
@override
96729750
MetadataImpl get metadata {
96739751
_ensureReadResolution();
96749752
return super.metadata;
96759753
}
96769754

9755+
@Deprecated('Use metadata instead')
9756+
@override
9757+
MetadataImpl get metadata2 => metadata;
9758+
96779759
@override
96789760
int get offset => nameOffset ?? firstTokenOffset!;
96799761

9762+
@override
9763+
List<TypeParameterFragmentImpl> get typeParameters {
9764+
_ensureReadResolution();
9765+
return _typeParameters;
9766+
}
9767+
9768+
set typeParameters(List<TypeParameterFragmentImpl> typeParameters) {
9769+
for (var typeParameter in typeParameters) {
9770+
typeParameter.enclosingFragment = this;
9771+
}
9772+
_typeParameters = typeParameters;
9773+
}
9774+
9775+
@Deprecated('Use typeParameters instead')
9776+
@override
9777+
List<TypeParameterFragmentImpl> get typeParameters2 => typeParameters;
9778+
96809779
void addFragment(TypeAliasFragmentImpl fragment) {
96819780
fragment.element = element;
96829781
fragment.previousFragment = this;
@@ -9936,45 +10035,6 @@ class TypeParameterFragmentImpl extends FragmentImpl
993610035
TypeParameterFragmentImpl? get previousFragment => null;
993710036
}
993810037

9939-
/// Mixin representing an element which can have type parameters.
9940-
mixin TypeParameterizedFragmentMixin on FragmentImpl
9941-
implements TypeParameterizedFragment {
9942-
List<TypeParameterFragmentImpl> _typeParameters = const [];
9943-
9944-
/// If the element defines a type, indicates whether the type may safely
9945-
/// appear without explicit type parameters as the bounds of a type parameter
9946-
/// declaration.
9947-
///
9948-
/// If the element does not define a type, returns `true`.
9949-
bool get isSimplyBounded => true;
9950-
9951-
@override
9952-
LibraryFragmentImpl get libraryFragment => enclosingUnit;
9953-
9954-
@Deprecated('Use metadata instead')
9955-
@override
9956-
MetadataImpl get metadata2 => metadata;
9957-
9958-
@override
9959-
List<TypeParameterFragmentImpl> get typeParameters {
9960-
_ensureReadResolution();
9961-
return _typeParameters;
9962-
}
9963-
9964-
set typeParameters(List<TypeParameterFragmentImpl> typeParameters) {
9965-
for (var typeParameter in typeParameters) {
9966-
typeParameter.enclosingFragment = this;
9967-
}
9968-
_typeParameters = typeParameters;
9969-
}
9970-
9971-
@Deprecated('Use typeParameters instead')
9972-
@override
9973-
List<TypeParameterFragmentImpl> get typeParameters2 => typeParameters;
9974-
9975-
void _ensureReadResolution();
9976-
}
9977-
997810038
abstract class VariableElementImpl extends ElementImpl
997910039
with InternalVariableElement
998010040
implements ConstantEvaluationTarget {

0 commit comments

Comments
 (0)