[cfe] Update documentation for *References objects
Change-Id: Ib74446de255dc5572783a8945025d9e55881f704
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/435800
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
diff --git a/pkg/front_end/lib/src/fragment/enum_element.dart b/pkg/front_end/lib/src/fragment/enum_element.dart
index 00f169c..f20411b 100644
--- a/pkg/front_end/lib/src/fragment/enum_element.dart
+++ b/pkg/front_end/lib/src/fragment/enum_element.dart
@@ -258,7 +258,7 @@
// Coverage-ignore(suite): Not run.
Iterable<Reference> getExportedGetterReferences(
PropertyReferences references) {
- return [references.getterReference!];
+ return [references.getterReference];
}
@override
diff --git a/pkg/front_end/lib/src/fragment/field/declaration.dart b/pkg/front_end/lib/src/fragment/field/declaration.dart
index b631cd0..3310584 100644
--- a/pkg/front_end/lib/src/fragment/field/declaration.dart
+++ b/pkg/front_end/lib/src/fragment/field/declaration.dart
@@ -693,13 +693,13 @@
@override
Iterable<Reference> getExportedGetterReferences(
PropertyReferences references) {
- return [references.getterReference!];
+ return [references.getterReference];
}
@override
Iterable<Reference> getExportedSetterReferences(
PropertyReferences references) {
- return hasSetter ? [references.setterReference!] : const [];
+ return hasSetter ? [references.setterReference] : const [];
}
}
diff --git a/pkg/front_end/lib/src/fragment/getter/declaration.dart b/pkg/front_end/lib/src/fragment/getter/declaration.dart
index 26757ac..ff956a0 100644
--- a/pkg/front_end/lib/src/fragment/getter/declaration.dart
+++ b/pkg/front_end/lib/src/fragment/getter/declaration.dart
@@ -253,7 +253,7 @@
@override
Iterable<Reference> getExportedGetterReferences(
PropertyReferences references) =>
- [references.getterReference!];
+ [references.getterReference];
@override
VariableDeclaration getFormalParameter(int index) {
diff --git a/pkg/front_end/lib/src/fragment/primary_constructor_field.dart b/pkg/front_end/lib/src/fragment/primary_constructor_field.dart
index 79ec1ca..115a170 100644
--- a/pkg/front_end/lib/src/fragment/primary_constructor_field.dart
+++ b/pkg/front_end/lib/src/fragment/primary_constructor_field.dart
@@ -340,7 +340,7 @@
// Coverage-ignore(suite): Not run.
Iterable<Reference> getExportedGetterReferences(
PropertyReferences references) {
- return [references.getterReference!];
+ return [references.getterReference];
}
@override
diff --git a/pkg/front_end/lib/src/fragment/setter/declaration.dart b/pkg/front_end/lib/src/fragment/setter/declaration.dart
index b925523..05ec363 100644
--- a/pkg/front_end/lib/src/fragment/setter/declaration.dart
+++ b/pkg/front_end/lib/src/fragment/setter/declaration.dart
@@ -255,7 +255,7 @@
@override
Iterable<Reference> getExportedSetterReferences(
PropertyReferences references) =>
- [references.setterReference!];
+ [references.setterReference];
@override
VariableDeclaration getFormalParameter(int index) {
diff --git a/pkg/front_end/lib/src/source/source_constructor_builder.dart b/pkg/front_end/lib/src/source/source_constructor_builder.dart
index 677c0bb..23ca2d4 100644
--- a/pkg/front_end/lib/src/source/source_constructor_builder.dart
+++ b/pkg/front_end/lib/src/source/source_constructor_builder.dart
@@ -593,16 +593,36 @@
}
}
+/// [Reference]s used for the [Member] nodes created for a generative
+/// constructor.
class ConstructorReferences {
Reference? _constructorReference;
Reference? _tearOffReference;
- final bool _hasTearOff;
+ /// If `true`, the generative constructor has a tear-off lowering and should
+ /// therefore have distinct [constructorReference] and [tearOffReference]
+ /// values.
+ final bool _hasTearOffLowering;
+
+ /// Creates a [ConstructorReferences] object preloaded with the
+ /// [preExistingConstructorReference] and [preExistingTearOffReference].
+ ///
+ /// For initial/one-off compilations these are `null`, but for subsequent
+ /// compilations during an incremental compilation, these are the references
+ /// used for the same generative constructor and tear-off in the previous
+ /// compilation.
ConstructorReferences._(
- this._constructorReference, this._tearOffReference, this._hasTearOff)
- : assert(!(_tearOffReference != null && !_hasTearOff),
- "Unexpected tear off reference $_tearOffReference.");
+ {required Reference? preExistingConstructorReference,
+ required Reference? preExistingTearOffReference,
+ required bool hasTearOffLowering})
+ : _constructorReference = preExistingConstructorReference,
+ _tearOffReference = preExistingTearOffReference,
+ _hasTearOffLowering = hasTearOffLowering,
+ assert(!(preExistingTearOffReference != null && !hasTearOffLowering),
+ "Unexpected tear off reference $preExistingTearOffReference.");
+ /// Creates a [ConstructorReferences] object preloaded with the pre-existing
+ /// references from [indexedContainer], if available.
factory ConstructorReferences({
required String name,
required NameScheme nameScheme,
@@ -610,7 +630,7 @@
required SourceLoader loader,
required DeclarationBuilder declarationBuilder,
}) {
- bool hasTearOff = switch (declarationBuilder) {
+ bool hasTearOffLowering = switch (declarationBuilder) {
ClassBuilder() =>
!(declarationBuilder.isAbstract || declarationBuilder.isEnum) &&
loader.target.backendTarget.isConstructorTearOffLoweringEnabled,
@@ -618,20 +638,28 @@
ExtensionTypeDeclarationBuilder() => true,
};
- Reference? constructorReference;
- Reference? tearOffReference;
+ Reference? preExistingConstructorReference;
+ Reference? preExistingTearOffReference;
if (indexedContainer != null) {
- constructorReference = indexedContainer.lookupConstructorReference(
- nameScheme.getConstructorMemberName(name, isTearOff: false).name);
- tearOffReference = indexedContainer.lookupGetterReference(
+ preExistingConstructorReference =
+ indexedContainer.lookupConstructorReference(
+ nameScheme.getConstructorMemberName(name, isTearOff: false).name);
+ preExistingTearOffReference = indexedContainer.lookupGetterReference(
nameScheme.getConstructorMemberName(name, isTearOff: true).name);
}
return new ConstructorReferences._(
- constructorReference, tearOffReference, hasTearOff);
+ preExistingConstructorReference: preExistingConstructorReference,
+ preExistingTearOffReference: preExistingTearOffReference,
+ hasTearOffLowering: hasTearOffLowering);
}
+ /// Registers that [builder] is created for the pre-existing references
+ /// provided in [ConstructorReferences._].
+ ///
+ /// This must be called before [constructorReference] and [tearOffReference]
+ /// are accessed.
void registerReference(
SourceLoader loader, SourceConstructorBuilder builder) {
if (_constructorReference != null) {
@@ -642,9 +670,17 @@
}
}
+ /// The [Reference] used to refer to the [Member] node created for the
+ /// generative constructor.
Reference get constructorReference =>
_constructorReference ??= new Reference();
+ /// The [Reference] used to refer to the [Member] node created for the
+ /// tear-off of the generative constructor.
+ ///
+ /// If a tear-off lowering is created for the generative constructor, this is
+ /// distinct from [constructorReference], otherwise it is the same [Reference]
+ /// as [constructorReference].
Reference get tearOffReference => _tearOffReference ??=
- _hasTearOff ? new Reference() : constructorReference;
+ _hasTearOffLowering ? new Reference() : constructorReference;
}
diff --git a/pkg/front_end/lib/src/source/source_enum_builder.dart b/pkg/front_end/lib/src/source/source_enum_builder.dart
index c3a9fe1..8a42e67 100644
--- a/pkg/front_end/lib/src/source/source_enum_builder.dart
+++ b/pkg/front_end/lib/src/source/source_enum_builder.dart
@@ -861,7 +861,7 @@
// Coverage-ignore(suite): Not run.
Iterable<Reference> getExportedGetterReferences(
PropertyReferences references) {
- return [references.getterReference!];
+ return [references.getterReference];
}
}
diff --git a/pkg/front_end/lib/src/source/source_factory_builder.dart b/pkg/front_end/lib/src/source/source_factory_builder.dart
index bd61fda..ccf5842 100644
--- a/pkg/front_end/lib/src/source/source_factory_builder.dart
+++ b/pkg/front_end/lib/src/source/source_factory_builder.dart
@@ -342,16 +342,35 @@
}
}
+/// [Reference]s used for the [Member] nodes created for a factory constructor.
class FactoryReferences {
Reference? _factoryReference;
Reference? _tearOffReference;
- final bool _hasTearOff;
+ /// If `true`, the factory constructor has a tear-off lowering and should
+ /// therefore have distinct [factoryReference] and [tearOffReference]
+ /// values.
+ final bool _hasTearOffLowering;
+
+ /// Creates a [FactoryReferences] object preloaded with the
+ /// [preExistingFactoryReference] and [preExistingTearOffReference].
+ ///
+ /// For initial/one-off compilations these are `null`, but for subsequent
+ /// compilations during an incremental compilation, these are the references
+ /// used for the same factory constructor and tear-off in the previous
+ /// compilation.
FactoryReferences._(
- this._factoryReference, this._tearOffReference, this._hasTearOff)
- : assert(!(_tearOffReference != null && !_hasTearOff),
- "Unexpected tear off reference $_tearOffReference.");
+ {required Reference? preExistingFactoryReference,
+ required Reference? preExistingTearOffReference,
+ required bool hasTearOffLowering})
+ : _factoryReference = preExistingFactoryReference,
+ _tearOffReference = preExistingTearOffReference,
+ _hasTearOffLowering = hasTearOffLowering,
+ assert(!(preExistingTearOffReference != null && !hasTearOffLowering),
+ "Unexpected tear off reference $preExistingTearOffReference.");
+ /// Creates a [FactoryReferences] object preloaded with the pre-existing
+ /// references from [indexedContainer], if available.
factory FactoryReferences({
required String name,
required NameScheme nameScheme,
@@ -359,27 +378,34 @@
required SourceLoader loader,
required DeclarationBuilder declarationBuilder,
}) {
- bool hasTearOff = switch (declarationBuilder) {
+ bool hasTearOffLowering = switch (declarationBuilder) {
ClassBuilder() =>
loader.target.backendTarget.isFactoryTearOffLoweringEnabled,
ExtensionBuilder() => false,
ExtensionTypeDeclarationBuilder() => true,
};
- Reference? constructorReference;
- Reference? tearOffReference;
+ Reference? preExistingFactoryReference;
+ Reference? preExistingTearOffReference;
if (indexedContainer != null) {
- constructorReference = indexedContainer.lookupConstructorReference(
+ preExistingFactoryReference = indexedContainer.lookupConstructorReference(
nameScheme.getConstructorMemberName(name, isTearOff: false).name);
- tearOffReference = indexedContainer.lookupGetterReference(
+ preExistingTearOffReference = indexedContainer.lookupGetterReference(
nameScheme.getConstructorMemberName(name, isTearOff: true).name);
}
return new FactoryReferences._(
- constructorReference, tearOffReference, hasTearOff);
+ preExistingFactoryReference: preExistingFactoryReference,
+ preExistingTearOffReference: preExistingTearOffReference,
+ hasTearOffLowering: hasTearOffLowering);
}
+ /// Registers that [builder] is created for the pre-existing references
+ /// provided in [FactoryReferences._].
+ ///
+ /// This must be called before [factoryReference] and [tearOffReference] are
+ /// accessed.
void registerReference(SourceLoader loader, SourceFactoryBuilder builder) {
if (_factoryReference != null) {
loader.buildersCreatedWithReferences[_factoryReference!] = builder;
@@ -389,8 +415,16 @@
}
}
+ /// The [Reference] used to refer to the [Member] node created for the factory
+ /// constructor.
Reference get factoryReference => _factoryReference ??= new Reference();
- Reference get tearOffReference =>
- _tearOffReference ??= _hasTearOff ? new Reference() : factoryReference;
+ /// The [Reference] used to refer to the [Member] node created for the
+ /// tear-off of the factory constructor.
+ ///
+ /// If a tear-off lowering is created for the factory constructor, this is
+ /// distinct from [factoryReference], otherwise it is the same [Reference] as
+ /// [factoryReference].
+ Reference get tearOffReference => _tearOffReference ??=
+ _hasTearOffLowering ? new Reference() : factoryReference;
}
diff --git a/pkg/front_end/lib/src/source/source_property_builder.dart b/pkg/front_end/lib/src/source/source_property_builder.dart
index a3ab2b6..92dbe0c 100644
--- a/pkg/front_end/lib/src/source/source_property_builder.dart
+++ b/pkg/front_end/lib/src/source/source_property_builder.dart
@@ -834,36 +834,39 @@
String toString() => '$runtimeType($fullName,forSetter=${forSetter})';
}
-abstract class PropertyReferences {
- Reference? get fieldReference;
- Reference? get getterReference;
- Reference? get setterReference;
-
- void registerReference(SourceLoader loader, SourcePropertyBuilder builder);
-
- factory PropertyReferences(
- String name, NameScheme nameScheme, IndexedContainer? indexedContainer,
- {required bool fieldIsLateWithLowering}) = _PropertyReferences;
-}
-
-class _PropertyReferences implements PropertyReferences {
+/// [Reference]s used for the [Member] nodes created for a property.
+class PropertyReferences {
Reference? _fieldReference;
Reference? _getterReference;
Reference? _setterReference;
- _PropertyReferences._(
- this._fieldReference, this._getterReference, this._setterReference);
+ /// Creates a [PropertyReferences] object preloaded with the
+ /// [preExistingFieldReference], [preExistingGetterReference] and
+ /// [preExistingSetterReference].
+ ///
+ /// For initial/one-off compilations these are `null`, but for subsequent
+ /// compilations during an incremental compilation, these are the references
+ /// used for the same field, getter, and setter in the previous compilation.
+ PropertyReferences._(
+ {required Reference? preExistingFieldReference,
+ required Reference? preExistingGetterReference,
+ required Reference? preExistingSetterReference})
+ : _fieldReference = preExistingFieldReference,
+ _getterReference = preExistingGetterReference,
+ _setterReference = preExistingSetterReference;
- factory _PropertyReferences(
+ /// Creates a [PropertyReferences] object preloaded with the pre-existing
+ /// references from [indexedContainer], if available.
+ factory PropertyReferences(
String name, NameScheme nameScheme, IndexedContainer? indexedContainer,
{required bool fieldIsLateWithLowering}) {
- Reference? getterReference;
- Reference? setterReference;
- Reference? fieldReference;
+ Reference? preExistingGetterReference;
+ Reference? preExistingSetterReference;
+ Reference? preExistingFieldReference;
if (indexedContainer != null) {
Name getterNameToLookup =
nameScheme.getProcedureMemberName(ProcedureKind.Getter, name).name;
- getterReference =
+ preExistingGetterReference =
indexedContainer.lookupGetterReference(getterNameToLookup);
Name setterNameToLookup =
@@ -871,10 +874,10 @@
if ((nameScheme.isExtensionMember || nameScheme.isExtensionTypeMember) &&
nameScheme.isInstanceMember) {
// Extension (type) instance setters are encoded as methods.
- setterReference =
+ preExistingSetterReference =
indexedContainer.lookupGetterReference(setterNameToLookup);
} else {
- setterReference =
+ preExistingSetterReference =
indexedContainer.lookupSetterReference(setterNameToLookup);
}
@@ -882,14 +885,21 @@
.getFieldMemberName(FieldNameType.Field, name,
isSynthesized: fieldIsLateWithLowering)
.name;
- fieldReference = indexedContainer.lookupFieldReference(fieldNameToLookup);
+ preExistingFieldReference =
+ indexedContainer.lookupFieldReference(fieldNameToLookup);
}
- return new _PropertyReferences._(
- fieldReference, getterReference, setterReference);
+ return new PropertyReferences._(
+ preExistingFieldReference: preExistingFieldReference,
+ preExistingGetterReference: preExistingGetterReference,
+ preExistingSetterReference: preExistingSetterReference);
}
- @override
+ /// Registers that [builder] is created for the pre-existing references
+ /// provided in [PropertyReferences._].
+ ///
+ /// This must be called before [fieldReference], [getterReference] and
+ /// [setterReference] are accessed.
void registerReference(SourceLoader loader, SourcePropertyBuilder builder) {
if (_fieldReference != null) {
loader.buildersCreatedWithReferences[_fieldReference!] = builder;
@@ -902,12 +912,15 @@
}
}
- @override
+ /// The [Reference] used to refer to the field aspect of the [Field] node
+ /// created for this property.
Reference get fieldReference => _fieldReference ??= new Reference();
- @override
+ /// The [Reference] used to refer to the getter aspect of the [Member] node(s)
+ /// created for this property.
Reference get getterReference => _getterReference ??= new Reference();
- @override
+ /// The [Reference] used to refer to the setter aspect of the [Member] node(s)
+ /// created for this property.
Reference get setterReference => _setterReference ??= new Reference();
}
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index 379c22c..f53c1be 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -1343,6 +1343,7 @@
preferably
prefixing
preliminary
+preloaded
premark
preorder
prepares