Skip to content

Commit fdad92c

Browse files
johnniwintherCommit Queue
authored andcommitted
[cfe] Cleanup SourceFactoryBuilder
This removes unnecessary code from SourceFactoryBuilder previous inherited from SourceFunctionBuilderImpl. Redirecting factory specific is moved fully inside SourceFactoryBuilder and most method are made private. This is in preparation for creating factory builders using fragments. Change-Id: I273b3c360fb51a7c1533f14d267c7f6aae949d19 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/406001 Reviewed-by: Chloe Stefantsova <[email protected]> Commit-Queue: Johnni Winther <[email protected]>
1 parent 9b33264 commit fdad92c

File tree

7 files changed

+197
-353
lines changed

7 files changed

+197
-353
lines changed

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

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -756,11 +756,6 @@ mixin _FunctionBodyBuilderContextMixin<T extends SourceFunctionBuilder>
756756
@override
757757
TypeBuilder get returnType => _member.returnType;
758758

759-
@override
760-
void setBody(Statement body) {
761-
_member.body = body;
762-
}
763-
764759
@override
765760
List<FormalParameterBuilder>? get formals => _member.formals;
766761

@@ -877,6 +872,11 @@ class ConstructorBodyBuilderContext extends BodyBuilderContext
877872
: super(_member.libraryBuilder, _member.declarationBuilder,
878873
isDeclarationInstanceMember: _member.isDeclarationInstanceMember);
879874

