Skip to content

Commit 7850078

Browse files
johnniwintherCommit Queue
authored andcommitted
[cfe] Implement getter/setter aspect of fields through Getter/SetterDeclaration
This removes the parts of the FieldDeclaration interface dealing with the getter/setter aspects and instead uses the Getter/SetterDeclaration interfaces. Change-Id: Ia807c085536c3132527d82491b17b796dfd745bf Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/425521 Reviewed-by: Chloe Stefantsova <[email protected]> Commit-Queue: Johnni Winther <[email protected]>
1 parent f867dc7 commit 7850078

15 files changed

+432
-215
lines changed

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

Lines changed: 62 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,11 @@ class _EnumElementFragmentBodyBuilderContext extends BodyBuilderContext {
261261

262262
class EnumElementDeclaration
263263
with FieldDeclarationMixin
264-
implements FieldDeclaration, Inferable, InferredTypeListener {
264+
implements
265+
FieldDeclaration,
266+
GetterDeclaration,
267+
Inferable,
268+
InferredTypeListener {
265269
final EnumElementFragment _fragment;
266270

267271
Field? _field;
@@ -323,7 +327,7 @@ class EnumElementDeclaration
323327
}
324328

325329
@override
326-
void buildOutlineExpressions(
330+
void buildFieldOutlineExpressions(
327331
{required ClassHierarchy classHierarchy,
328332
required SourceLibraryBuilder libraryBuilder,
329333
required DeclarationBuilder? declarationBuilder,
@@ -349,7 +353,7 @@ class EnumElementDeclaration
349353
}
350354

351355
@override
352-
void buildOutlineNode(SourceLibraryBuilder libraryBuilder,
356+
void buildFieldOutlineNode(SourceLibraryBuilder libraryBuilder,
353357
NameScheme nameScheme, BuildNodesCallback f, FieldReference references,
354358
{required List<TypeParameter>? classTypeParameters}) {
355359
_field = new Field.immutable(dummyName,
@@ -509,16 +513,16 @@ class EnumElementDeclaration
509513
}
510514

511515
@override
512-
void checkTypes(SourceLibraryBuilder libraryBuilder,
516+
void checkFieldTypes(SourceLibraryBuilder libraryBuilder,
513517
TypeEnvironment typeEnvironment, SourcePropertyBuilder? setterBuilder) {}
514518

515519
@override
516520
// Coverage-ignore(suite): Not run.
517-
void checkVariance(
521+
void checkFieldVariance(
518522
SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {}
519523

520524
@override
521-
int computeDefaultTypes(ComputeDefaultTypeContext context) {
525+
int computeFieldDefaultTypes(ComputeDefaultTypeContext context) {
522526
return 0;
523527
}
524528

@@ -531,12 +535,6 @@ class EnumElementDeclaration
531535
inferType(membersBuilder.hierarchyBuilder);
532536
}
533537

534-
@override
535-
// Coverage-ignore(suite): Not run.
536-
Iterable<Reference> getExportedMemberReferences(FieldReference references) {
537-
return [references.fieldGetterReference];
538-
}
539-
540538
@override
541539
bool get hasInitializer => true;
542540

@@ -563,15 +561,9 @@ class EnumElementDeclaration
563561
List<ClassMember> get localMembers =>
564562
[new _EnumElementClassMember(builder, _fragment)];
565563

566-
@override
567-
List<ClassMember> get localSetters => const [];
568-
569564
@override
570565
Member get readTarget => _field!;
571566

572-
@override
573-
Member? get writeTarget => null;
574-
575567
@override
576568
// Coverage-ignore(suite): Not run.
577569
DartType get fieldTypeInternal => _type;
@@ -615,7 +607,58 @@ class EnumElementDeclaration
615607
@override
616608
GetterQuality get getterQuality => GetterQuality.Implicit;
617609

610+
@override
611+
void buildGetterOutlineExpressions(
612+
{required ClassHierarchy classHierarchy,
613+
required SourceLibraryBuilder libraryBuilder,
614+
required DeclarationBuilder? declarationBuilder,
615+
required SourcePropertyBuilder propertyBuilder,
616+
required Annotatable annotatable,
617+
required Uri annotatableFileUri,
618+
required bool isClassInstanceMember}) {}
619+
620+
@override
621+
void buildGetterOutlineNode(
622+
{required SourceLibraryBuilder libraryBuilder,
623+
required NameScheme nameScheme,
624+
required BuildNodesCallback f,
625+
required PropertyReferences? references,
626+
required List<TypeParameter>? classTypeParameters}) {}
627+
628+
@override
629+
void checkGetterTypes(SourceLibraryBuilder libraryBuilder,
630+
TypeEnvironment typeEnvironment, SourcePropertyBuilder? setterBuilder) {}
631+
632+
@override
633+
// Coverage-ignore(suite): Not run.
634+
void checkGetterVariance(
635+
SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {}
636+
637+
@override
638+
int computeGetterDefaultTypes(ComputeDefaultTypeContext context) {
639+
return 0;
640+
}
641+
618642
@override
619643
// Coverage-ignore(suite): Not run.
620-
SetterQuality get setterQuality => SetterQuality.Absent;
644+
void createGetterEncoding(
645+
ProblemReporting problemReporting,
646+
SourcePropertyBuilder builder,
647+
PropertyEncodingStrategy encodingStrategy,
648+
List<NominalParameterBuilder> unboundNominalParameters) {}
649+
650+
@override
651+
// Coverage-ignore(suite): Not run.
652+
void ensureGetterTypes(
653+
{required SourceLibraryBuilder libraryBuilder,
654+
required DeclarationBuilder? declarationBuilder,
655+
required ClassMembersBuilder membersBuilder,
656+
required Set<ClassMember>? getterOverrideDependencies}) {}
657+
658+
@override
659+
// Coverage-ignore(suite): Not run.
660+
Iterable<Reference> getExportedGetterReferences(
661+
PropertyReferences references) {
662+
return [references.getterReference!];
663+
}
621664
}

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

Lines changed: 116 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -35,46 +35,40 @@ import '../../type_inference/inference_helper.dart';
3535
import '../../type_inference/type_inference_engine.dart';
3636
import '../../type_inference/type_inferrer.dart';
3737
import '../fragment.dart';
38+
import '../getter/declaration.dart';
39+
import '../setter/declaration.dart';
3840

3941
/// Common interface for fragments that can declare a field.
4042
abstract class FieldDeclaration {
4143
FieldQuality get fieldQuality;
4244

43-
GetterQuality get getterQuality;
44-
45-
SetterQuality get setterQuality;
46-
4745
/// The metadata declared on this fragment.
4846
List<MetadataBuilder>? get metadata;
4947

5048
/// Builds the core AST structures for this field declaration as needed for
5149
/// the outline.
52-
void buildOutlineNode(SourceLibraryBuilder libraryBuilder,
50+
void buildFieldOutlineNode(SourceLibraryBuilder libraryBuilder,
5351
NameScheme nameScheme, BuildNodesCallback f, FieldReference references,
5452
{required List<TypeParameter>? classTypeParameters});
5553

56-
void buildOutlineExpressions(
54+
void buildFieldOutlineExpressions(
5755
{required ClassHierarchy classHierarchy,
5856
required SourceLibraryBuilder libraryBuilder,
5957
required DeclarationBuilder? declarationBuilder,
6058
required List<Annotatable> annotatables,
6159
required Uri annotatablesFileUri,
6260
required bool isClassInstanceMember});
6361

64-
int computeDefaultTypes(ComputeDefaultTypeContext context);
62+
int computeFieldDefaultTypes(ComputeDefaultTypeContext context);
6563

66-
void checkTypes(SourceLibraryBuilder libraryBuilder,
64+
void checkFieldTypes(SourceLibraryBuilder libraryBuilder,
6765
TypeEnvironment typeEnvironment, SourcePropertyBuilder? setterBuilder);
6866

6967
/// Checks the variance of type parameters [sourceClassBuilder] used in the
7068
/// type of this field declaration.
71-
void checkVariance(
69+
void checkFieldVariance(
7270
SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment);
7371

74-
/// The references to the members from this field declaration that are
75-
/// accessible in exports through the name of the builder.
76-
Iterable<Reference> getExportedMemberReferences(FieldReference references);
77-
7872
/// Return `true` if the declaration introduces a setter.
7973
bool get hasSetter;
8074

@@ -94,20 +88,6 @@ abstract class FieldDeclaration {
9488
/// Returns `true` if this field is declared by an enum element.
9589
bool get isEnumElement;
9690

97-
/// The [ClassMember]s for the getter introduced by this field declaration.
98-
List<ClassMember> get localMembers;
99-
100-
/// The [ClassMember]s for the setter introduced by this field declaration,
101-
/// if any.
102-
List<ClassMember> get localSetters;
103-
104-
/// The [Member] uses as the target for reading from this field declaration.
105-
Member get readTarget;
106-
107-
/// The [Member] uses as the target for writing to this field declaration, or
108-
/// `null` if this field declaration has no setter.
109-
Member? get writeTarget;
110-
11191
/// The [DartType] of this field declaration.
11292
abstract DartType fieldType;
11393

@@ -153,6 +133,8 @@ class FieldDeclarationImpl
153133
implements
154134
FieldDeclaration,
155135
FieldFragmentDeclaration,
136+
GetterDeclaration,
137+
SetterDeclaration,
156138
Inferable,
157139
InferredTypeListener {
158140
final FieldFragment _fragment;
@@ -322,7 +304,7 @@ class FieldDeclarationImpl
322304
}
323305

324306
@override
325-
void buildOutlineExpressions(
307+
void buildFieldOutlineExpressions(
326308
{required ClassHierarchy classHierarchy,
327309
required SourceLibraryBuilder libraryBuilder,
328310
required DeclarationBuilder? declarationBuilder,
@@ -371,7 +353,7 @@ class FieldDeclarationImpl
371353
}
372354

373355
@override
374-
void buildOutlineNode(SourceLibraryBuilder libraryBuilder,
356+
void buildFieldOutlineNode(SourceLibraryBuilder libraryBuilder,
375357
NameScheme nameScheme, BuildNodesCallback f, FieldReference references,
376358
{required List<TypeParameter>? classTypeParameters}) {
377359
_encoding.buildOutlineNode(libraryBuilder, nameScheme, references,
@@ -385,7 +367,7 @@ class FieldDeclarationImpl
385367
}
386368

387369
@override
388-
void checkTypes(SourceLibraryBuilder libraryBuilder,
370+
void checkFieldTypes(SourceLibraryBuilder libraryBuilder,
389371
TypeEnvironment typeEnvironment, SourcePropertyBuilder? setterBuilder) {
390372
libraryBuilder.checkTypesInField(typeEnvironment,
391373
isInstanceMember: builder.isDeclarationInstanceMember,
@@ -400,7 +382,7 @@ class FieldDeclarationImpl
400382
}
401383

402384
@override
403-
void checkVariance(
385+
void checkFieldVariance(
404386
SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {
405387
sourceClassBuilder.checkVarianceInField(typeEnvironment,
406388
fieldType: fieldType,
@@ -412,7 +394,7 @@ class FieldDeclarationImpl
412394
}
413395

414396
@override
415-
int computeDefaultTypes(ComputeDefaultTypeContext context) {
397+
int computeFieldDefaultTypes(ComputeDefaultTypeContext context) {
416398
if (type is! OmittedTypeBuilder) {
417399
context.reportInboundReferenceIssuesForType(type);
418400
context.recursivelyReportGenericFunctionTypesAsBoundsForType(type);
@@ -548,14 +530,6 @@ class FieldDeclarationImpl
548530
}
549531
}
550532

551-
@override
552-
Iterable<Reference> getExportedMemberReferences(FieldReference references) {
553-
return [
554-
references.getterReference!,
555-
if (hasSetter) references.setterReference!
556-
];
557-
}
558-
559533
@override
560534
void registerSuperCall() {
561535
_encoding.registerSuperCall();
@@ -606,6 +580,108 @@ class FieldDeclarationImpl
606580
void setCovariantByClassInternal() {
607581
_encoding.setCovariantByClass();
608582
}
583+
584+
@override
585+
void buildGetterOutlineExpressions(
586+
{required ClassHierarchy classHierarchy,
587+
required SourceLibraryBuilder libraryBuilder,
588+
required DeclarationBuilder? declarationBuilder,
589+
required SourcePropertyBuilder propertyBuilder,
590+
required Annotatable annotatable,
591+
required Uri annotatableFileUri,
592+
required bool isClassInstanceMember}) {}
593+
594+
@override
595+
void buildGetterOutlineNode(
596+
{required SourceLibraryBuilder libraryBuilder,
597+
required NameScheme nameScheme,
598+
required BuildNodesCallback f,
599+
required PropertyReferences? references,
600+
required List<TypeParameter>? classTypeParameters}) {}
601+
602+
@override
603+
void buildSetterOutlineExpressions(
604+
{required ClassHierarchy classHierarchy,
605+
required SourceLibraryBuilder libraryBuilder,
606+
required DeclarationBuilder? declarationBuilder,
607+
required SourcePropertyBuilder propertyBuilder,
608+
required Annotatable annotatable,
609+
required Uri annotatableFileUri,
610+
required bool isClassInstanceMember}) {}
611+
612+
@override
613+
void buildSetterOutlineNode(
614+
{required SourceLibraryBuilder libraryBuilder,
615+
required NameScheme nameScheme,
616+
required BuildNodesCallback f,
617+
required PropertyReferences? references,
618+
required List<TypeParameter>? classTypeParameters}) {}
619+
620+
@override
621+
void checkGetterTypes(SourceLibraryBuilder libraryBuilder,
622+
TypeEnvironment typeEnvironment, SourcePropertyBuilder? setterBuilder) {}
623+
624+
@override
625+
void checkGetterVariance(
626+
SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {}
627+
628+
@override
629+
void checkSetterTypes(
630+
SourceLibraryBuilder libraryBuilder, TypeEnvironment typeEnvironment) {}
631+
632+
@override
633+
void checkSetterVariance(
634+
SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {}
635+
636+
@override
637+
int computeGetterDefaultTypes(ComputeDefaultTypeContext context) {
638+
return 0;
639+
}
640+
641+
@override
642+
int computeSetterDefaultTypes(ComputeDefaultTypeContext context) {
643+
return 0;
644+
}
645+
646+
@override
647+
void createGetterEncoding(
648+
ProblemReporting problemReporting,
649+
SourcePropertyBuilder builder,
650+
PropertyEncodingStrategy encodingStrategy,
651+
List<NominalParameterBuilder> unboundNominalParameters) {}
652+
653+
@override
654+
void createSetterEncoding(
655+
ProblemReporting problemReporting,
656+
SourcePropertyBuilder builder,
657+
PropertyEncodingStrategy encodingStrategy,
658+
List<NominalParameterBuilder> unboundNominalParameters) {}
659+
660+
@override
661+
void ensureGetterTypes(
662+
{required SourceLibraryBuilder libraryBuilder,
663+
required DeclarationBuilder? declarationBuilder,
664+
required ClassMembersBuilder membersBuilder,
665+
required Set<ClassMember>? getterOverrideDependencies}) {}
666+
667+
@override
668+
void ensureSetterTypes(
669+
{required SourceLibraryBuilder libraryBuilder,
670+
required DeclarationBuilder? declarationBuilder,
671+
required ClassMembersBuilder membersBuilder,
672+
required Set<ClassMember>? setterOverrideDependencies}) {}
673+
674+
@override
675+
Iterable<Reference> getExportedGetterReferences(
676+
PropertyReferences references) {
677+
return [references.getterReference!];
678+
}
679+
680+
@override
681+
Iterable<Reference> getExportedSetterReferences(
682+
PropertyReferences references) {
683+
return hasSetter ? [references.setterReference!] : const [];
684+
}
609685
}
610686

611687
mixin FieldDeclarationMixin

0 commit comments

Comments
 (0)