Skip to content

Commit a868039

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Remove PropertyAccessorFragment.variable3 and PropertyInducingFragment.getter2/setter2.
It is getter / setter elements that know that they form a PropertyInducingElement, and the other way around, PropertyInducingElement that has getter and setter. Fragments OTOH, just dangle from the elements. Change-Id: Ide8ece5cb318c75093b0173c661b01f564d1a55a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/435746 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Paul Berry <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]>
1 parent 4217306 commit a868039

File tree

9 files changed

+76
-174
lines changed

9 files changed

+76
-174
lines changed

pkg/analyzer/api.txt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4015,7 +4015,6 @@ package:analyzer/dart/element/element.dart:
40154015
element (getter: PropertyAccessorElement)
40164016
nextFragment (getter: PropertyAccessorFragment?)
40174017
previousFragment (getter: PropertyAccessorFragment?)
4018-
variable3 (getter: PropertyInducingFragment?)
40194018
PropertyInducingElement (class extends Object implements VariableElement, Annotatable, HasSinceSdkVersion):
40204019
new (constructor: PropertyInducingElement Function())
40214020
firstFragment (getter: PropertyInducingFragment)
@@ -4027,14 +4026,12 @@ package:analyzer/dart/element/element.dart:
40274026
PropertyInducingFragment (class extends Object implements VariableFragment, Annotatable):
40284027
new (constructor: PropertyInducingFragment Function())
40294028
element (getter: PropertyInducingElement)
4030-
getter2 (getter: GetterFragment?)
40314029
hasInitializer (getter: bool)
40324030
isAugmentation (getter: bool)
40334031
isSynthetic (getter: bool)
40344032
libraryFragment (getter: LibraryFragment)
40354033
nextFragment (getter: PropertyInducingFragment?)
40364034
previousFragment (getter: PropertyInducingFragment?)
4037-
setter2 (getter: SetterFragment?)
40384035
SetterElement (class extends Object implements PropertyAccessorElement):
40394036
new (constructor: SetterElement Function())
40404037
baseElement (getter: SetterElement)

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

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3208,12 +3208,6 @@ abstract class PropertyAccessorFragment implements ExecutableFragment {
32083208

32093209
@override
32103210
PropertyAccessorFragment? get previousFragment;
3211-
3212-
/// The field or top-level variable associated with this property accessors.
3213-
///
3214-
/// If this property accessor was explicitly defined (is not synthetic) then
3215-
/// the variable associated with it will be synthetic.
3216-
PropertyInducingFragment? get variable3;
32173211
}
32183212

32193213
/// A variable that has an associated getter and possibly a setter. Note that
@@ -3275,12 +3269,6 @@ abstract class PropertyInducingFragment
32753269
@override
32763270
PropertyInducingElement get element;
32773271

3278-
/// The getter associated with this variable.
3279-
///
3280-
/// If this variable was explicitly defined (is not synthetic) then the
3281-
/// getter associated with it will be synthetic.
3282-
GetterFragment? get getter2;
3283-
32843272
/// Whether the variable has an initializer at declaration.
32853273
bool get hasInitializer;
32863274

@@ -3305,18 +3293,6 @@ abstract class PropertyInducingFragment
33053293

33063294
@override
33073295
PropertyInducingFragment? get previousFragment;
3308-
3309-
/// The setter associated with this variable.
3310-
///
3311-
/// Returns `null` if the variable is effectively `final` and therefore
3312-
/// doesn't have a setter associated with it.
3313-
///
3314-
/// This can happen either because the variable is explicitly defined as
3315-
/// being `final` or because the variable is induced by an explicit getter
3316-
/// that does not have a corresponding setter. If this variable was
3317-
/// explicitly defined (is not synthetic) then the setter associated with
3318-
/// it will be synthetic.
3319-
SetterFragment? get setter2;
33203296
}
33213297

33223298
/// A setter.

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

Lines changed: 2 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -3184,10 +3184,11 @@ class FieldFragmentImpl extends PropertyInducingFragmentImpl
31843184
///
31853185
/// Such fields are `index`, `_name`, and `values`.
31863186
bool get isSyntheticEnumField {
3187+
// TODO(scheglov): move to element
31873188
return enclosingElement3 is EnumFragmentImpl &&
31883189
isSynthetic &&
31893190
element.getter2?.isSynthetic == true &&
3190-
setter == null;
3191+
element.setter2 == null;
31913192
}
31923193

