[cfe] Add ScopeProvider as an interface of Field

Part of https://github.com/dart-lang/sdk/issues/61572

Change-Id: I8a9cb883181a584ceac9aef6a863e135474026eb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/495960
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Chloe Stefantsova <cstefantsova@google.com>
This commit is contained in:
Chloe Stefantsova
2026-04-20 05:24:58 -07:00
committed by dart-scoped@luci-project-accounts.iam.gserviceaccount.com
parent 8f1336e49e
commit fac280bd7e
24 changed files with 600 additions and 360 deletions
+4 -1
View File
@@ -264,7 +264,7 @@ sealed class Member extends NamedNode implements Annotatable, FileUriNode {
///
/// The implied getter and setter for the field are not represented explicitly,
/// but can be made explicit if needed.
class Field extends Member {
class Field extends Member implements ScopeProvider {
DartType type; // Not null. Defaults to DynamicType.
int flags = 0;
Expression? initializer; // May be null.
@@ -291,6 +291,9 @@ class Field extends Member {
/// in the field values of [InstanceConstant].
Reference get fieldReference => super.reference;
@override
Scope? scope;
Field.mutable(
Name name, {
this.type = const DynamicType(),
+7
View File
@@ -2342,6 +2342,9 @@ class EquivalenceStrategy {
if (!checkField_setterReference(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkField_scope(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkField_fileEndOffset(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
@@ -8030,6 +8033,10 @@ class EquivalenceStrategy {
);
}
bool checkField_scope(EquivalenceVisitor visitor, Field node, Field other) {
return visitor.checkNodes(node.scope, other.scope, 'scope');
}
bool checkMember_fileEndOffset(
EquivalenceVisitor visitor,
Member node,
+3
View File
@@ -1345,6 +1345,9 @@ class Printer extends VisitorDefault<void> with VisitorVoidMixin {
writeSpace();
writeAnnotatedType(node.type, annotator?.annotateField(this, node));
writeName(getMemberName(node), showLibrary: true);
if (node.scope case Scope scope?) {
writeScope(scope);
}
Expression? initializer = node.initializer;
if (initializer != null) {
writeSpaced('=');