Skip to content

Commit 5303070

Browse files
fshcheglovCommit Queue
authored andcommitted
Remove redundant firstTokenOffset nulls across fragments
`firstTokenOffset` was required but always passed as `null` and later filled by `InformativeDataApplier`, making the API noisy and misleading. Made optional in: - FragmentImpl - ExecutableFragmentImpl - FieldFormalParameterFragmentImpl - FormalParameterFragmentImpl - FunctionFragmentImpl - GenericFunctionTypeFragmentImpl - NonParameterVariableFragmentImpl - PropertyAccessorFragmentImpl - SuperFormalParameterFragmentImpl - TypeParameterFragmentImpl Removed from constructors of: - ClassFragmentImpl - ConstructorFragmentImpl - EnumFragmentImpl - ExtensionFragmentImpl - ExtensionTypeFragmentImpl - FieldFragmentImpl - GetterFragmentImpl - InstanceFragmentImpl - InterfaceFragmentImpl - MethodFragmentImpl - MixinFragmentImpl - PropertyInducingFragmentImpl - TopLevelFunctionFragmentImpl - TopLevelVariableFragmentImpl All call sites across builders, readers, utilities, and tests were updated to stop passing `firstTokenOffset: null`. Behavior is unchanged: offsets continue to be computed and applied by `InformativeDataApplier`. This reduces boilerplate and clarifies the construction contract for synthetic and derived elements. Change-Id: Iba07f919b88b0bf585bfec0c5b8f4cbbe5214459 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/444389 Commit-Queue: Paul Berry <[email protected]> Reviewed-by: Paul Berry <[email protected]> Reviewed-by: Konstantin Shcheglov <[email protected]>
1 parent aba11d0 commit 5303070

File tree

12 files changed

+107
-291
lines changed

12 files changed

+107
-291
lines changed

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -601,10 +601,7 @@ class ElementDisplayStringBuilder {
601601
name = typeParameter.name! + subscript;
602602
}
603603

604-
var newTypeParameter = TypeParameterFragmentImpl(
605-
name: name,
606-
firstTokenOffset: null,
607-
);
604+
var newTypeParameter = TypeParameterFragmentImpl(name: name);
608605
newTypeParameter.bound = typeParameter.bound;
609606
newTypeParameters.add(newTypeParameter.asElement2);
610607
}

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

