Skip to content

Commit 3ef349c

Browse files
johnniwintherCommit Queue
authored andcommitted
[cfe] Update documentation for *References objects
Change-Id: Ib74446de255dc5572783a8945025d9e55881f704 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/435800 Commit-Queue: Johnni Winther <[email protected]> Reviewed-by: Chloe Stefantsova <[email protected]>
1 parent c0b6ec4 commit 3ef349c

10 files changed

+147
-63
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ class EnumElementDeclaration
258258
// Coverage-ignore(suite): Not run.
259259
Iterable<Reference> getExportedGetterReferences(
260260
PropertyReferences references) {
261-
return [references.getterReference!];
261+
return [references.getterReference];
262262
}
263263

264264
@override

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -693,13 +693,13 @@ class RegularFieldDeclaration
693693
@override
694694
Iterable<Reference> getExportedGetterReferences(
695695
PropertyReferences references) {
696-
return [references.getterReference!];
696+
return [references.getterReference];
697697
}
698698

699699
@override
700700
Iterable<Reference> getExportedSetterReferences(
701701
PropertyReferences references) {
702-
return hasSetter ? [references.setterReference!] : const [];
702+
return hasSetter ? [references.setterReference] : const [];
703703
}
704704
}
705705

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ class RegularGetterDeclaration
253253
@override
254254
Iterable<Reference> getExportedGetterReferences(
255255
PropertyReferences references) =>
256-
[references.getterReference!];
256+
[references.getterReference];
257257

258258
@override
259259
VariableDeclaration getFormalParameter(int index) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ class PrimaryConstructorFieldDeclaration
340340
// Coverage-ignore(suite): Not run.
341341
Iterable<Reference> getExportedGetterReferences(
342342
PropertyReferences references) {
343-
return [references.getterReference!];
343+
return [references.getterReference];
344344
}
345345

346346
@override

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ class RegularSetterDeclaration
255255
@override
256256
Iterable<Reference> getExportedSetterReferences(
257257
PropertyReferences references) =>
258-
[references.setterReference!];
258+
[references.setterReference];
259259

260260
@override
261261
VariableDeclaration getFormalParameter(int index) {

pkg/front_end/lib/src/source/source_constructor_builder.dart

Lines changed: 49 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -593,45 +593,73 @@ class SourceConstructorBuilder extends SourceMemberBuilderImpl
593593
}
594594
}
595595

