Skip to content

Commit 5874ba3

Browse files
johnniwintherCommit Queue
authored andcommitted
[cfe] Unify getter/setter/field references
This unifies the handling of getter/setter/field references into one object. The references for internal parts of the late lowering are removed. These are not need because the member are never accessed from outside the library and all uses are therefore created together with the reference objects. Change-Id: I9a18d9f18fa379ee73a74ebadebd473dcb1649aa Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/426800 Commit-Queue: Johnni Winther <[email protected]> Reviewed-by: Jens Johansen <[email protected]>
1 parent a3d1e1a commit 5874ba3

File tree

9 files changed

+141
-365
lines changed

9 files changed

+141
-365
lines changed

pkg/front_end/lib/src/fragment/enum_element.dart

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -353,8 +353,11 @@ class EnumElementDeclaration
353353
}
354354

355355
@override
356-
void buildFieldOutlineNode(SourceLibraryBuilder libraryBuilder,
357-
NameScheme nameScheme, BuildNodesCallback f, FieldReference references,
356+
void buildFieldOutlineNode(
357+
SourceLibraryBuilder libraryBuilder,
358+
NameScheme nameScheme,
359+
BuildNodesCallback f,
360+
PropertyReferences references,
358361
{required List<TypeParameter>? classTypeParameters}) {
359362
_field = new Field.immutable(dummyName,
360363
type: _type,
@@ -363,7 +366,7 @@ class EnumElementDeclaration
363366
isStatic: true,
364367
fileUri: fileUri,
365368
fieldReference: references.fieldReference,
366-
getterReference: references.fieldGetterReference,
369+
getterReference: references.getterReference,
367370
isEnumElement: true)
368371
..fileOffset = nameOffset
369372
..fileEndOffset = nameOffset;

pkg/front_end/lib/src/fragment/field/declaration.dart

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,11 @@ abstract class FieldDeclaration {
4747

4848
/// Builds the core AST structures for this field declaration as needed for
4949
/// the outline.
50-
void buildFieldOutlineNode(SourceLibraryBuilder libraryBuilder,
51-
NameScheme nameScheme, BuildNodesCallback f, FieldReference references,
50+
void buildFieldOutlineNode(
51+
SourceLibraryBuilder libraryBuilder,
52+
NameScheme nameScheme,
53+
BuildNodesCallback f,
54+
PropertyReferences references,
5255
{required List<TypeParameter>? classTypeParameters});
5356

5457
void buildFieldOutlineExpressions(
@@ -352,8 +355,11 @@ class RegularFieldDeclaration
352355
}
353356

354357
@override
355-
void buildFieldOutlineNode(SourceLibraryBuilder libraryBuilder,
356-
NameScheme nameScheme, BuildNodesCallback f, FieldReference references,
358+
void buildFieldOutlineNode(
359+
SourceLibraryBuilder libraryBuilder,
360+
NameScheme nameScheme,
361+
BuildNodesCallback f,
362+
PropertyReferences references,
357363
{required List<TypeParameter>? classTypeParameters}) {
358364
_encoding.buildOutlineNode(libraryBuilder, nameScheme, references,
359365
isAbstractOrExternal:

pkg/front_end/lib/src/fragment/field/encoding.dart

Lines changed: 21 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ sealed class FieldEncoding {
1515
/// members should be without body. The member bodies are created through
1616
/// [createBodies].
1717
void buildOutlineNode(SourceLibraryBuilder libraryBuilder,
18-
NameScheme nameScheme, FieldReference references,
18+
NameScheme nameScheme, PropertyReferences references,
1919
{required bool isAbstractOrExternal,
2020
required List<TypeParameter>? classTypeParameters});
2121

@@ -136,7 +136,7 @@ class RegularFieldEncoding implements FieldEncoding {
136136

137137
@override
138138
void buildOutlineNode(SourceLibraryBuilder libraryBuilder,
139-
NameScheme nameScheme, FieldReference references,
139+
NameScheme nameScheme, PropertyReferences references,
140140
{required bool isAbstractOrExternal,
141141
required List<TypeParameter>? classTypeParameters}) {
142142
bool isImmutable = _fragment.modifiers.isLate
@@ -150,16 +150,16 @@ class RegularFieldEncoding implements FieldEncoding {
150150
isLate: _fragment.modifiers.isLate,
151151
fileUri: _fragment.fileUri,
152152
fieldReference: references.fieldReference,
153-
getterReference: references.fieldGetterReference,
153+
getterReference: references.getterReference,
154154
isEnumElement: isEnumElement)
155155
: new Field.mutable(dummyName,
156156
type: _type,
157157
isFinal: _fragment.modifiers.isFinal,
158158
isLate: _fragment.modifiers.isLate,
159159
fileUri: _fragment.fileUri,
160160
fieldReference: references.fieldReference,
161-
getterReference: references.fieldGetterReference,
162-
setterReference: references.fieldSetterReference);
161+
getterReference: references.getterReference,
162+
setterReference: references.setterReference);
163163
nameScheme
164164
.getFieldMemberName(FieldNameType.Field, _fragment.name,
165165
isSynthesized: false)
@@ -517,14 +517,11 @@ abstract class AbstractLateFieldEncoding implements FieldEncoding {
517517

518518
@override
519519
void buildOutlineNode(SourceLibraryBuilder libraryBuilder,
520-
NameScheme nameScheme, FieldReference references,
520+
NameScheme nameScheme, PropertyReferences references,
521521
{required bool isAbstractOrExternal,
522522
required List<TypeParameter>? classTypeParameters}) {
523523
_field = new Field.mutable(dummyName,
524-
fileUri: _fragment.fileUri,
525-
fieldReference: references.fieldReference,
526-
getterReference: references.fieldGetterReference,
527-
setterReference: references.fieldSetterReference)
524+
fileUri: _fragment.fileUri, fieldReference: references.fieldReference)
528525
..fileOffset = _fragment.nameOffset
529526
..fileEndOffset = _fragment.endOffset
530527
..isInternalImplementation = true;
@@ -539,14 +536,11 @@ abstract class AbstractLateFieldEncoding implements FieldEncoding {
539536
break;
540537
case late_lowering.IsSetStrategy.forceUseIsSetField:
541538
case late_lowering.IsSetStrategy.useIsSetFieldOrNull:
542-
_lateIsSetField = new Field.mutable(dummyName,
543-
fileUri: _fragment.fileUri,
544-
fieldReference: references.lateIsSetFieldReference,
545-
getterReference: references.lateIsSetGetterReference,
546-
setterReference: references.lateIsSetSetterReference)
547-
..fileOffset = _fragment.nameOffset
548-
..fileEndOffset = _fragment.endOffset
549-
..isInternalImplementation = true;
539+
_lateIsSetField =
540+
new Field.mutable(dummyName, fileUri: _fragment.fileUri)
541+
..fileOffset = _fragment.nameOffset
542+
..fileEndOffset = _fragment.endOffset
543+
..isInternalImplementation = true;
550544
nameScheme
551545
.getFieldMemberName(FieldNameType.IsSetField, _fragment.name,
552546
isSynthesized: true)
@@ -560,15 +554,15 @@ abstract class AbstractLateFieldEncoding implements FieldEncoding {
560554
..fileOffset = _fragment.nameOffset
561555
..fileEndOffset = _fragment.endOffset,
562556
fileUri: _fragment.fileUri,
563-
reference: references.lateGetterReference)
557+
reference: references.getterReference)
564558
..fileOffset = _fragment.nameOffset
565559
..fileEndOffset = _fragment.endOffset;
566560
nameScheme
567561
.getFieldMemberName(FieldNameType.Getter, _fragment.name,
568562
isSynthesized: true)
569563
.attachMember(_lateGetter!);
570564
_lateSetter = _createSetter(
571-
_fragment.fileUri, _fragment.nameOffset, references.lateSetterReference,
565+
_fragment.fileUri, _fragment.nameOffset, references.setterReference,
572566
isCovariantByDeclaration: _fragment.modifiers.isCovariant);
573567
if (_lateSetter != null) {
574568
nameScheme
@@ -944,7 +938,7 @@ class AbstractOrExternalFieldEncoding implements FieldEncoding {
944938

945939
@override
946940
void buildOutlineNode(SourceLibraryBuilder libraryBuilder,
947-
NameScheme nameScheme, FieldReference references,
941+
NameScheme nameScheme, PropertyReferences references,
948942
{required bool isAbstractOrExternal,
949943
required List<TypeParameter>? classTypeParameters}) {
950944
if (_isExtensionInstanceMember || _isExtensionTypeInstanceMember) {
@@ -957,7 +951,7 @@ class AbstractOrExternalFieldEncoding implements FieldEncoding {
957951
..isLowered = true
958952
]),
959953
fileUri: _fragment.fileUri,
960-
reference: references.fieldGetterReference)
954+
reference: references.getterReference)
961955
..fileOffset = _fragment.nameOffset
962956
..fileEndOffset = _fragment.endOffset;
963957
nameScheme
@@ -982,7 +976,7 @@ class AbstractOrExternalFieldEncoding implements FieldEncoding {
982976
..fileOffset = _fragment.nameOffset
983977
..fileEndOffset = _fragment.endOffset,
984978
fileUri: _fragment.fileUri,
985-
reference: references.fieldSetterReference)
979+
reference: references.setterReference)
986980
..fileOffset = _fragment.nameOffset
987981
..fileEndOffset = _fragment.endOffset;
988982
nameScheme
@@ -992,8 +986,7 @@ class AbstractOrExternalFieldEncoding implements FieldEncoding {
992986
} else {
993987
_getter = new Procedure(
994988
dummyName, ProcedureKind.Getter, new FunctionNode(null),
995-
fileUri: _fragment.fileUri,
996-
reference: references.fieldGetterReference)
989+
fileUri: _fragment.fileUri, reference: references.getterReference)
997990
..fileOffset = _fragment.nameOffset
998991
..fileEndOffset = _fragment.endOffset;
999992
nameScheme
@@ -1013,7 +1006,7 @@ class AbstractOrExternalFieldEncoding implements FieldEncoding {
10131006
..fileOffset = _fragment.nameOffset
10141007
..fileEndOffset = _fragment.endOffset,
10151008
fileUri: _fragment.fileUri,
1016-
reference: references.fieldSetterReference)
1009+
reference: references.setterReference)
10171010
..fileOffset = _fragment.nameOffset
10181011
..fileEndOffset = _fragment.endOffset;
10191012
nameScheme
@@ -1211,12 +1204,12 @@ class RepresentationFieldEncoding implements FieldEncoding {
12111204

12121205
@override
12131206
void buildOutlineNode(SourceLibraryBuilder libraryBuilder,
1214-
NameScheme nameScheme, FieldReference references,
1207+
NameScheme nameScheme, PropertyReferences references,
12151208
{required bool isAbstractOrExternal,
12161209
required List<TypeParameter>? classTypeParameters}) {
12171210
_getter = new Procedure(
12181211
dummyName, ProcedureKind.Getter, new FunctionNode(null),
1219-
fileUri: _fragment.fileUri, reference: references.fieldGetterReference)
1212+
fileUri: _fragment.fileUri, reference: references.getterReference)
12201213
..stubKind = ProcedureStubKind.RepresentationField
12211214
..fileOffset = _fragment.nameOffset
12221215
..fileEndOffset = _fragment.nameOffset;

pkg/front_end/lib/src/fragment/primary_constructor_field.dart

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ class PrimaryConstructorFieldFragment implements Fragment {
4646
_builder = value;
4747
}
4848

49+
// Coverage-ignore(suite): Not run.
4950
PrimaryConstructorFieldDeclaration get declaration {
5051
assert(
5152
_declaration != null, "Declaration has not been computed for $this.");
@@ -107,9 +108,11 @@ class PrimaryConstructorFieldDeclaration
107108
shared.Expression? get initializerExpression => null;
108109

109110
@override
111+
// Coverage-ignore(suite): Not run.
110112
bool get isConst => false;
111113

112114
@override
115+
// Coverage-ignore(suite): Not run.
113116
bool get isEnumElement => false;
114117

115118
@override
@@ -122,6 +125,7 @@ class PrimaryConstructorFieldDeclaration
122125
bool get isLate => false;
123126

124127
@override
128+
// Coverage-ignore(suite): Not run.
125129
bool get isStatic => false;
126130

127131
@override
@@ -148,6 +152,7 @@ class PrimaryConstructorFieldDeclaration
148152
_encoding.type = value;
149153
}
150154

155+
// Coverage-ignore(suite): Not run.
151156
/// Builds the body of this field using [initializer] as the initializer
152157
/// expression.
153158
void buildBody(CoreTypes coreTypes, Expression? initializer) {
@@ -164,6 +169,7 @@ class PrimaryConstructorFieldDeclaration
164169
}
165170

166171
@override
172+
// Coverage-ignore(suite): Not run.
167173
void buildFieldInitializer(InferenceHelper helper, TypeInferrer typeInferrer,
168174
CoreTypes coreTypes, Expression? initializer) {
169175
if (initializer != null) {
@@ -179,6 +185,7 @@ class PrimaryConstructorFieldDeclaration
179185
}
180186

181187
@override
188+
// Coverage-ignore(suite): Not run.
182189
void buildImplicitDefaultValue() {
183190
_encoding.buildImplicitDefaultValue();
184191
}
@@ -216,8 +223,11 @@ class PrimaryConstructorFieldDeclaration
216223
}
217224

218225
@override
219-
void buildFieldOutlineNode(SourceLibraryBuilder libraryBuilder,
220-
NameScheme nameScheme, BuildNodesCallback f, FieldReference references,
226+
void buildFieldOutlineNode(
227+
SourceLibraryBuilder libraryBuilder,
228+
NameScheme nameScheme,
229+
BuildNodesCallback f,
230+
PropertyReferences references,
221231
{required List<TypeParameter>? classTypeParameters}) {
222232
_encoding.buildOutlineNode(libraryBuilder, nameScheme, references,
223233
isAbstractOrExternal: false, classTypeParameters: classTypeParameters);
@@ -243,6 +253,7 @@ class PrimaryConstructorFieldDeclaration
243253
}
244254

245255
@override
256+
// Coverage-ignore(suite): Not run.
246257
void checkFieldVariance(
247258
SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {
248259
sourceClassBuilder.checkVarianceInField(typeEnvironment,
@@ -287,6 +298,7 @@ class PrimaryConstructorFieldDeclaration
287298

288299
type.registerInferredTypeListener(this);
289300
if (type is InferableTypeBuilder) {
301+
// Coverage-ignore-block(suite): Not run.
290302
// A field with no type and initializer or an instance field without
291303
// type and initializer need to have the type inferred.
292304
_encoding.type = new InferredType(
@@ -304,6 +316,7 @@ class PrimaryConstructorFieldDeclaration
304316
}
305317

306318
@override
319+
// Coverage-ignore(suite): Not run.
307320
void ensureTypes(
308321
ClassMembersBuilder membersBuilder,
309322
Set<ClassMember>? getterOverrideDependencies,
@@ -320,17 +333,18 @@ class PrimaryConstructorFieldDeclaration
320333
nameLength: _fragment.name.length,
321334
isAssignable: hasSetter);
322335
} else {
323-
// Coverage-ignore-block(suite): Not run.
324336
type.build(builder.libraryBuilder, TypeUse.fieldType,
325337
hierarchy: membersBuilder.hierarchyBuilder);
326338
}
327339
}
328340

329341
@override
342+
// Coverage-ignore(suite): Not run.
330343
void registerSuperCall() {
331344
_encoding.registerSuperCall();
332345
}
333346

347+
// Coverage-ignore(suite): Not run.
334348
DartType _computeInferredType(
335349
ClassHierarchyBase classHierarchy, Token? token) {
336350
DartType? inferredType;
@@ -344,16 +358,9 @@ class PrimaryConstructorFieldDeclaration
344358
declarationBuilder.cls, libraryBuilder.library.nonNullable)
345359
: null;
346360
LookupScope scope = _fragment.enclosingScope;
347-
TypeInferrer typeInferrer =
348-
libraryBuilder.loader.typeInferenceEngine.createTopLevelTypeInferrer(
349-
fileUri,
350-
enclosingClassThisType,
351-
libraryBuilder,
352-
scope,
353-
builder
354-
.dataForTesting
355-
// Coverage-ignore(suite): Not run.
356-
?.inferenceData);
361+
TypeInferrer typeInferrer = libraryBuilder.loader.typeInferenceEngine
362+
.createTopLevelTypeInferrer(fileUri, enclosingClassThisType,
363+
libraryBuilder, scope, builder.dataForTesting?.inferenceData);
357364
BodyBuilderContext bodyBuilderContext = createBodyBuilderContext();
358365
BodyBuilder bodyBuilder = libraryBuilder.loader.createBodyBuilderForField(
359366
libraryBuilder, bodyBuilderContext, scope, typeInferrer, fileUri);
@@ -371,6 +378,7 @@ class PrimaryConstructorFieldDeclaration
371378
}
372379

373380
@override
381+
// Coverage-ignore(suite): Not run.
374382
void setCovariantByClassInternal() {
375383
_encoding.setCovariantByClass();
376384
}
@@ -398,6 +406,7 @@ class PrimaryConstructorFieldDeclaration
398406
TypeEnvironment typeEnvironment, SourcePropertyBuilder? setterBuilder) {}
399407

400408
@override
409+
// Coverage-ignore(suite): Not run.
401410
void checkGetterVariance(
402411
SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {}
403412

@@ -414,13 +423,15 @@ class PrimaryConstructorFieldDeclaration
414423
List<NominalParameterBuilder> unboundNominalParameters) {}
415424

416425
@override
426+
// Coverage-ignore(suite): Not run.
417427
void ensureGetterTypes(
418428
{required SourceLibraryBuilder libraryBuilder,
419429
required DeclarationBuilder? declarationBuilder,
420430
required ClassMembersBuilder membersBuilder,
421431
required Set<ClassMember>? getterOverrideDependencies}) {}
422432

423433
@override
434+
// Coverage-ignore(suite): Not run.
424435
Iterable<Reference> getExportedGetterReferences(
425436
PropertyReferences references) {
426437
return [references.getterReference!];

0 commit comments

Comments
 (0)