31933194
@override
@@ -4489,12 +4490,6 @@ class GetterFragmentImpl extends PropertyAccessorFragmentImpl
44894490

44904491
GetterFragmentImpl.forVariable(super.variable) : super.forVariable();
44914492

4492-
@override
4493-
PropertyAccessorFragmentImpl? get correspondingGetter => null;
4494-
4495-
@override
4496-
PropertyAccessorFragmentImpl? get correspondingSetter => variable2?.setter;
4497-
44984493
@override
44994494
bool get isGetter => true;
45004495

@@ -8829,16 +8824,6 @@ abstract class PropertyAccessorElementImpl extends ExecutableElementImpl
88298824
/// `PropertyAccessorElement`.
88308825
abstract class PropertyAccessorElementOrMember
88318826
implements ExecutableElementOrMember {
8832-
/// The accessor representing the getter that corresponds to (has the same
8833-
/// name as) this setter, or `null` if this accessor is not a setter or
8834-
/// if there is no corresponding getter.
8835-
PropertyAccessorElementOrMember? get correspondingGetter;
8836-
8837-
/// The accessor representing the setter that corresponds to (has the same
8838-
/// name as) this getter, or `null` if this accessor is not a getter or
8839-
/// if there is no corresponding setter.
8840-
PropertyAccessorElementOrMember? get correspondingSetter;
8841-
88428827
/// Whether the accessor represents a getter.
88438828
bool get isGetter;
88448829

@@ -8847,15 +8832,6 @@ abstract class PropertyAccessorElementOrMember
88478832

88488833
@override
88498834
TypeImpl get returnType;
8850-
8851-
/// The field or top-level variable associated with this accessor.
8852-
///
8853-
/// If this accessor was explicitly defined (is not synthetic) then the
8854-
/// variable associated with it will be synthetic.
8855-
///
8856-
/// If this accessor is an augmentation, and [augmentationTarget] is `null`,
8857-
/// the variable is `null`.
8858-
PropertyInducingElementOrMember? get variable2;
88598835
}
88608836

88618837
sealed class PropertyAccessorFragmentImpl extends ExecutableFragmentImpl
@@ -8884,12 +8860,6 @@ sealed class PropertyAccessorFragmentImpl extends ExecutableFragmentImpl
88848860
isSynthetic = true;
88858861
}
88868862

8887-
@override
8888-
PropertyAccessorFragmentImpl? get correspondingGetter;
8889-
8890-
@override
8891-
PropertyAccessorFragmentImpl? get correspondingSetter;
8892-
88938863
@override
88948864
PropertyAccessorFragmentImpl get declaration => this;
88958865

@@ -8945,14 +8915,6 @@ sealed class PropertyAccessorFragmentImpl extends ExecutableFragmentImpl
89458915
return _nameOffset;
89468916
}
89478917

