Skip to content

Commit 4aa7c8b

Browse files
johnniwintherCommit Queue
authored andcommitted
[cfe] Handle getter/setter patches through fragments
Change-Id: I93288a5518f2396df9783d45e9ebfadd80aaac51 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/416600 Reviewed-by: Jens Johansen <[email protected]> Commit-Queue: Johnni Winther <[email protected]>
1 parent d1bfa65 commit 4aa7c8b

25 files changed

+509
-607
lines changed

pkg/front_end/lib/src/base/scope.dart

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -901,11 +901,6 @@ mixin ErroneousMemberBuilderMixin implements SourceMemberBuilder {
901901
AugmentSuperTarget? get augmentSuperTarget {
902902
throw new UnsupportedError('$runtimeType.augmentSuperTarget}');
903903
}
904-
905-
@override
906-
Iterable<Annotatable> get annotatables {
907-
throw new UnsupportedError('$runtimeType.annotatables}');
908-
}
909904
}
910905

911906
class AmbiguousMemberBuilder extends AmbiguousBuilder

pkg/front_end/lib/src/builder/member_builder.dart

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,6 @@ abstract class MemberBuilder implements Builder {
122122
/// The builder for the enclosing class, if any.
123123
ClassBuilder? get classBuilder;
124124

125-
/// Returns the [Annotatable] nodes that hold the annotations declared on this
126-
/// member.
127-
Iterable<Annotatable> get annotatables;
128-
129125
/// Returns `true` is this member is a property, i.e. a field, getter or
130126
/// setter.
131127
bool get isProperty;

pkg/front_end/lib/src/dill/dill_member_builder.dart

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
import 'package:kernel/ast.dart'
66
show
7-
Annotatable,
87
Constructor,
98
Field,
109
FunctionNode,
@@ -116,10 +115,6 @@ abstract class DillMemberBuilder extends MemberBuilderImpl {
116115
_localSetters ??= isSetter || member is Field && member.hasSetter
117116
? <ClassMember>[new DillClassMember(this, ClassMemberKind.Setter)]
118117
: const <ClassMember>[];
119-
120-
@override
121-
// Coverage-ignore(suite): Not run.
122-
Iterable<Annotatable> get annotatables => [member];
123118
}
124119

125120
class DillFieldBuilder extends DillMemberBuilder implements PropertyBuilder {

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

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,15 @@ abstract class GetterDeclaration {
6767
required bool isClassInstanceMember,
6868
required bool createFileUriExpression});
6969

70-
void buildOutlineNode(SourceLibraryBuilder libraryBuilder,
71-
NameScheme nameScheme, BuildNodesCallback f, GetterReference references,
72-
{required List<TypeParameter>? classTypeParameters});
70+
void buildOutlineNode(
71+
{required SourceLibraryBuilder libraryBuilder,
72+
required NameScheme nameScheme,
73+
required BuildNodesCallback f,
74+
required GetterReference? references,
75+
required List<TypeParameter>? classTypeParameters});
7376

7477
void checkTypes(SourceLibraryBuilder libraryBuilder,
75-
TypeEnvironment typeEnvironment, SourcePropertyBuilder? setterBuilder,
76-
{required bool isAbstract, required bool isExternal});
78+
TypeEnvironment typeEnvironment, SourcePropertyBuilder? setterBuilder);
7779

7880
void checkVariance(
7981
SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment);
@@ -180,19 +182,25 @@ class GetterDeclarationImpl implements GetterDeclaration {
180182
}
181183