Lines changed: 26 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,6 @@ class ClassElementImpl extends InterfaceElementImpl implements ClassElement {
514514
superConstructors.map((superConstructor) {
515515
var constructorFragment = ConstructorFragmentImpl(
516516
name: superConstructor.name ?? 'new',
517-
firstTokenOffset: null,
518517
);
519518
constructorFragment.isSynthetic = true;
520519
constructorFragment.typeName = name;
@@ -538,7 +537,6 @@ class ClassElementImpl extends InterfaceElementImpl implements ClassElement {
538537
var superInvocationArguments = <ExpressionImpl>[];
539538
for (var superFormalParameter in superConstructor.formalParameters) {
540539
var formalParameterFragment = FormalParameterFragmentImpl(
541-
firstTokenOffset: null,
542540
name: superFormalParameter.name,
543541
nameOffset: null,
544542
parameterKind: superFormalParameter.parameterKind,
@@ -615,7 +613,7 @@ class ClassFragmentImpl extends InterfaceFragmentImpl implements ClassFragment {
615613

616614
/// Initialize a newly created class element to have the given [name] at the
617615
/// given [offset] in the file that contains the declaration of this element.
618-
ClassFragmentImpl({required super.name, required super.firstTokenOffset});
616+
ClassFragmentImpl({required super.name});
619617

620618
bool get hasExtendsClause {
621619
return hasModifier(Modifier.HAS_EXTENDS_CLAUSE);
@@ -968,10 +966,7 @@ class ConstructorFragmentImpl extends ExecutableFragmentImpl
968966

969967
/// Initialize a newly created constructor element to have the given [name]
970968
/// and [offset].
971-
ConstructorFragmentImpl({
972-
required this.name,
973-
required super.firstTokenOffset,
974-
});
969+
ConstructorFragmentImpl({required this.name});
975970

976971
/// Return the constant initializers for this element, which will be empty if
977972
/// there are no initializers, or `null` if there was an error in the source.
@@ -2121,7 +2116,7 @@ class EnumFragmentImpl extends InterfaceFragmentImpl implements EnumFragment {
21212116

21222117
/// Initialize a newly created class element to have the given [name] at the
21232118
/// given [offset] in the file that contains the declaration of this element.
2124-
EnumFragmentImpl({required super.name, required super.firstTokenOffset});
2119+
EnumFragmentImpl({required super.name});
21252120

21262121
@override
21272122
List<FieldElement> get constants {
@@ -2341,7 +2336,7 @@ abstract class ExecutableFragmentImpl extends FragmentImpl
23412336

23422337
/// Initialize a newly created executable element to have the given [name] and
23432338
/// [offset].
2344-
ExecutableFragmentImpl({required super.firstTokenOffset});
2339+
ExecutableFragmentImpl({super.firstTokenOffset});
23452340

23462341
@override
23472342
List<Fragment> get children => [...typeParameters, ...formalParameters];
@@ -2550,7 +2545,7 @@ class ExtensionFragmentImpl extends InstanceFragmentImpl
25502545
/// Initialize a newly created extension element to have the given [name] at
25512546
/// the given [nameOffset] in the file that contains the declaration of this
25522547
/// element.
2553-
ExtensionFragmentImpl({required super.name, required super.firstTokenOffset});
2548+
ExtensionFragmentImpl({required super.name});
25542549

25552550
@override
25562551
List<Fragment> get children => [
@@ -2717,10 +2712,7 @@ class ExtensionTypeFragmentImpl extends InterfaceFragmentImpl
27172712
/// in implemented superinterfaces.
27182713
bool hasImplementsSelfReference = false;
27192714

2720-
ExtensionTypeFragmentImpl({
2721-
required super.name,
2722-
required super.firstTokenOffset,
2723-
});
2715+
ExtensionTypeFragmentImpl({required super.name});
27242716

27252717
@override
27262718
ExtensionTypeFragmentImpl? get nextFragment =>
@@ -2938,7 +2930,7 @@ class FieldFormalParameterFragmentImpl extends FormalParameterFragmentImpl
29382930
/// Initialize a newly created parameter element to have the given [name] and
29392931
/// [nameOffset].
29402932
FieldFormalParameterFragmentImpl({
2941-
required super.firstTokenOffset,
2933+
super.firstTokenOffset,
29422934
required super.name,
29432935
required super.nameOffset,
29442936
required super.parameterKind,
@@ -2987,7 +2979,7 @@ class FieldFragmentImpl extends PropertyInducingFragmentImpl
29872979

29882980
/// Initialize a newly created synthetic field element to have the given
29892981
/// [name] at the given [offset].
2990-
FieldFragmentImpl({required super.name, required super.firstTokenOffset});
2982+
FieldFragmentImpl({required super.name});
29912983

29922984
@override
29932985
ExpressionImpl? get constantInitializer {
@@ -3320,7 +3312,7 @@ class FormalParameterFragmentImpl extends VariableFragmentImpl
33203312
/// Initialize a newly created parameter element to have the given [name] and
33213313
/// [nameOffset].
33223314
FormalParameterFragmentImpl({
3323-
required super.firstTokenOffset,
3315+
super.firstTokenOffset,
33243316
required this.name,
33253317
required this.nameOffset,
33263318
required this.parameterKind,
@@ -3336,7 +3328,6 @@ class FormalParameterFragmentImpl extends VariableFragmentImpl
33363328
// parameter which prevents navigation/references from working. See
33373329
// https://github.com/dart-lang/sdk/issues/60200
33383330
var element = FormalParameterFragmentImpl(
3339-
firstTokenOffset: null,
33403331
name: name2,
33413332
nameOffset: null,
33423333
parameterKind: parameterKind,
@@ -3538,7 +3529,7 @@ abstract class FragmentImpl implements Fragment {
35383529

35393530
/// Initialize a newly created element to have the given [name] at the given
35403531
/// [_nameOffset].
3541-
FragmentImpl({required this.firstTokenOffset});
3532+
FragmentImpl({this.firstTokenOffset});
35423533

35433534
/// The length of the element's code, or `null` if the element is synthetic.
35443535
int? get codeLength => _codeLength;
@@ -3719,7 +3710,7 @@ sealed class FunctionFragmentImpl extends ExecutableFragmentImpl
37193710

37203711
/// Initialize a newly created function element to have the given [name] and
37213712
/// [offset].
3722-
FunctionFragmentImpl({required this.name, required super.firstTokenOffset});
3713+
FunctionFragmentImpl({required this.name, super.firstTokenOffset});
37233714

37243715
@override
37253716
ExecutableFragmentImpl get declaration => this;
@@ -3873,7 +3864,7 @@ class GenericFunctionTypeFragmentImpl extends FragmentImpl
38733864

38743865
/// Initialize a newly created function element to have no name and the given
38753866
/// [nameOffset]. This is used for function expressions, that have no name.
3876-
GenericFunctionTypeFragmentImpl({required super.firstTokenOffset});
3867+
GenericFunctionTypeFragmentImpl({super.firstTokenOffset});
38773868

38783869
@override
38793870
List<Fragment> get children => [...typeParameters, ...formalParameters];
@@ -4052,7 +4043,7 @@ class GetterFragmentImpl extends PropertyAccessorFragmentImpl
40524043
@override
40534044
GetterFragmentImpl? nextFragment;
40544045

4055-
GetterFragmentImpl({required super.name, required super.firstTokenOffset});
4046+
GetterFragmentImpl({required super.name});
40564047

40574048
GetterFragmentImpl.forVariable(super.variable) : super.forVariable();
40584049

@@ -4560,7 +4551,7 @@ abstract class InstanceFragmentImpl extends FragmentImpl
45604551
List<SetterFragmentImpl> _setters = _Sentinel.setterFragment;
45614552
List<MethodFragmentImpl> _methods = _Sentinel.methodFragment;
45624553

4563-
InstanceFragmentImpl({required this.name, required super.firstTokenOffset});
4554+
InstanceFragmentImpl({required this.name});
45644555

45654556
List<PropertyAccessorFragmentImpl> get accessors {
45664557
return [...getters, ...setters];
@@ -5097,7 +5088,7 @@ abstract class InterfaceFragmentImpl extends InstanceFragmentImpl
50975088

50985089
/// Initialize a newly created class element to have the given [name] at the
50995090
/// given [offset] in the file that contains the declaration of this element.
5100-
InterfaceFragmentImpl({required super.name, required super.firstTokenOffset});
5091+
InterfaceFragmentImpl({required super.name});
51015092

51025093
@override
51035094
List<Fragment> get children => [
@@ -6908,10 +6899,7 @@ final class LoadLibraryFunctionProvider {
69086899
TopLevelFunctionElementImpl _create(LibraryElementImpl library) {
69096900
var name = TopLevelFunctionElement.LOAD_LIBRARY_NAME;
69106901

6911-
var fragment = TopLevelFunctionFragmentImpl(
6912-
name: name,
6913-
firstTokenOffset: null,
6914-
);
6902+
var fragment = TopLevelFunctionFragmentImpl(name: name);
69156903
fragment.isSynthetic = true;
69166904
fragment.isStatic = true;
69176905
fragment.enclosingFragment = library.definingCompilationUnit;
@@ -7673,7 +7661,7 @@ class MethodFragmentImpl extends ExecutableFragmentImpl
76737661

76747662
/// Initialize a newly created method element to have the given [name] at the
76757663
/// given [offset].
7676-
MethodFragmentImpl({required this.name, required super.firstTokenOffset});
7664+
MethodFragmentImpl({required this.name});
76777665

76787666
@override
76797667
MethodFragmentImpl get declaration => this;
@@ -7827,7 +7815,7 @@ class MixinFragmentImpl extends InterfaceFragmentImpl implements MixinFragment {
78277815

78287816
/// Initialize a newly created class element to have the given [name] at the
78297817
/// given [offset] in the file that contains the declaration of this element.
7830-
MixinFragmentImpl({required super.name, required super.firstTokenOffset});
7818+
MixinFragmentImpl({required super.name});
78317819

78327820
bool get isBase {
78337821
return hasModifier(Modifier.BASE);
@@ -8385,7 +8373,7 @@ class NeverFragmentImpl extends FragmentImpl implements TypeDefiningFragment {
83858373
abstract class NonParameterVariableFragmentImpl extends VariableFragmentImpl {
83868374
/// Initialize a newly created variable element to have the given [name] and
83878375
/// [offset].
8388-
NonParameterVariableFragmentImpl({required super.firstTokenOffset});
8376+
NonParameterVariableFragmentImpl({super.firstTokenOffset});
83898377

83908378
@override
83918379
FragmentImpl get enclosingFragment {
@@ -8743,10 +8731,7 @@ sealed class PropertyAccessorFragmentImpl extends ExecutableFragmentImpl
87438731

87448732
/// Initialize a newly created property accessor element to have the given
87458733
/// [name] and [offset].
8746-
PropertyAccessorFragmentImpl({
8747-
required this.name,
8748-
required super.firstTokenOffset,
8749-
});
8734+
PropertyAccessorFragmentImpl({required this.name, super.firstTokenOffset});
87508735

87518736
/// Initialize a newly created synthetic property accessor element to be
87528737
/// associated with the given [variable].
@@ -8937,10 +8922,7 @@ abstract class PropertyInducingFragmentImpl
89378922

89388923
/// Initialize a newly created synthetic element to have the given [name] and
89398924
/// [offset].
8940-
PropertyInducingFragmentImpl({
8941-
required this.name,
8942-
required super.firstTokenOffset,
8943-
});
8925+
PropertyInducingFragmentImpl({required this.name});
89448926

89458927
@override
89468928
List<Fragment> get children => const [];
@@ -9096,7 +9078,7 @@ class SetterFragmentImpl extends PropertyAccessorFragmentImpl
90969078
@override
90979079
SetterFragmentImpl? nextFragment;
90989080

9099-
SetterFragmentImpl({required super.name, required super.firstTokenOffset});
9081+
SetterFragmentImpl({required super.name});
91009082

91019083
SetterFragmentImpl.forVariable(super.variable) : super.forVariable();
91029084

@@ -9273,7 +9255,7 @@ class SuperFormalParameterFragmentImpl extends FormalParameterFragmentImpl
92739255
/// Initialize a newly created parameter element to have the given [name] and
92749256
/// [nameOffset].
92759257
SuperFormalParameterFragmentImpl({
9276-
required super.firstTokenOffset,
9258+
super.firstTokenOffset,
92779259
required super.name,
92789260
required super.nameOffset,
92799261
required super.parameterKind,
@@ -9415,10 +9397,7 @@ class TopLevelFunctionFragmentImpl extends FunctionFragmentImpl
94159397
@override
94169398
TopLevelFunctionFragmentImpl? nextFragment;
94179399

9418-
TopLevelFunctionFragmentImpl({
9419-
required super.name,
9420-
required super.firstTokenOffset,
9421-
});
9400+
TopLevelFunctionFragmentImpl({required super.name});
94229401

94239402
@override
94249403
LibraryFragmentImpl get enclosingFragment =>
@@ -9555,10 +9534,7 @@ class TopLevelVariableFragmentImpl extends PropertyInducingFragmentImpl
95559534

95569535
/// Initialize a newly created synthetic top-level variable element to have
95579536
/// the given [name] and [offset].
9558-
TopLevelVariableFragmentImpl({
9559-
required super.name,
9560-
required super.firstTokenOffset,
9561-
});
9537+
TopLevelVariableFragmentImpl({required super.name});
95629538

95639539
@override
95649540
ExpressionImpl? get constantInitializer {
@@ -10108,10 +10084,7 @@ class TypeParameterFragmentImpl extends FragmentImpl
1010810084

1010910085
/// Initialize a newly created method element to have the given [name] and
1011010086
/// [offset].
10111-
TypeParameterFragmentImpl({
10112-
required this.name,
10113-
required super.firstTokenOffset,
10114-
});
10087+
TypeParameterFragmentImpl({required this.name, super.firstTokenOffset});
1011510088

1011610089
/// Initialize a newly created synthetic type parameter element to have the
1011710090
/// given [name], and with [isSynthetic] set to `true`.

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

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -975,10 +975,7 @@ class InheritanceManager3 {
975975
return result;
976976
}
977977

978-
var resultFragment = MethodFragmentImpl(
979-
name: executable.name,
980-
firstTokenOffset: null,
981-
);
978+
var resultFragment = MethodFragmentImpl(name: executable.name);
982979
resultFragment.enclosingFragment = class_.firstFragment;
983980
resultFragment.isSynthetic = true;
984981
resultFragment.formalParameters =
@@ -1006,10 +1003,7 @@ class InheritanceManager3 {
10061003
return result;
10071004
}
10081005

1009-
var resultFragment = SetterFragmentImpl(
1010-
name: executable.name,
1011-
firstTokenOffset: null,
1012-
);
1006+
var resultFragment = SetterFragmentImpl(name: executable.name);
10131007
resultFragment.enclosingFragment = class_.firstFragment;
10141008
resultFragment.isSynthetic = true;
10151009
resultFragment.formalParameters =
@@ -1018,10 +1012,7 @@ class InheritanceManager3 {
10181012
var result = SetterElementImpl(setterReference, resultFragment);
10191013
result.returnType = executable.returnType;
10201014

1021-
var resultField = FieldFragmentImpl(
1022-
name: executable.name,
1023-
firstTokenOffset: null,
1024-
);
1015+
var resultField = FieldFragmentImpl(name: executable.name);
10251016
resultField.enclosingFragment = class_.firstFragment;
10261017

10271018
var elementName = executable.name!;
@@ -1077,10 +1068,7 @@ class InheritanceManager3 {
10771068
return result;
10781069
}
10791070

1080-
var resultFragment = MethodFragmentImpl(
1081-
name: fragmentName,
1082-
firstTokenOffset: null,
1083-
);
1071+
var resultFragment = MethodFragmentImpl(name: fragmentName);
10841072
resultFragment.enclosingFragment = targetClass.firstFragment;
10851073
resultFragment.typeParameters =
10861074
resultType.typeParameters.map((e) => e.firstFragment).toList();
@@ -1102,7 +1090,7 @@ class InheritanceManager3 {
11021090
} else {
11031091
var firstElement = first as InternalPropertyAccessorElement;
11041092
var fragmentName = first.name!;
1105-
var field = FieldFragmentImpl(name: fragmentName, firstTokenOffset: null);
1093+
var field = FieldFragmentImpl(name: fragmentName);
11061094

11071095
PropertyAccessorFragmentImpl resultFragment;
11081096
PropertyAccessorElementImpl resultElement;
@@ -1114,10 +1102,7 @@ class InheritanceManager3 {
11141102
return result;
11151103
}
11161104

1117-
var fragment = GetterFragmentImpl(
1118-
name: fragmentName,
1119-
firstTokenOffset: null,
1120-
);
1105+
var fragment = GetterFragmentImpl(name: fragmentName);
11211106
resultFragment = fragment;
11221107

11231108
var element = GetterElementImpl(elementReference, fragment);
@@ -1131,10 +1116,7 @@ class InheritanceManager3 {
11311116
return result;
11321117
}
11331118

1134-
var fragment = SetterFragmentImpl(
1135-
name: fragmentName,
1136-
firstTokenOffset: null,
1137-
);
1119+
var fragment = SetterFragmentImpl(name: fragmentName);
11381120
resultFragment = fragment;
11391121

11401122
var element = SetterElementImpl(elementReference, fragment);

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -262,10 +262,7 @@ class _FreshTypeParametersSubstitutor extends _TypeSubstitutor {
262262

263263
var freshElements = List.generate(elements.length, (index) {
264264
var element = elements[index];
265-
var freshElement = TypeParameterFragmentImpl(
266-
name: element.name,
267-
firstTokenOffset: null,
268-
);
265+
var freshElement = TypeParameterFragmentImpl(name: element.name);
269266
var freshType = freshElement.instantiate(
270267
nullabilitySuffix: NullabilitySuffix.none,
271268
);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ class TypeConstraintGatherer
275275
// not contain any variables from `L`.
276276
var newTypeParameters = <TypeParameterElementImpl>[];
277277
for (var i = 0; i < P.typeParameters.length; i++) {
278-
var Z = TypeParameterFragmentImpl(name: 'Z$i', firstTokenOffset: null);
278+
var Z = TypeParameterFragmentImpl(name: 'Z$i');
279279
if (leftSchema) {
280280
Z.bound = P.typeParameters[i].bound;
281281
} else {

0 commit comments

Comments
 (0)