596+
/// [Reference]s used for the [Member] nodes created for a generative
597+
/// constructor.
596598
class ConstructorReferences {
597599
Reference? _constructorReference;
598600
Reference? _tearOffReference;
599-
final bool _hasTearOff;
600601

601-
ConstructorReferences._(
602-
this._constructorReference, this._tearOffReference, this._hasTearOff)
603-
: assert(!(_tearOffReference != null && !_hasTearOff),
604-
"Unexpected tear off reference $_tearOffReference.");
602+
/// If `true`, the generative constructor has a tear-off lowering and should
603+
/// therefore have distinct [constructorReference] and [tearOffReference]
604+
/// values.
605+
final bool _hasTearOffLowering;
605606

607+
/// Creates a [ConstructorReferences] object preloaded with the
608+
/// [preExistingConstructorReference] and [preExistingTearOffReference].
609+
///
610+
/// For initial/one-off compilations these are `null`, but for subsequent
611+
/// compilations during an incremental compilation, these are the references
612+
/// used for the same generative constructor and tear-off in the previous
613+
/// compilation.
614+
ConstructorReferences._(
615+
{required Reference? preExistingConstructorReference,
616+
required Reference? preExistingTearOffReference,
617+
required bool hasTearOffLowering})
618+
: _constructorReference = preExistingConstructorReference,
619+
_tearOffReference = preExistingTearOffReference,
620+
_hasTearOffLowering = hasTearOffLowering,
621+
assert(!(preExistingTearOffReference != null && !hasTearOffLowering),
622+
"Unexpected tear off reference $preExistingTearOffReference.");
623+
624+
/// Creates a [ConstructorReferences] object preloaded with the pre-existing
625+
/// references from [indexedContainer], if available.
606626
factory ConstructorReferences({
607627
required String name,
608628
required NameScheme nameScheme,
609629
required IndexedContainer? indexedContainer,
610630
required SourceLoader loader,
611631
required DeclarationBuilder declarationBuilder,
612632
}) {
613-
bool hasTearOff = switch (declarationBuilder) {
633+
bool hasTearOffLowering = switch (declarationBuilder) {
614634
ClassBuilder() =>
615635
!(declarationBuilder.isAbstract || declarationBuilder.isEnum) &&
616636
loader.target.backendTarget.isConstructorTearOffLoweringEnabled,
617637
ExtensionBuilder() => true,
618638
ExtensionTypeDeclarationBuilder() => true,
619639
};
620640

621-
Reference? constructorReference;
622-
Reference? tearOffReference;
641+
Reference? preExistingConstructorReference;
642+
Reference? preExistingTearOffReference;
623643

624644
if (indexedContainer != null) {
625-
constructorReference = indexedContainer.lookupConstructorReference(
626-
nameScheme.getConstructorMemberName(name, isTearOff: false).name);
627-
tearOffReference = indexedContainer.lookupGetterReference(
645+
preExistingConstructorReference =
646+
indexedContainer.lookupConstructorReference(
647+
nameScheme.getConstructorMemberName(name, isTearOff: false).name);
648+
preExistingTearOffReference = indexedContainer.lookupGetterReference(
628649
nameScheme.getConstructorMemberName(name, isTearOff: true).name);
629650
}
630651

631652
return new ConstructorReferences._(
632-
constructorReference, tearOffReference, hasTearOff);
653+
preExistingConstructorReference: preExistingConstructorReference,
654+
preExistingTearOffReference: preExistingTearOffReference,
655+
hasTearOffLowering: hasTearOffLowering);
633656
}
634657

658+
/// Registers that [builder] is created for the pre-existing references
659+
/// provided in [ConstructorReferences._].
660+
///
661+
/// This must be called before [constructorReference] and [tearOffReference]
662+
/// are accessed.
635663
void registerReference(
636664
SourceLoader loader, SourceConstructorBuilder builder) {
637665
if (_constructorReference != null) {
@@ -642,9 +670,17 @@ class ConstructorReferences {
642670
}
643671
}
644672

673+
/// The [Reference] used to refer to the [Member] node created for the
674+
/// generative constructor.
645675
Reference get constructorReference =>
646676
_constructorReference ??= new Reference();
647677

678+
/// The [Reference] used to refer to the [Member] node created for the
679+
/// tear-off of the generative constructor.
680+
///
681+
/// If a tear-off lowering is created for the generative constructor, this is
682+
/// distinct from [constructorReference], otherwise it is the same [Reference]
683+
/// as [constructorReference].
648684
Reference get tearOffReference => _tearOffReference ??=
649-
_hasTearOff ? new Reference() : constructorReference;
685+
_hasTearOffLowering ? new Reference() : constructorReference;
650686
}

pkg/front_end/lib/src/source/source_enum_builder.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -861,7 +861,7 @@ class _EnumValuesFieldDeclaration
861861
// Coverage-ignore(suite): Not run.
862862
Iterable<Reference> getExportedGetterReferences(
863863
PropertyReferences references) {
864-
return [references.getterReference!];
864+
return [references.getterReference];
865865
}
866866
}
867867

pkg/front_end/lib/src/source/source_factory_builder.dart

Lines changed: 47 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -342,44 +342,70 @@ class InferableRedirectingFactory implements InferableMember {
342342
}
343343
}
344344