182184
@override
183-
void buildOutlineNode(SourceLibraryBuilder libraryBuilder,
184-
NameScheme nameScheme, BuildNodesCallback f, GetterReference references,
185-
{required List<TypeParameter>? classTypeParameters}) {
186-
_encoding.buildOutlineNode(libraryBuilder, nameScheme, f, references,
185+
void buildOutlineNode(
186+
{required SourceLibraryBuilder libraryBuilder,
187+
required NameScheme nameScheme,
188+
required BuildNodesCallback f,
189+
required GetterReference? references,
190+
required List<TypeParameter>? classTypeParameters}) {
191+
_encoding.buildOutlineNode(
192+
libraryBuilder: libraryBuilder,
193+
nameScheme: nameScheme,
194+
f: f,
195+
references: references,
187196
isAbstractOrExternal:
188197
_fragment.modifiers.isAbstract || _fragment.modifiers.isExternal,
189198
classTypeParameters: classTypeParameters);
190199
}
191200

192201
@override
193202
void checkTypes(SourceLibraryBuilder libraryBuilder,
194-
TypeEnvironment typeEnvironment, SourcePropertyBuilder? setterBuilder,
195-
{required bool isAbstract, required bool isExternal}) {
203+
TypeEnvironment typeEnvironment, SourcePropertyBuilder? setterBuilder) {
196204
_encoding.checkTypes(libraryBuilder, typeEnvironment, setterBuilder,
197205
isAbstract: isAbstract, isExternal: isExternal);
198206
}

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

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,12 @@ sealed class GetterEncoding implements InferredTypeListener {
128128
{required bool isClassInstanceMember,
129129
required bool createFileUriExpression});
130130

131-
void buildOutlineNode(SourceLibraryBuilder libraryBuilder,
132-
NameScheme nameScheme, BuildNodesCallback f, GetterReference references,
133-
{required bool isAbstractOrExternal,
131+
void buildOutlineNode(
132+
{required SourceLibraryBuilder libraryBuilder,
133+
required NameScheme nameScheme,
134+
required BuildNodesCallback f,
135+
required GetterReference? references,
136+
required bool isAbstractOrExternal,
134137
required List<TypeParameter>? classTypeParameters});
135138

136139
void checkTypes(SourceLibraryBuilder libraryBuilder,
@@ -234,10 +237,13 @@ mixin _DirectGetterEncodingMixin implements GetterEncoding {
234237
}
235238

236239
@override
237-
void buildOutlineNode(SourceLibraryBuilder libraryBuilder,
238-
NameScheme nameScheme, BuildNodesCallback f, GetterReference references,
239-
{required bool isAbstractOrExternal,
240-
List<TypeParameter>? classTypeParameters}) {
240+
void buildOutlineNode(
241+
{required SourceLibraryBuilder libraryBuilder,
242+
required NameScheme nameScheme,
243+
required BuildNodesCallback f,
244+
required GetterReference? references,
245+
required bool isAbstractOrExternal,
246+
required List<TypeParameter>? classTypeParameters}) {
241247
FunctionNode function = new FunctionNode(
242248
isAbstractOrExternal ? null : new EmptyStatement(),
243249
asyncMarker: _fragment.asyncModifier)
@@ -262,7 +268,7 @@ mixin _DirectGetterEncodingMixin implements GetterEncoding {
262268
nameScheme.getProcedureMemberName(ProcedureKind.Getter, _fragment.name);
263269
Procedure procedure = _procedure = new Procedure(
264270
memberName.name, ProcedureKind.Getter, function,
265-
reference: references.getterReference, fileUri: _fragment.fileUri)
271+
reference: references?.getterReference, fileUri: _fragment.fileUri)
266272
..fileStartOffset = _fragment.startOffset
267273
..fileOffset = _fragment.nameOffset
268274
..fileEndOffset = _fragment.endOffset
@@ -462,9 +468,12 @@ mixin _ExtensionInstanceGetterEncodingMixin implements GetterEncoding {
462468
}
463469

464470
@override
465-
void buildOutlineNode(SourceLibraryBuilder libraryBuilder,
466-
NameScheme nameScheme, BuildNodesCallback f, GetterReference references,
467-
{required bool isAbstractOrExternal,
471+
void buildOutlineNode(
472+
{required SourceLibraryBuilder libraryBuilder,
473+
required NameScheme nameScheme,
474+
required BuildNodesCallback f,
475+
required GetterReference? references,
476+
required bool isAbstractOrExternal,
468477
required List<TypeParameter>? classTypeParameters}) {
469478
List<TypeParameter>? typeParameters;
470479
if (_clonedDeclarationTypeParameters != null) {
@@ -502,7 +511,7 @@ mixin _ExtensionInstanceGetterEncodingMixin implements GetterEncoding {
502511
nameScheme.getProcedureMemberName(ProcedureKind.Getter, _fragment.name);
503512
Procedure procedure = _procedure = new Procedure(
504513
memberName.name, ProcedureKind.Method, function,
505-
reference: references.getterReference, fileUri: _fragment.fileUri)
514+
reference: references?.getterReference, fileUri: _fragment.fileUri)
506515
..fileStartOffset = _fragment.startOffset
507516
..fileOffset = _fragment.nameOffset
508517
..fileEndOffset = _fragment.endOffset

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

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,15 @@ abstract class SetterDeclaration {
6767
required bool isClassInstanceMember,
6868
required bool createFileUriExpression});
6969

70-
void buildOutlineNode(SourceLibraryBuilder libraryBuilder,
71-
NameScheme nameScheme, BuildNodesCallback f, SetterReference references,
72-
{required List<TypeParameter>? classTypeParameters});
70+
void buildOutlineNode(
71+
{required SourceLibraryBuilder libraryBuilder,
72+
required NameScheme nameScheme,
73+
required BuildNodesCallback f,
74+
required SetterReference? references,
75+
required List<TypeParameter>? classTypeParameters});
7376

7477
void checkTypes(
75-
SourceLibraryBuilder libraryBuilder, TypeEnvironment typeEnvironment,
76-
{required bool isAbstract, required bool isExternal});
78+
SourceLibraryBuilder libraryBuilder, TypeEnvironment typeEnvironment);
7779

7880
void checkVariance(
7981
SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment);
@@ -123,6 +125,7 @@ class SetterDeclarationImpl implements SetterDeclaration {
123125
FunctionNode get function => _encoding.function;
124126

125127
@override
128+
// Coverage-ignore(suite): Not run.
126129
bool get isAbstract => _fragment.modifiers.isAbstract;
127130

128131
@override
@@ -180,21 +183,28 @@ class SetterDeclarationImpl implements SetterDeclaration {
180183
}
181184

182185
@override
183-
void buildOutlineNode(SourceLibraryBuilder libraryBuilder,
184-
NameScheme nameScheme, BuildNodesCallback f, SetterReference references,
185-
{required List<TypeParameter>? classTypeParameters}) {
186-
_encoding.buildOutlineNode(libraryBuilder, nameScheme, f, references,
186+
void buildOutlineNode(
187+
{required SourceLibraryBuilder libraryBuilder,
188+
required NameScheme nameScheme,
189+
required BuildNodesCallback f,
190+
required SetterReference? references,
191+
required List<TypeParameter>? classTypeParameters}) {
192+
_encoding.buildOutlineNode(
193+
libraryBuilder: libraryBuilder,
194+
nameScheme: nameScheme,
195+
f: f,
196+
references: references,
187197
isAbstractOrExternal:
188198
_fragment.modifiers.isAbstract || _fragment.modifiers.isExternal,
189199
classTypeParameters: classTypeParameters);
190200
}
191201

192202
@override
193203
void checkTypes(
194-
SourceLibraryBuilder libraryBuilder, TypeEnvironment typeEnvironment,
195-
{required bool isAbstract, required bool isExternal}) {
204+
SourceLibraryBuilder libraryBuilder, TypeEnvironment typeEnvironment) {
196205
_encoding.checkTypes(libraryBuilder, typeEnvironment,
197-
isAbstract: isAbstract, isExternal: isExternal);
206+
isAbstract: _fragment.modifiers.isAbstract,
207+
isExternal: _fragment.modifiers.isExternal);
198208
}
199209

200210
@override

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

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,12 @@ sealed class SetterEncoding {
146146
{required bool isClassInstanceMember,
147147
required bool createFileUriExpression});
148148

149-
void buildOutlineNode(SourceLibraryBuilder libraryBuilder,
150-
NameScheme nameScheme, BuildNodesCallback f, SetterReference references,
151-
{required bool isAbstractOrExternal,
149+
void buildOutlineNode(
150+
{required SourceLibraryBuilder libraryBuilder,
151+
required NameScheme nameScheme,
152+
required BuildNodesCallback f,
153+
required SetterReference? references,
154+
required bool isAbstractOrExternal,
152155
required List<TypeParameter>? classTypeParameters});
153156

154157
void checkTypes(
@@ -236,10 +239,13 @@ mixin _DirectSetterEncodingMixin implements SetterEncoding {
236239
}
237240

238241
@override
239-
void buildOutlineNode(SourceLibraryBuilder libraryBuilder,
240-
NameScheme nameScheme, BuildNodesCallback f, SetterReference references,
241-
{required bool isAbstractOrExternal,
242-
List<TypeParameter>? classTypeParameters}) {
242+
void buildOutlineNode(
243+
{required SourceLibraryBuilder libraryBuilder,
244+
required NameScheme nameScheme,
245+
required BuildNodesCallback f,
246+
required SetterReference? references,
247+
required bool isAbstractOrExternal,
248+
required List<TypeParameter>? classTypeParameters}) {
243249
FunctionNode function = new FunctionNode(
244250
isAbstractOrExternal ? null : new EmptyStatement(),
245251
asyncMarker: _fragment.asyncModifier)
@@ -275,7 +281,7 @@ mixin _DirectSetterEncodingMixin implements SetterEncoding {
275281
nameScheme.getProcedureMemberName(ProcedureKind.Setter, _fragment.name);
276282
Procedure procedure = _procedure = new Procedure(
277283
memberName.name, ProcedureKind.Setter, function,
278-
reference: references.setterReference, fileUri: _fragment.fileUri)
284+
reference: references?.setterReference, fileUri: _fragment.fileUri)
279285
..fileStartOffset = _fragment.startOffset
280286
..fileOffset = _fragment.nameOffset
281287
..fileEndOffset = _fragment.endOffset
@@ -470,9 +476,12 @@ mixin _ExtensionInstanceSetterEncodingMixin implements SetterEncoding {
470476
}
471477

472478
@override
473-
void buildOutlineNode(SourceLibraryBuilder libraryBuilder,
474-
NameScheme nameScheme, BuildNodesCallback f, SetterReference references,
475-
{required bool isAbstractOrExternal,
479+
void buildOutlineNode(
480+
{required SourceLibraryBuilder libraryBuilder,
481+
required NameScheme nameScheme,
482+
required BuildNodesCallback f,
483+
required SetterReference? references,
484+
required bool isAbstractOrExternal,
476485
required List<TypeParameter>? classTypeParameters}) {
477486
List<TypeParameter>? typeParameters;
478487
if (_clonedDeclarationTypeParameters != null) {
@@ -527,7 +536,7 @@ mixin _ExtensionInstanceSetterEncodingMixin implements SetterEncoding {
527536
nameScheme.getProcedureMemberName(ProcedureKind.Setter, _fragment.name);
528537
Procedure procedure = _procedure = new Procedure(
529538
memberName.name, ProcedureKind.Method, function,
530-
reference: references.setterReference, fileUri: _fragment.fileUri)
539+
reference: references?.setterReference, fileUri: _fragment.fileUri)
531540
..fileStartOffset = _fragment.startOffset
532541
..fileOffset = _fragment.nameOffset
533542
..fileEndOffset = _fragment.endOffset

pkg/front_end/lib/src/kernel/kernel_helper.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,7 @@ void adjustAnnotationFileUri(Annotatable annotatable, Uri annotatableFileUri) {
313313
}
314314
}
315315

316+
// Coverage-ignore(suite): Not run.
316317
/// Copies properties, function parameters and body from the [augmentation]
317318
/// procedure to its [origin].
318319
void finishProcedureAugmentation(Procedure origin, Procedure augmentation) {

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,13 @@ class SourceConstructorBuilderImpl extends SourceMemberBuilderImpl
138138
}) : _introductory = introductory,
139139
_augmentations = augmentations,
140140
_memberName = nameScheme.getDeclaredName(name) {
141-
_augmentedDeclarations = [_introductory, ..._augmentations];
142-
_lastDeclaration = _augmentedDeclarations.removeLast();
141+
if (augmentations.isEmpty) {
142+
_augmentedDeclarations = augmentations;
143+
_lastDeclaration = introductory;
144+
} else {
145+
_augmentedDeclarations = [_introductory, ..._augmentations];
146+
_lastDeclaration = _augmentedDeclarations.removeLast();
147+
}
143148
for (ConstructorDeclaration declaration in _augmentedDeclarations) {
144149
declaration.createNode(
145150
name: name,
@@ -248,7 +253,6 @@ class SourceConstructorBuilderImpl extends SourceMemberBuilderImpl
248253
Iterable<Reference> get exportedMemberReferences => [invokeTargetReference];
249254

250255
// TODO(johnniwinther): Add annotations to tear-offs.
251-
@override
252256
Iterable<Annotatable> get annotatables => [invokeTarget];
253257

254258
@override
@@ -767,10 +771,6 @@ class SyntheticSourceConstructorBuilder extends MemberBuilderImpl
767771
List<ClassMember> get localSetters =>
768772
throw new UnsupportedError('${runtimeType}.localSetters');
769773

770-
@override
771-
// Coverage-ignore(suite): Not run.
772-
Iterable<Annotatable> get annotatables => [_constructor];
773-
774774
@override
775775
FunctionNode get function => _constructor.function;
776776

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,13 @@ class SourceFactoryBuilder extends SourceMemberBuilderImpl
9292
: _memberName = nameScheme.getDeclaredName(name),
9393
_introductory = introductory,
9494
_augmentations = augmentations {
95-
_augmentedDeclarations = [introductory, ...augmentations];
96-
_lastDeclaration = _augmentedDeclarations.removeLast();
95+
if (augmentations.isEmpty) {
96+
_augmentedDeclarations = augmentations;
97+
_lastDeclaration = introductory;
98+
} else {
99+
_augmentedDeclarations = [introductory, ...augmentations];
100+
_lastDeclaration = _augmentedDeclarations.removeLast();
101+
}
97102

98103
for (FactoryDeclaration augmentedDeclaration in _augmentedDeclarations) {
99104
augmentedDeclaration.createNode(
@@ -321,7 +326,6 @@ class SourceFactoryBuilder extends SourceMemberBuilderImpl
321326
}
322327

323328
// TODO(johnniwinther): Add annotations to tear-offs.
324-
@override
325329
Iterable<Annotatable> get annotatables => [_procedure];
326330

327331
@override

0 commit comments

Comments
 (0)