8948-
@override
8949-
PropertyInducingFragmentImpl? get variable2 {
8950-
return element.variable3?.firstFragment;
8951-
}
8952-
8953-
@override
8954-
PropertyInducingFragment? get variable3 => variable2;
8955-
89568918
@override
89578919
void appendTo(ElementDisplayStringBuilder builder) {
89588920
builder.writeExecutableElement(
@@ -9088,15 +9050,6 @@ abstract class PropertyInducingFragmentImpl
90889050
@override
90899051
Fragment get enclosingFragment => enclosingElement3 as Fragment;
90909052

9091-
/// The getter associated with this variable.
9092-
///
9093-
/// If this variable was explicitly defined (is not synthetic) then the
9094-
/// getter associated with it will be synthetic.
9095-
GetterFragmentImpl? get getter => element.getter2?.firstFragment;
9096-
9097-
@override
9098-
GetterFragmentImpl? get getter2 => getter;
9099-
91009053
/// Return `true` if this variable needs the setter.
91019054
bool get hasSetter {
91029055
if (isConst) {
@@ -9127,20 +9080,6 @@ abstract class PropertyInducingFragmentImpl
91279080
@override
91289081
MetadataImpl get metadata2 => metadata;
91299082

9130-
/// The setter associated with this variable, or `null` if the variable
9131-
/// is effectively `final` and therefore does not have a setter associated
9132-
/// with it.
9133-
///
9134-
/// This can happen either because the variable is explicitly defined as
9135-
/// being `final` or because the variable is induced by an explicit getter
9136-
/// that does not have a corresponding setter. If this variable was
9137-
/// explicitly defined (is not synthetic) then the setter associated with
9138-
/// it will be synthetic.
9139-
SetterFragmentImpl? get setter => element.setter2?.firstFragment;
9140-
9141-
@override
9142-
SetterFragmentImpl? get setter2 => setter;
9143-
91449083
bool get shouldUseTypeForInitializerInference {
91459084
return hasModifier(Modifier.SHOULD_USE_TYPE_FOR_INITIALIZER_INFERENCE);
91469085
}
@@ -9309,12 +9248,6 @@ class SetterFragmentImpl extends PropertyAccessorFragmentImpl
93099248

93109249
SetterFragmentImpl.forVariable(super.variable) : super.forVariable();
93119250

9312-
@override
9313-
PropertyAccessorFragmentImpl? get correspondingGetter => variable2?.getter;
9314-
9315-
@override
9316-
PropertyAccessorFragmentImpl? get correspondingSetter => null;
9317-
93189251
@override
93199252
bool get isGetter => false;
93209253

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1026,8 +1026,10 @@ class InheritanceManager3 {
10261026

10271027
var result = SetterElementImpl(setterReference, resultFragment);
10281028

1029-
var field = executable.variable3!;
1030-
var resultField = FieldFragmentImpl(name2: field.name3, nameOffset: -1);
1029+
var resultField = FieldFragmentImpl(
1030+
name2: executable.name3,
1031+
nameOffset: -1,
1032+
);
10311033
resultField.enclosingElement3 = class_.firstFragment;
10321034

10331035
var elementName = executable.name3!;

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

Lines changed: 32 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -532,15 +532,11 @@ class FieldMember extends VariableMember
532532

533533
@override
534534
GetterElement2OrMember? get getter2 {
535-
var baseGetter = declaration.getter;
535+
var baseGetter = baseElement.getter2;
536536
if (baseGetter == null) {
537537
return null;
538538
}
539-
return GetterMember._(
540-
declaration: baseGetter,
541-
substitution: substitution,
542-
typeParameters: baseGetter.typeParameters,
543-
);
539+
return GetterMember.forSubstitution(baseGetter, substitution);
544540
}
545541

546542
@override
@@ -586,15 +582,11 @@ class FieldMember extends VariableMember
586582

587583
@override
588584
SetterElement2OrMember? get setter2 {
589-
var baseSetter = declaration.setter;
585+
var baseSetter = baseElement.setter2;
590586
if (baseSetter == null) {
591587
return null;
592588
}
593-
return SetterMember._(
594-
declaration: baseSetter,
595-
substitution: substitution,
596-
typeParameters: baseSetter.typeParameters,
597-
);
589+
return SetterMember.forSubstitution(baseSetter, substitution);
598590
}
599591

600592
@override
@@ -676,11 +668,11 @@ class GetterMember extends PropertyAccessorMember
676668

677669
@override
678670
SetterElement2OrMember? get correspondingSetter2 {
679-
var setter = correspondingSetter;
680-
if (setter is SetterMember) {
681-
return setter;
671+
var baseSetter = baseElement.variable3!.setter2;
672+
if (baseSetter == null) {
673+
return null;
682674
}
683-
return setter?.asElement2 as SetterElementImpl?;
675+
return SetterMember.forSubstitution(baseSetter, substitution);
684676
}
685677

686678
@override
@@ -721,15 +713,22 @@ class GetterMember extends PropertyAccessorMember
721713
return visitor.visitGetterElement(this);
722714
}
723715

724-
static GetterElement2OrMember forTargetType(
716+
static GetterElement2OrMember forSubstitution(
725717
GetterElement2OrMember element,
726-
InterfaceType targetType,
718+
MapSubstitution substitution,
727719
) {
728-
var substitution = Substitution.fromInterfaceType(targetType);
729720
// TODO(scheglov): avoid type cast
730721
return ExecutableMember.from(element, substitution)
731722
as GetterElement2OrMember;
732723
}
724+
725+
static GetterElement2OrMember forTargetType(
726+
GetterElement2OrMember element,
727+
InterfaceType targetType,
728+
) {
729+
var substitution = Substitution.fromInterfaceType(targetType);
730+
return forSubstitution(element, substitution);
731+
}
733732
}
734733

735734
/// An element defined in a parameterized type where the values of the type
@@ -1215,30 +1214,6 @@ abstract class PropertyAccessorMember extends ExecutableMember
12151214
required super.typeParameters,
12161215
});
12171216

1218-
@override
1219-
PropertyAccessorElementOrMember? get correspondingGetter {
1220-
var baseGetter = declaration.correspondingGetter;
1221-
if (baseGetter == null) {
1222-
return null;
1223-
}
1224-
return PropertyAccessorMember(
1225-
declaration: baseGetter,
1226-
substitution: substitution,
1227-
);
1228-
}
1229-
1230-
@override
1231-
PropertyAccessorElementOrMember? get correspondingSetter {
1232-
var baseSetter = declaration.correspondingSetter;
1233-
if (baseSetter == null) {
1234-
return null;
1235-
}
1236-
return PropertyAccessorMember(
1237-
declaration: baseSetter,
1238-
substitution: substitution,
1239-
);
1240-
}
1241-
12421217
@override
12431218
PropertyAccessorFragmentImpl get declaration =>
12441219
_declaration as PropertyAccessorFragmentImpl;
@@ -1264,17 +1239,6 @@ abstract class PropertyAccessorMember extends ExecutableMember
12641239
@override
12651240
Source get source => _declaration.source!;
12661241

1267-
@override
1268-
PropertyInducingElementOrMember? get variable2 {
1269-
var variable = declaration.variable2;
1270-
switch (variable) {
1271-
case FieldFragmentImpl():
1272-
return FieldMember(declaration: variable, substitution: substitution);
1273-
default:
1274-
return variable;
1275-
}
1276-
}
1277-
12781242
@override
12791243
PropertyInducingElement2OrMember? get variable3 {
12801244
var variable = baseElement.variable3;
@@ -1332,11 +1296,11 @@ class SetterMember extends PropertyAccessorMember
13321296

13331297
@override
13341298
GetterElement2OrMember? get correspondingGetter2 {
1335-
var getter = correspondingGetter;
1336-
if (getter is GetterMember) {
1337-
return getter;
1299+
var baseGetter = baseElement.variable3!.getter2;
1300+
if (baseGetter == null) {
1301+
return null;
13381302
}
1339-
return getter?.asElement2 as GetterElementImpl?;
1303+
return GetterMember.forSubstitution(baseGetter, substitution);
13401304
}
13411305

13421306
@override
@@ -1377,15 +1341,22 @@ class SetterMember extends PropertyAccessorMember
13771341
return visitor.visitSetterElement(this);
13781342
}
13791343

1380-
static SetterElement2OrMember forTargetType(
1344+
static SetterElement2OrMember forSubstitution(
13811345
SetterElement2OrMember element,
1382-
InterfaceType targetType,
1346+
MapSubstitution substitution,
13831347
) {
1384-
var substitution = Substitution.fromInterfaceType(targetType);
13851348
// TODO(scheglov): avoid type cast
13861349
return ExecutableMember.from(element, substitution)
13871350
as SetterElement2OrMember;
13881351
}
1352+
1353+
static SetterElement2OrMember forTargetType(
1354+
SetterElement2OrMember element,
1355+
InterfaceType targetType,
1356+
) {
1357+
var substitution = Substitution.fromInterfaceType(targetType);
1358+
return forSubstitution(element, substitution);
1359+
}
13891360
}
13901361

13911362
class SuperFormalParameterMember extends ParameterMember

pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -597,7 +597,7 @@ class MemberDuplicateDefinitionVerifier {
597597
if (!definesSetter) {
598598
// The field just defines a getter, so treat it as a getter for
599599
// duplicate checking purposes.
600-
fragment = fragment.getter!;
600+
fragment = fragment.element.getter2!.firstFragment;
601601
}
602602
}
603603

0 commit comments

Comments
 (0)