[cfe] Add DillProcedureBuilder implementing ProcedureBuilder
This adds a DillProcedureBuilder superclass to DillMethodBuilder,
DillOperatorBuilder, DillGetterBuilder, DillSetterBuilder and
DillFactoryBuilder by which they implement a cleaned up
ProcedureBuilder.
Includes cleanup made possible by this change and by the previous
change to make DillConstructorBuilder implement ConstructorBuilder.
Change-Id: Ieb835dc2788065a06b7f3eda1ccc34ccd1788c28
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/226081
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
diff --git a/pkg/front_end/lib/src/fasta/builder/class_builder.dart b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
index 47a66ca..d545175 100644
--- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
@@ -31,7 +31,6 @@
import 'package:kernel/type_environment.dart'
show SubtypeCheckMode, TypeEnvironment;
-import '../dill/dill_member_builder.dart';
import '../fasta_codes.dart';
import '../kernel/kernel_helper.dart';
import '../kernel/redirecting_factory_body.dart' show RedirectingFactoryBody;
@@ -877,28 +876,6 @@
if (targetBuilder == null) return null;
if (targetBuilder is FunctionBuilder) {
targetNode = targetBuilder.function;
- } else if (targetBuilder is DillConstructorBuilder) {
- // It seems that the [redirectionTarget.target] is an instance of
- // [DillMemberBuilder] whenever the redirectee is an implicit constructor,
- // e.g.
- //
- // class A {
- // factory A() = B;
- // }
- // class B implements A {}
- //
- targetNode = targetBuilder.constructor.function;
- } else if (targetBuilder is DillFactoryBuilder) {
- // It seems that the [redirectionTarget.target] is an instance of
- // [DillMemberBuilder] whenever the redirectee is an implicit constructor,
- // e.g.
- //
- // class A {
- // factory A() = B;
- // }
- // class B implements A {}
- //
- targetNode = targetBuilder.procedure.function;
} else if (targetBuilder is AmbiguousBuilder) {
// Multiple definitions with the same name: An error has already been
// issued.
diff --git a/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart b/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
index 71ca0c2..85e54ac 100644
--- a/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
@@ -7,26 +7,8 @@
import 'function_builder.dart';
abstract class ProcedureBuilder implements FunctionBuilder {
- int get charOpenParenOffset;
-
- ProcedureBuilder? get patchForTesting;
-
- AsyncMarker get actualAsyncModifier;
-
Procedure get procedure;
@override
ProcedureKind get kind;
-
- Procedure get actualProcedure;
-
- @override
- ProcedureBuilder get origin;
-
- void set asyncModifier(AsyncMarker newModifier);
-
- bool get isEligibleForTopLevelInference;
-
- /// Returns `true` if this procedure is declared in an extension declaration.
- bool get isExtensionMethod;
}
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
index 42d99a3..f3046a7 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
@@ -11,6 +11,7 @@
import '../builder/constructor_builder.dart';
import '../builder/member_builder.dart';
+import '../builder/procedure_builder.dart';
import '../kernel/hierarchy/class_member.dart' show ClassMember;
import '../kernel/hierarchy/members_builder.dart' show ClassMembersBuilder;
import '../kernel/member_covariance.dart';
@@ -64,12 +65,6 @@
@override
bool get isFactory => identical(ProcedureKind.Factory, kind);
- /*@override
- bool get isRedirectingGenerativeConstructor {
- return isConstructor &&
- isRedirectingGenerativeConstructorImplementation(member as Constructor);
- }*/
-
@override
bool get isSynthetic {
final Member member = this.member;
@@ -79,12 +74,6 @@
@override
bool get isAssignable => false;
- /*@override
- void buildMembers(
- LibraryBuilder library, void Function(Member, BuiltMemberKind) f) {
- throw new UnsupportedError('DillMemberBuilder.buildMembers');
- }*/
-
List<ClassMember>? _localMembers;
List<ClassMember>? _localSetters;
@@ -124,10 +113,23 @@
bool get isAssignable => field.hasSetter;
}
-class DillGetterBuilder extends DillMemberBuilder {
+abstract class DillProcedureBuilder extends DillMemberBuilder
+ implements ProcedureBuilder {
+ @override
final Procedure procedure;
- DillGetterBuilder(this.procedure, Builder parent)
+ DillProcedureBuilder(this.procedure, Builder parent)
+ : super(procedure, parent);
+
+ @override
+ ProcedureKind get kind => procedure.kind;
+
+ @override
+ FunctionNode get function => procedure.function;
+}
+
+class DillGetterBuilder extends DillProcedureBuilder {
+ DillGetterBuilder(Procedure procedure, Builder parent)
: assert(procedure.kind == ProcedureKind.Getter),
super(procedure, parent);
@@ -144,10 +146,8 @@
Member get invokeTarget => procedure;
}
-class DillSetterBuilder extends DillMemberBuilder {
- final Procedure procedure;
-
- DillSetterBuilder(this.procedure, Builder parent)
+class DillSetterBuilder extends DillProcedureBuilder {
+ DillSetterBuilder(Procedure procedure, Builder parent)
: assert(procedure.kind == ProcedureKind.Setter),
super(procedure, parent);
@@ -164,10 +164,8 @@
Member? get invokeTarget => null;
}
-class DillMethodBuilder extends DillMemberBuilder {
- final Procedure procedure;
-
- DillMethodBuilder(this.procedure, Builder parent)
+class DillMethodBuilder extends DillProcedureBuilder {
+ DillMethodBuilder(Procedure procedure, Builder parent)
: assert(procedure.kind == ProcedureKind.Method),
super(procedure, parent);
@@ -184,10 +182,8 @@
Member get invokeTarget => procedure;
}
-class DillOperatorBuilder extends DillMemberBuilder {
- final Procedure procedure;
-
- DillOperatorBuilder(this.procedure, Builder parent)
+class DillOperatorBuilder extends DillProcedureBuilder {
+ DillOperatorBuilder(Procedure procedure, Builder parent)
: assert(procedure.kind == ProcedureKind.Operator),
super(procedure, parent);
@@ -204,11 +200,10 @@
Member get invokeTarget => procedure;
}
-class DillFactoryBuilder extends DillMemberBuilder {
- final Procedure procedure;
+class DillFactoryBuilder extends DillProcedureBuilder {
final Procedure? _factoryTearOff;
- DillFactoryBuilder(this.procedure, this._factoryTearOff, Builder parent)
+ DillFactoryBuilder(Procedure procedure, this._factoryTearOff, Builder parent)
: super(procedure, parent);
@override
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
index 7b98124..f2a6f7f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -40,7 +40,6 @@
import '../builder/void_type_declaration_builder.dart';
import '../compiler_context.dart' show CompilerContext;
import '../crash.dart' show withCrashReporting;
-import '../dill/dill_member_builder.dart' show DillMemberBuilder;
import '../dill/dill_target.dart' show DillTarget;
import '../kernel/constructor_tearoff_lowering.dart';
import '../loader.dart' show Loader;
@@ -517,11 +516,7 @@
declaration = problem.getFirstDeclaration();
}
if (declaration is ProcedureBuilder) {
- mainReference = declaration.actualProcedure.reference;
- } else if (declaration is DillMemberBuilder) {
- if (declaration.member is Procedure) {
- mainReference = declaration.member.reference;
- }
+ mainReference = declaration.procedure.reference;
}
}
component.setMainMethodAndMode(mainReference, true, compiledMode);
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index 51311fb..c9eacac 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -569,7 +569,7 @@
} else {
assert(
// This is a synthesized constructor.
- builder is DillConstructorBuilder,
+ builder is SyntheticSourceConstructorBuilder,
"Unexpected constructor: $builder.");
}
}, includeInjectedConstructors: true);
diff --git a/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart b/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
index 36e33bc..d6c3ae4 100644
--- a/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
@@ -245,8 +245,7 @@
_hasFormalsInferred = true;
}
- /* ConstructorBuilder | DillConstructorBuilder */
- Object? _computeSuperTargetBuilder() {
+ ConstructorBuilder? _computeSuperTargetBuilder() {
Constructor superTarget;
ClassBuilder superclassBuilder;
@@ -280,8 +279,6 @@
.lookup("", charOffset, library.fileUri);
if (memberBuilder is ConstructorBuilder) {
superTarget = memberBuilder.constructor;
- } else if (memberBuilder is DillConstructorBuilder) {
- superTarget = memberBuilder.constructor;
} else {
// The error in this case should be reported elsewhere.
return null;
@@ -291,10 +288,7 @@
MemberBuilder? constructorBuilder =
superclassBuilder.findConstructorOrFactory(
superTarget.name.text, charOffset, library.fileUri, library);
- return constructorBuilder is ConstructorBuilder ||
- constructorBuilder is DillConstructorBuilder
- ? constructorBuilder
- : null;
+ return constructorBuilder is ConstructorBuilder ? constructorBuilder : null;
}
void finalizeSuperInitializingFormals(ClassHierarchy classHierarchy,
@@ -310,7 +304,7 @@
}
}
- Object? superTargetBuilder = _computeSuperTargetBuilder();
+ ConstructorBuilder? superTargetBuilder = _computeSuperTargetBuilder();
Constructor superTarget;
List<FormalParameterBuilder>? superFormals;
if (superTargetBuilder is DeclaredSourceConstructorBuilder) {
@@ -459,7 +453,7 @@
void addSuperParameterDefaultValueCloners(
List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
- Object? superTargetBuilder = _computeSuperTargetBuilder();
+ ConstructorBuilder? superTargetBuilder = _computeSuperTargetBuilder();
if (superTargetBuilder is DeclaredSourceConstructorBuilder) {
superTargetBuilder
.addSuperParameterDefaultValueCloners(synthesizedFunctionNodes);
diff --git a/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart b/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart
index 861506f..44af31f 100644
--- a/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart
@@ -24,10 +24,8 @@
class SourceProcedureBuilder extends SourceFunctionBuilderImpl
implements ProcedureBuilder {
- @override
final int charOpenParenOffset;
- @override
AsyncMarker actualAsyncModifier = AsyncMarker.Sync;
@override
@@ -106,7 +104,6 @@
}
}
- @override
ProcedureBuilder? get patchForTesting =>
dataForTesting?.patchForTesting as ProcedureBuilder?;
@@ -121,14 +118,12 @@
return bodyInternal;
}
- @override
void set asyncModifier(AsyncMarker newModifier) {
actualAsyncModifier = newModifier;
function.asyncMarker = actualAsyncModifier;
function.dartAsyncMarker = actualAsyncModifier;
}
- @override
bool get isEligibleForTopLevelInference {
if (isDeclarationInstanceMember) {
if (returnType == null) return true;
@@ -141,7 +136,6 @@
return false;
}
- @override
bool get isExtensionMethod {
return parent is ExtensionBuilder;
}
@@ -155,7 +149,6 @@
@override
Procedure get procedure => isPatch ? origin.procedure : _procedure;
- @override
Procedure get actualProcedure => _procedure;
@override