Skip to content

Commit 4884112

Browse files
johnniwintherCommit Queue
authored andcommitted
[cfe] Handle patch factories through fragments
Change-Id: I11a5b2e113d854ae159a823359ddbdd8e796f6db Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/415281 Commit-Queue: Johnni Winther <[email protected]> Reviewed-by: Jens Johansen <[email protected]>
1 parent 1076606 commit 4884112

File tree

47 files changed

+541
-618
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+541
-618
lines changed

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,6 @@ abstract class BuilderImpl implements Builder {
277277
bool get isConst => false;
278278

279279
@override
280-
// Coverage-ignore(suite): Not run.
281280
bool get isConstructor => false;
282281

283282
@override
@@ -324,7 +323,7 @@ abstract class BuilderImpl implements Builder {
324323
bool get isLocal => false;
325324

326325
@override
327-
bool get isAugmenting => this != origin;
326+
bool get isAugmenting => false;
328327

329328
@override
330329
bool get isAugment => false;

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

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ class FactoryFragment implements Fragment, FunctionFragment {
3030

3131
SourceFactoryBuilder? _builder;
3232

33+
FactoryDeclaration? _declaration;
34+
3335
FactoryFragment({
3436
required this.constructorName,
3537
required this.fileUri,
@@ -65,6 +67,18 @@ class FactoryFragment implements Fragment, FunctionFragment {
6567
_builder = value;
6668
}
6769

70+
FactoryDeclaration get declaration {
71+
assert(
72+
_declaration != null, "Declaration has not been computed for $this.");
73+
return _declaration!;
74+
}
75+
76+
void set declaration(FactoryDeclaration value) {
77+
assert(_declaration == null,
78+
"Declaration has already been computed for $this.");
79+
_declaration = value;
80+
}
81+
6882
@override
6983
FunctionBodyBuildingContext createFunctionBodyBuildingContext() {
7084
return new _FactoryBodyBuildingContext(this);
@@ -108,7 +122,7 @@ class _FactoryBodyBuildingContext implements FunctionBodyBuildingContext {
108122

109123
@override
110124
BodyBuilderContext createBodyBuilderContext() {
111-
return _fragment.builder.createBodyBuilderContext();
125+
return _fragment.declaration.createBodyBuilderContext(_fragment.builder);
112126
}
113127

114128
@override
@@ -119,9 +133,8 @@ class _FactoryBodyBuildingContext implements FunctionBodyBuildingContext {
119133
?.inferenceData;
120134

121135
@override
122-
List<TypeParameter>? get thisTypeParameters =>
123-
_fragment.builder.thisTypeParameters;
136+
List<TypeParameter>? get thisTypeParameters => null;
124137

125138
@override
126-
VariableDeclaration? get thisVariable => _fragment.builder.thisVariable;
139+
VariableDeclaration? get thisVariable => null;
127140
}

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@ import 'package:kernel/ast.dart';
66

77
import '../kernel/expression_generator_helper.dart';
88
import '../type_inference/inference_results.dart';
9-
import 'source_function_builder.dart';
9+
import 'source_member_builder.dart';
1010
import 'source_property_builder.dart';
1111

1212
/// Common interface for builders for generative constructor declarations in
1313
/// source code, such as a generative constructor in a regular class or a
1414
/// generative constructor in an extension type declaration.
15-
abstract class ConstructorDeclarationBuilder implements SourceFunctionBuilder {
15+
abstract class ConstructorDeclarationBuilder implements SourceMemberBuilder {
16+
FunctionNode get function;
17+
1618
/// Returns `true` if this constructor, including its augmentations, is
1719
/// external.
1820
///

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -908,8 +908,7 @@ class SourceClassBuilder extends ClassBuilderImpl
908908
// Report an error if a mixin class has a constructor with parameters,
909909
// is external, or is a redirecting constructor.
910910
if (constructor.isRedirecting ||
911-
(constructor.formals != null &&
912-
constructor.formals!.isNotEmpty) ||
911+
constructor.hasParameters ||
913912
constructor.isExternal) {
914913
addProblem(
915914
templateIllegalMixinDueToConstructors

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

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ import '../type_inference/type_inference_engine.dart';
3939
import 'constructor_declaration.dart';
4040
import 'name_scheme.dart';
4141
import 'source_class_builder.dart';
42-
import 'source_function_builder.dart';
4342
import 'source_library_builder.dart' show SourceLibraryBuilder;
4443
import 'source_loader.dart' show SourceLoader;
4544
import 'source_member_builder.dart';
@@ -76,7 +75,7 @@ abstract class SourceConstructorBuilder implements ConstructorBuilder {
7675
class SourceConstructorBuilderImpl extends SourceMemberBuilderImpl
7776
implements
7877
SourceConstructorBuilder,
79-
SourceFunctionBuilder,
78+
SourceMemberBuilder,
8079
Inferable,
8180
ConstructorDeclarationBuilder {
8281
final Modifiers modifiers;
@@ -169,13 +168,14 @@ class SourceConstructorBuilderImpl extends SourceMemberBuilderImpl
169168
@override
170169
Builder get parent => declarationBuilder;
171170

172-
@override
171+
bool get hasParameters => _introductory.formals != null;
172+
173173
// Coverage-ignore(suite): Not run.
174-
List<NominalParameterBuilder>? get typeParameters =>
174+
List<NominalParameterBuilder>? get typeParametersForTesting =>
175175
_introductory.typeParameters;
176176

177-
@override
178-
List<FormalParameterBuilder>? get formals => _introductory.formals;
177+
// Coverage-ignore(suite): Not run.
178+
List<FormalParameterBuilder>? get formalsForTesting => _introductory.formals;
179179

180180
@override
181181
// Coverage-ignore(suite): Not run.
@@ -210,20 +210,12 @@ class SourceConstructorBuilderImpl extends SourceMemberBuilderImpl
210210
Name get memberName => _memberName.name;
211211

212212
@override
213+
// Coverage-ignore(suite): Not run.
213214
SourceConstructorBuilderImpl get origin => this;
214215

215216
@override
216217
bool get isRedirecting => _lastDeclaration.isRedirecting;
217218

218-
@override
219-
// Coverage-ignore(suite): Not run.
220-
VariableDeclaration? get thisVariable => _introductory.thisVariable;
221-
222-
@override
223-
// Coverage-ignore(suite): Not run.
224-
List<TypeParameter>? get thisTypeParameters =>
225-
_introductory.thisTypeParameters;
226-
227219
@override
228220
Member get readTarget => _readTarget;
229221

@@ -262,7 +254,6 @@ class SourceConstructorBuilderImpl extends SourceMemberBuilderImpl
262254
@override
263255
FunctionNode get function => _lastDeclaration.function;
264256

265-
@override
266257
void becomeNative(SourceLoader loader) {
267258
_introductory.becomeNative();
268259
for (ConstructorDeclaration augmentation in _augmentations) {
@@ -284,7 +275,6 @@ class SourceConstructorBuilderImpl extends SourceMemberBuilderImpl
284275

285276
final String? nativeMethodName;
286277

287-
@override
288278
// Coverage-ignore(suite): Not run.
289279
bool get isNative => nativeMethodName != null;
290280

0 commit comments

Comments
 (0)