345+
/// [Reference]s used for the [Member] nodes created for a factory constructor.
345346
class FactoryReferences {
346347
Reference? _factoryReference;
347348
Reference? _tearOffReference;
348-
final bool _hasTearOff;
349349

350+
/// If `true`, the factory constructor has a tear-off lowering and should
351+
/// therefore have distinct [factoryReference] and [tearOffReference]
352+
/// values.
353+
final bool _hasTearOffLowering;
354+
355+
/// Creates a [FactoryReferences] object preloaded with the
356+
/// [preExistingFactoryReference] and [preExistingTearOffReference].
357+
///
358+
/// For initial/one-off compilations these are `null`, but for subsequent
359+
/// compilations during an incremental compilation, these are the references
360+
/// used for the same factory constructor and tear-off in the previous
361+
/// compilation.
350362
FactoryReferences._(
351-
this._factoryReference, this._tearOffReference, this._hasTearOff)
352-
: assert(!(_tearOffReference != null && !_hasTearOff),
353-
"Unexpected tear off reference $_tearOffReference.");
354-
363+
{required Reference? preExistingFactoryReference,
364+
required Reference? preExistingTearOffReference,
365+
required bool hasTearOffLowering})
366+
: _factoryReference = preExistingFactoryReference,
367+
_tearOffReference = preExistingTearOffReference,
368+
_hasTearOffLowering = hasTearOffLowering,
369+
assert(!(preExistingTearOffReference != null && !hasTearOffLowering),
370+
"Unexpected tear off reference $preExistingTearOffReference.");
371+
372+
/// Creates a [FactoryReferences] object preloaded with the pre-existing
373+
/// references from [indexedContainer], if available.
355374
factory FactoryReferences({
356375
required String name,
357376
required NameScheme nameScheme,
358377
required IndexedContainer? indexedContainer,
359378
required SourceLoader loader,
360379
required DeclarationBuilder declarationBuilder,
361380
}) {
362-
bool hasTearOff = switch (declarationBuilder) {
381+
bool hasTearOffLowering = switch (declarationBuilder) {
363382
ClassBuilder() =>
364383
loader.target.backendTarget.isFactoryTearOffLoweringEnabled,
365384
ExtensionBuilder() => false,
366385
ExtensionTypeDeclarationBuilder() => true,
367386
};
368387

369-
Reference? constructorReference;
370-
Reference? tearOffReference;
388+
Reference? preExistingFactoryReference;
389+
Reference? preExistingTearOffReference;
371390

372391
if (indexedContainer != null) {
373-
constructorReference = indexedContainer.lookupConstructorReference(
392+
preExistingFactoryReference = indexedContainer.lookupConstructorReference(
374393
nameScheme.getConstructorMemberName(name, isTearOff: false).name);
375-
tearOffReference = indexedContainer.lookupGetterReference(
394+
preExistingTearOffReference = indexedContainer.lookupGetterReference(
376395
nameScheme.getConstructorMemberName(name, isTearOff: true).name);
377396
}
378397

379398
return new FactoryReferences._(
380-
constructorReference, tearOffReference, hasTearOff);
399+
preExistingFactoryReference: preExistingFactoryReference,
400+
preExistingTearOffReference: preExistingTearOffReference,
401+
hasTearOffLowering: hasTearOffLowering);
381402
}
382403

404+
/// Registers that [builder] is created for the pre-existing references
405+
/// provided in [FactoryReferences._].
406+
///
407+
/// This must be called before [factoryReference] and [tearOffReference] are
408+
/// accessed.
383409
void registerReference(SourceLoader loader, SourceFactoryBuilder builder) {
384410
if (_factoryReference != null) {
385411
loader.buildersCreatedWithReferences[_factoryReference!] = builder;
@@ -389,8 +415,16 @@ class FactoryReferences {
389415
}
390416
}
391417

418+
/// The [Reference] used to refer to the [Member] node created for the factory
419+
/// constructor.
392420
Reference get factoryReference => _factoryReference ??= new Reference();
393421

394-
Reference get tearOffReference =>
395-
_tearOffReference ??= _hasTearOff ? new Reference() : factoryReference;
422+
/// The [Reference] used to refer to the [Member] node created for the
423+
/// tear-off of the factory constructor.
424+
///
425+
/// If a tear-off lowering is created for the factory constructor, this is
426+
/// distinct from [factoryReference], otherwise it is the same [Reference] as
427+
/// [factoryReference].
428+
Reference get tearOffReference => _tearOffReference ??=
429+
_hasTearOffLowering ? new Reference() : factoryReference;
396430
}

pkg/front_end/lib/src/source/source_property_builder.dart

Lines changed: 43 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -834,62 +834,72 @@ class SetterClassMember implements ClassMember {
834834
String toString() => '$runtimeType($fullName,forSetter=${forSetter})';
835835
}
836836

837-
abstract class PropertyReferences {
838-
Reference? get fieldReference;
839-
Reference? get getterReference;
840-
Reference? get setterReference;
841-
842-
void registerReference(SourceLoader loader, SourcePropertyBuilder builder);
843-
844-
factory PropertyReferences(
845-
String name, NameScheme nameScheme, IndexedContainer? indexedContainer,
846-
{required bool fieldIsLateWithLowering}) = _PropertyReferences;
847-
}
848-
849-
class _PropertyReferences implements PropertyReferences {
837+
/// [Reference]s used for the [Member] nodes created for a property.
838+
class PropertyReferences {
850839
Reference? _fieldReference;
851840
Reference? _getterReference;
852841
Reference? _setterReference;
853842

854-
_PropertyReferences._(
855-
this._fieldReference, this._getterReference, this._setterReference);
856-
857-
factory _PropertyReferences(
843+
/// Creates a [PropertyReferences] object preloaded with the
844+
/// [preExistingFieldReference], [preExistingGetterReference] and
845+
/// [preExistingSetterReference].
846+
///
847+
/// For initial/one-off compilations these are `null`, but for subsequent
848+
/// compilations during an incremental compilation, these are the references
849+
/// used for the same field, getter, and setter in the previous compilation.
850+
PropertyReferences._(
851+
{required Reference? preExistingFieldReference,
852+
required Reference? preExistingGetterReference,
853+
required Reference? preExistingSetterReference})
854+
: _fieldReference = preExistingFieldReference,
855+
_getterReference = preExistingGetterReference,
856+
_setterReference = preExistingSetterReference;
857+
858+
/// Creates a [PropertyReferences] object preloaded with the pre-existing
859+
/// references from [indexedContainer], if available.
860+
factory PropertyReferences(
858861
String name, NameScheme nameScheme, IndexedContainer? indexedContainer,
859862
{required bool fieldIsLateWithLowering}) {
860-
Reference? getterReference;
861-
Reference? setterReference;
862-
Reference? fieldReference;
863+
Reference? preExistingGetterReference;
864+
Reference? preExistingSetterReference;
865+
Reference? preExistingFieldReference;
863866
if (indexedContainer != null) {
864867
Name getterNameToLookup =
865868
nameScheme.getProcedureMemberName(ProcedureKind.Getter, name).name;
866-
getterReference =
869+
preExistingGetterReference =
867870
indexedContainer.lookupGetterReference(getterNameToLookup);
868871

869872
Name setterNameToLookup =
870873
nameScheme.getProcedureMemberName(ProcedureKind.Setter, name).name;
871874
if ((nameScheme.isExtensionMember || nameScheme.isExtensionTypeMember) &&
872875
nameScheme.isInstanceMember) {
873876
// Extension (type) instance setters are encoded as methods.
874-
setterReference =
877+
preExistingSetterReference =
875878
indexedContainer.lookupGetterReference(setterNameToLookup);
876879
} else {
877-
setterReference =
880+
preExistingSetterReference =
878881
indexedContainer.lookupSetterReference(setterNameToLookup);
879882
}
880883

881884
Name fieldNameToLookup = nameScheme
882885
.getFieldMemberName(FieldNameType.Field, name,
883886
isSynthesized: fieldIsLateWithLowering)
884887
.name;
885-
fieldReference = indexedContainer.lookupFieldReference(fieldNameToLookup);
888+
preExistingFieldReference =
889+
indexedContainer.lookupFieldReference(fieldNameToLookup);
886890
}
887891

888-
return new _PropertyReferences._(
889-
fieldReference, getterReference, setterReference);
892+
return new PropertyReferences._(
893+
preExistingFieldReference: preExistingFieldReference,
894+
preExistingGetterReference: preExistingGetterReference,
895+
preExistingSetterReference: preExistingSetterReference);
890896
}
891897

892-
@override
898+
/// Registers that [builder] is created for the pre-existing references
899+
/// provided in [PropertyReferences._].
900+
///
901+
/// This must be called before [fieldReference], [getterReference] and
902+
/// [setterReference] are accessed.
893903
void registerReference(SourceLoader loader, SourcePropertyBuilder builder) {
894904
if (_fieldReference != null) {
895905
loader.buildersCreatedWithReferences[_fieldReference!] = builder;
@@ -902,12 +912,15 @@ class _PropertyReferences implements PropertyReferences {
902912
}
903913
}
904914

905-
@override
915+
/// The [Reference] used to refer to the field aspect of the [Field] node
916+
/// created for this property.
906917
Reference get fieldReference => _fieldReference ??= new Reference();
907918

908-
@override
919+
/// The [Reference] used to refer to the getter aspect of the [Member] node(s)
920+
/// created for this property.
909921
Reference get getterReference => _getterReference ??= new Reference();
910922

911-
@override
923+
/// The [Reference] used to refer to the setter aspect of the [Member] node(s)
924+
/// created for this property.
912925
Reference get setterReference => _setterReference ??= new Reference();
913926
}

pkg/front_end/test/spell_checking_list_code.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1343,6 +1343,7 @@ preexisting
13431343
preferably
13441344
prefixing
13451345
preliminary
1346+
preloaded
13461347
premark
13471348
preorder
13481349
prepares

0 commit comments

Comments
 (0)