875+
@override
876+
void setBody(Statement body) {
877+
_member.body = body;
878+
}
879+
880880
@override
881881
bool isConstructorCyclic(String name) {
882882
return _declarationContext.isConstructorCyclic(_member.name, name);
@@ -907,6 +907,11 @@ class ExtensionTypeConstructorBodyBuilderContext extends BodyBuilderContext
907907
: super(_member.libraryBuilder, _member.declarationBuilder,
908908
isDeclarationInstanceMember: _member.isDeclarationInstanceMember);
909909

910+
@override
911+
void setBody(Statement body) {
912+
_member.body = body;
913+
}
914+
910915
@override
911916
bool isConstructorCyclic(String name) {
912917
return _declarationContext.isConstructorCyclic(_member.name, name);
@@ -930,6 +935,11 @@ class FactoryBodyBuilderContext extends BodyBuilderContext
930935
: super(_member.libraryBuilder, _member.declarationBuilder,
931936
isDeclarationInstanceMember: _member.isDeclarationInstanceMember);
932937

938+
@override
939+
void setBody(Statement body) {
940+
_member.setBody(body);
941+
}
942+
933943
@override
934944
void setAsyncModifier(AsyncMarker asyncModifier) {
935945
_member.asyncModifier = asyncModifier;
@@ -955,6 +965,12 @@ class RedirectingFactoryBodyBuilderContext extends BodyBuilderContext
955965
: super(_member.libraryBuilder, _member.declarationBuilder,
956966
isDeclarationInstanceMember: _member.isDeclarationInstanceMember);
957967

968+
@override
969+
// Coverage-ignore(suite): Not run.
970+
void setBody(Statement body) {
971+
_member.setBody(body);
972+
}
973+
958974
@override
959975
bool get isRedirectingFactory => true;
960976

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

Lines changed: 2 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,12 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5-
import 'package:kernel/ast.dart';
6-
75
import '../base/problems.dart';
8-
import '../base/scope.dart';
96
import '../builder/builder.dart';
107
import '../builder/constructor_reference_builder.dart';
118
import '../builder/declaration_builders.dart';
12-
import '../builder/function_builder.dart';
139
import '../builder/member_builder.dart';
1410
import '../builder/name_iterator.dart';
15-
import '../builder/type_builder.dart';
16-
import '../codes/cfe_codes.dart';
17-
import '../dill/dill_member_builder.dart';
18-
import '../type_inference/type_schema.dart';
1911
import 'source_factory_builder.dart';
2012
import 'source_library_builder.dart';
2113

@@ -106,112 +98,8 @@ mixin ClassDeclarationMixin implements ClassDeclaration {
10698
unexpected("$fileUri", "${declaration.declarationBuilder!.fileUri}",
10799
fileOffset, fileUri);
108100
}
109-
if (declaration is SourceFactoryBuilder &&
110-
declaration.redirectionTarget != null) {
111-
// Compute the immediate redirection target, not the effective.
112-
113-
ConstructorReferenceBuilder redirectionTarget =
114-
declaration.redirectionTarget!;
115-
List<TypeBuilder>? typeArguments = redirectionTarget.typeArguments;
116-
Builder? target = redirectionTarget.target;
117-
if (typeArguments != null && target is MemberBuilder) {
118-
TypeName redirectionTargetName = redirectionTarget.typeName;
119-
if (redirectionTargetName.qualifier == null) {
120-
// Do nothing. This is the case of an identifier followed by
121-
// type arguments, such as the following:
122-
// B<T>
123-
// B<T>.named
124-
} else {
125-
if (target.name.isEmpty) {
126-
// Do nothing. This is the case of a qualified
127-
// non-constructor prefix (for example, with a library
128-
// qualifier) followed by type arguments, such as the
129-
// following:
130-
// lib.B<T>
131-
} else if (target.name != redirectionTargetName.name) {
132-
// Do nothing. This is the case of a qualified
133-
// non-constructor prefix followed by type arguments followed
134-
// by a constructor name, such as the following:
135-
// lib.B<T>.named
136-
} else {
137-
// TODO(cstefantsova,johnniwinther): Handle this in case in
138-
// ConstructorReferenceBuilder.resolveIn and unify with other
139-
// cases of handling of type arguments after constructor
140-
// names.
141-
addProblem(
142-
messageConstructorWithTypeArguments,
143-
redirectionTargetName.nameOffset,
144-
redirectionTargetName.nameLength);
145-
}
146-
}
147-
}
148-
149-
Builder? targetBuilder = redirectionTarget.target;
150-
Member? targetNode;
151-
if (targetBuilder is FunctionBuilder) {
152-
targetNode = targetBuilder.invokeTarget!;
153-
} else if (targetBuilder is DillMemberBuilder) {
154-
targetNode = targetBuilder.invokeTarget!;
155-
} else if (targetBuilder is AmbiguousBuilder) {
156-
libraryBuilder.addProblemForRedirectingFactory(
157-
declaration,
158-
templateDuplicatedDeclarationUse
159-
.withArguments(redirectionTarget.fullNameForErrors),
160-
redirectionTarget.charOffset,
161-
noLength,
162-
redirectionTarget.fileUri);
163-
} else {
164-
libraryBuilder.addProblemForRedirectingFactory(
165-
declaration,
166-
templateRedirectionTargetNotFound
167-
.withArguments(redirectionTarget.fullNameForErrors),
168-
redirectionTarget.charOffset,
169-
noLength,
170-
redirectionTarget.fileUri);
171-
}
172-
if (targetNode != null &&
173-
targetNode is Constructor &&
174-
targetNode.enclosingClass.isAbstract) {
175-
libraryBuilder.addProblemForRedirectingFactory(
176-
declaration,
177-
templateAbstractRedirectedClassInstantiation
178-
.withArguments(redirectionTarget.fullNameForErrors),
179-
redirectionTarget.charOffset,
180-
noLength,
181-
redirectionTarget.fileUri);
182-
targetNode = null;
183-
}
184-
if (targetNode != null &&
185-
targetNode is Constructor &&
186-
targetNode.enclosingClass.isEnum) {
187-
libraryBuilder.addProblemForRedirectingFactory(
188-
declaration,
189-
messageEnumFactoryRedirectsToConstructor,
190-
redirectionTarget.charOffset,
191-
noLength,
192-
redirectionTarget.fileUri);
193-
targetNode = null;
194-
}
195-
if (targetNode != null) {
196-
List<DartType>? typeArguments =
197-
declaration.redirectionTypeArguments;
198-
if (typeArguments == null) {
199-
int typeArgumentCount;
200-
if (targetBuilder!.isExtensionTypeMember) {
201-
ExtensionTypeDeclarationBuilder
202-
extensionTypeDeclarationBuilder =
203-
targetBuilder.parent as ExtensionTypeDeclarationBuilder;
204-
typeArgumentCount =
205-
extensionTypeDeclarationBuilder.typeParametersCount;
206-
} else {
207-
typeArgumentCount =
208-
targetNode.enclosingClass!.typeParameters.length;
209-
}
210-
typeArguments = new List<DartType>.filled(
211-
typeArgumentCount, const UnknownType());
212-
}
213-
declaration.setRedirectingFactoryBody(targetNode, typeArguments);
214-
}
101+
if (declaration is SourceFactoryBuilder) {
102+
declaration.resolveRedirectingFactory(this);
215103
}
216104
}
217105
}

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,6 @@ abstract class AbstractSourceConstructorBuilder extends SourceMemberBuilderImpl
259259

260260
Statement? bodyInternal;
261261

262-
@override
263262
void set body(Statement? newBody) {
264263
// if (newBody != null) {
265264
// if (isAbstract) {
@@ -457,7 +456,6 @@ abstract class AbstractSourceConstructorBuilder extends SourceMemberBuilderImpl
457456
@override
458457
bool get isConstructor => true;
459458

460-
@override
461459
Statement? get body {
462460
if (bodyInternal == null && !isExternal) {
463461
bodyInternal = new EmptyStatement();

0 commit comments

Comments
 (0)