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 e3f96b9..7069199 100644
--- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
@@ -355,7 +355,7 @@
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
     void build(String ignore, Builder declaration) {
-      MemberBuilder member = declaration as MemberBuilder;
+      SourceMemberBuilder member = declaration as SourceMemberBuilder;
       member.buildOutlineExpressions(library, coreTypes,
           delayedActionPerformers, synthesizedFunctionNodes);
     }
diff --git a/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart b/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart
index 5426ed8..c91f09f 100644
--- a/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart
@@ -458,13 +458,14 @@
   }
 }
 
-class SyntheticConstructorBuilder extends DillConstructorBuilder {
-  MemberBuilderImpl? _origin;
+class SyntheticConstructorBuilder extends DillConstructorBuilder
+    with SourceMemberBuilderMixin {
+  SourceMemberBuilder? _origin;
   SynthesizedFunctionNode? _synthesizedFunctionNode;
 
   SyntheticConstructorBuilder(SourceClassBuilder parent,
       Constructor constructor, Procedure? constructorTearOff,
-      {MemberBuilderImpl? origin,
+      {SourceMemberBuilder? origin,
       SynthesizedFunctionNode? synthesizedFunctionNode})
       : _origin = origin,
         _synthesizedFunctionNode = synthesizedFunctionNode,
diff --git a/pkg/front_end/lib/src/fasta/builder/field_builder.dart b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
index 8acdc68..8a69632 100644
--- a/pkg/front_end/lib/src/fasta/builder/field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
@@ -82,7 +82,8 @@
   DartType get fieldType;
 }
 
-class SourceFieldBuilder extends MemberBuilderImpl implements FieldBuilder {
+class SourceFieldBuilder extends SourceMemberBuilderImpl
+    implements FieldBuilder {
   @override
   final String name;
 
diff --git a/pkg/front_end/lib/src/fasta/builder/function_builder.dart b/pkg/front_end/lib/src/fasta/builder/function_builder.dart
index 40c21f0..9fda3a8 100644
--- a/pkg/front_end/lib/src/fasta/builder/function_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/function_builder.dart
@@ -137,7 +137,7 @@
 }
 
 /// Common base class for constructor and procedure builders.
-abstract class FunctionBuilderImpl extends MemberBuilderImpl
+abstract class FunctionBuilderImpl extends SourceMemberBuilderImpl
     implements SourceFunctionBuilder {
   @override
   final List<MetadataBuilder>? metadata;
diff --git a/pkg/front_end/lib/src/fasta/builder/member_builder.dart b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
index 9108f06..d3e08e6 100644
--- a/pkg/front_end/lib/src/fasta/builder/member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
@@ -77,12 +77,6 @@
   /// setter of a field.
   bool get isConflictingSetter;
 
-  void buildOutlineExpressions(
-      SourceLibraryBuilder library,
-      CoreTypes coreTypes,
-      List<DelayedActionPerformer> delayedActionPerformers,
-      List<SynthesizedFunctionNode> synthesizedFunctionNodes);
-
   /// Returns the [ClassMember]s for the non-setter members created for this
   /// member builder.
   ///
@@ -98,10 +92,11 @@
   List<ClassMember> get localSetters;
 }
 
-abstract class SourceMemberBuilder implements MemberBuilder {}
-
 abstract class MemberBuilderImpl extends ModifierBuilderImpl
-    implements SourceMemberBuilder {
+    implements MemberBuilder {
+  @override
+  String get name;
+
   /// For top-level members, the parent is set correctly during
   /// construction. However, for class members, the parent is initially the
   /// library and updated later.
@@ -109,19 +104,30 @@
   Builder? parent;
 
   @override
-  String get name;
-
-  @override
   final Uri fileUri;
 
-  MemberDataForTesting? dataForTesting;
-
   MemberBuilderImpl(this.parent, int charOffset, [Uri? fileUri])
-      : dataForTesting =
-            retainDataForTesting ? new MemberDataForTesting() : null,
-        this.fileUri = (fileUri ?? parent?.fileUri)!,
+      : this.fileUri = (fileUri ?? parent?.fileUri)!,
         super(parent, charOffset);
 
+  /// The builder for the enclosing class, if any.
+  ClassBuilder? get classBuilder =>
+      parent is ClassBuilder ? parent as ClassBuilder : null;
+
+  @override
+  LibraryBuilder get library {
+    if (parent is LibraryBuilder) {
+      LibraryBuilder library = parent as LibraryBuilder;
+      return library.partOfLibrary ?? library;
+    } else if (parent is ExtensionBuilder) {
+      ExtensionBuilder extension = parent as ExtensionBuilder;
+      return extension.library;
+    } else {
+      ClassBuilder cls = parent as ClassBuilder;
+      return cls.library;
+    }
+  }
+
   @override
   bool get isDeclarationInstanceMember => isDeclarationMember && !isStatic;
 
@@ -146,14 +152,57 @@
   @override
   bool get isNative => false;
 
-  bool get isRedirectingGenerativeConstructor => false;
-
   @override
   bool get isExternal => (modifiers & externalMask) != 0;
 
   @override
   bool get isAbstract => (modifiers & abstractMask) != 0;
 
+  @override
+  bool get isConflictingSetter => false;
+
+  @override
+  String get fullNameForErrors => name;
+}
+
+abstract class SourceMemberBuilder implements MemberBuilder {
+  MemberDataForTesting? get dataForTesting;
+
+  /// Builds the core AST structures for this member as needed for the outline.
+  void buildMembers(
+      SourceLibraryBuilder library, void Function(Member, BuiltMemberKind) f);
+
+  void buildOutlineExpressions(
+      SourceLibraryBuilder library,
+      CoreTypes coreTypes,
+      List<DelayedActionPerformer> delayedActionPerformers,
+      List<SynthesizedFunctionNode> synthesizedFunctionNodes);
+}
+
+mixin SourceMemberBuilderMixin implements SourceMemberBuilder {
+  @override
+  MemberDataForTesting? dataForTesting =
+      retainDataForTesting ? new MemberDataForTesting() : null;
+
+  @override
+  void buildMembers(
+      SourceLibraryBuilder library, void Function(Member, BuiltMemberKind) f) {
+    assert(false, "Unexpected call to $runtimeType.buildMembers.");
+  }
+}
+
+abstract class SourceMemberBuilderImpl extends MemberBuilderImpl
+    implements SourceMemberBuilder {
+  @override
+  MemberDataForTesting? dataForTesting;
+
+  SourceMemberBuilderImpl(Builder parent, int charOffset, [Uri? fileUri])
+      : dataForTesting =
+            retainDataForTesting ? new MemberDataForTesting() : null,
+        super(parent, charOffset, fileUri);
+
+  bool get isRedirectingGenerativeConstructor => false;
+
   bool? _isConflictingSetter;
 
   @override
@@ -167,20 +216,6 @@
     _isConflictingSetter = value;
   }
 
-  @override
-  LibraryBuilder get library {
-    if (parent is LibraryBuilder) {
-      LibraryBuilder library = parent as LibraryBuilder;
-      return library.partOfLibrary ?? library;
-    } else if (parent is ExtensionBuilder) {
-      ExtensionBuilder extension = parent as ExtensionBuilder;
-      return extension.library;
-    } else {
-      ClassBuilder cls = parent as ClassBuilder;
-      return cls.library;
-    }
-  }
-
   // TODO(johnniwinther): Remove this and create a [ProcedureBuilder] interface.
   @override
   ProcedureKind? get kind => unsupported("kind", charOffset, fileUri);
@@ -192,13 +227,6 @@
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {}
 
-  /// Builds the core AST structures for this member as needed for the outline.
-  void buildMembers(
-      SourceLibraryBuilder library, void Function(Member, BuiltMemberKind) f);
-
-  @override
-  String get fullNameForErrors => name;
-
   @override
   StringBuffer printOn(StringBuffer buffer) {
     if (isClassMember) {
@@ -212,10 +240,6 @@
   /// The builder for the enclosing class or extension, if any.
   DeclarationBuilder? get declarationBuilder =>
       parent is DeclarationBuilder ? parent as DeclarationBuilder : null;
-
-  /// The builder for the enclosing class, if any.
-  ClassBuilder? get classBuilder =>
-      parent is ClassBuilder ? parent as ClassBuilder : null;
 }
 
 enum BuiltMemberKind {
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 d800f03..18d8b6d 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
@@ -9,13 +9,10 @@
 
 import '../builder/builder.dart';
 import '../builder/member_builder.dart';
-import '../builder/library_builder.dart';
 
 import '../kernel/hierarchy/class_member.dart' show ClassMember;
 import '../kernel/hierarchy/members_builder.dart' show ClassMembersBuilder;
 import '../kernel/member_covariance.dart';
-import '../kernel/utils.dart'
-    show isRedirectingGenerativeConstructorImplementation;
 
 import '../modifier.dart'
     show abstractMask, constMask, externalMask, finalMask, lateMask, staticMask;
@@ -66,11 +63,11 @@
   @override
   bool get isFactory => identical(ProcedureKind.Factory, kind);
 
-  @override
+  /*@override
   bool get isRedirectingGenerativeConstructor {
     return isConstructor &&
         isRedirectingGenerativeConstructorImplementation(member as Constructor);
-  }
+  }*/
 
   @override
   bool get isSynthetic {
@@ -81,11 +78,11 @@
   @override
   bool get isAssignable => false;
 
-  @override
+  /*@override
   void buildMembers(
       LibraryBuilder library, void Function(Member, BuiltMemberKind) f) {
     throw new UnsupportedError('DillMemberBuilder.buildMembers');
-  }
+  }*/
 
   List<ClassMember>? _localMembers;
   List<ClassMember>? _localSetters;
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 437924c..2070ba302 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -781,7 +781,7 @@
   SyntheticConstructorBuilder _makeMixinApplicationConstructor(
       SourceClassBuilder classBuilder,
       Class mixin,
-      MemberBuilderImpl superConstructorBuilder,
+      MemberBuilder superConstructorBuilder,
       Map<TypeParameter, DartType> substitutionMap,
       Reference? constructorReference,
       Reference? tearOffReference) {
@@ -888,7 +888,9 @@
         // the outline expressions. We pass on the original constructor and
         // cloned function nodes to ensure that the default values are computed
         // and cloned for the outline.
-        origin: isConst ? superConstructorBuilder : null,
+        origin: isConst && superConstructorBuilder is SourceMemberBuilder
+            ? superConstructorBuilder
+            : null,
         synthesizedFunctionNode: isConst ? synthesizedFunctionNode : null);
   }
 
diff --git a/pkg/front_end/lib/src/fasta/scope.dart b/pkg/front_end/lib/src/fasta/scope.dart
index f69cc83..af11d4d 100644
--- a/pkg/front_end/lib/src/fasta/scope.dart
+++ b/pkg/front_end/lib/src/fasta/scope.dart
@@ -16,6 +16,7 @@
 import 'kernel/body_builder.dart' show JumpTarget;
 import 'kernel/hierarchy/class_member.dart' show ClassMember;
 import 'kernel/kernel_helper.dart';
+import 'source/source_library_builder.dart';
 import 'util/helpers.dart' show DelayedActionPerformer;
 
 import 'fasta_codes.dart'
@@ -768,7 +769,10 @@
   }
 }
 
-mixin ErroneousMemberBuilderMixin implements MemberBuilder {
+mixin ErroneousMemberBuilderMixin implements SourceMemberBuilder {
+  @override
+  MemberDataForTesting? get dataForTesting => null;
+
   @override
   Member get member => throw new UnsupportedError('$runtimeType.member');
 
@@ -815,7 +819,7 @@
 
   @override
   void buildOutlineExpressions(
-      LibraryBuilder library,
+      SourceLibraryBuilder library,
       CoreTypes coreTypes,
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
@@ -824,6 +828,12 @@
   }
 
   @override
+  void buildMembers(
+      SourceLibraryBuilder library, void Function(Member, BuiltMemberKind) f) {
+    assert(false, "Unexpected call to $runtimeType.buildMembers.");
+  }
+
+  @override
   List<ClassMember> get localMembers => const <ClassMember>[];
 
   @override
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 213a84e..367808c 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
@@ -7,6 +7,7 @@
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart'
     show ClassHierarchy, ClassHierarchyMembers;
+import 'package:kernel/core_types.dart';
 import 'package:kernel/reference_from_index.dart' show IndexedClass;
 import 'package:kernel/src/bounds_checks.dart';
 import 'package:kernel/src/legacy_erasure.dart';
@@ -43,6 +44,7 @@
 import '../fasta_codes.dart';
 
 import '../kernel/combined_member_signature.dart';
+import '../kernel/kernel_helper.dart';
 import '../kernel/kernel_target.dart' show KernelTarget;
 import '../kernel/redirecting_factory_body.dart' show redirectingName;
 import '../kernel/type_algorithms.dart' show computeTypeVariableBuilderVariance;
@@ -56,6 +58,8 @@
 
 import '../type_inference/type_schema.dart';
 
+import '../util/helpers.dart';
+
 import 'source_library_builder.dart' show SourceLibraryBuilder;
 
 Class initializeClass(
@@ -156,8 +160,8 @@
                 charOffset,
                 fileUri);
           }
-        } else if (declaration is MemberBuilderImpl) {
-          MemberBuilderImpl memberBuilder = declaration;
+        } else if (declaration is SourceMemberBuilder) {
+          SourceMemberBuilder memberBuilder = declaration;
           memberBuilder.buildMembers(library,
               (Member member, BuiltMemberKind memberKind) {
             member.parent = cls;
@@ -556,7 +560,9 @@
             builder.procedure, typeEnvironment, cls.typeParameters);
         library.checkTypesInFunctionBuilder(builder, typeEnvironment);
       } else {
-        assert(builder is DillFieldBuilder && builder.name == redirectingName,
+        assert(
+            builder is _RedirectingConstructorsFieldBuilder &&
+                builder.name == redirectingName,
             "Unexpected member: $builder.");
       }
     });
@@ -894,8 +900,9 @@
     // [constructor.target].
     //
     // TODO(ahe): Add a kernel node to represent redirecting factory bodies.
-    DillFieldBuilder? constructorsField = origin.scope
-        .lookupLocalMember(redirectingName, setter: false) as DillFieldBuilder?;
+    _RedirectingConstructorsFieldBuilder? constructorsField =
+        origin.scope.lookupLocalMember(redirectingName, setter: false)
+            as _RedirectingConstructorsFieldBuilder?;
     if (constructorsField == null) {
       ListLiteral literal = new ListLiteral(<Expression>[]);
       Name name = new Name(redirectingName, library.library);
@@ -908,7 +915,7 @@
           getterReference: getterReference)
         ..fileOffset = cls.fileOffset;
       cls.addField(field);
-      constructorsField = new DillFieldBuilder(field, this);
+      constructorsField = new _RedirectingConstructorsFieldBuilder(field, this);
       origin.scope
           .addLocalMember(redirectingName, constructorsField, setter: false);
     }
@@ -1911,3 +1918,18 @@
   }
   return null;
 }
+
+class _RedirectingConstructorsFieldBuilder extends DillFieldBuilder
+    with SourceMemberBuilderMixin {
+  _RedirectingConstructorsFieldBuilder(Field field, SourceClassBuilder parent)
+      : super(field, parent);
+
+  @override
+  void buildOutlineExpressions(
+      SourceLibraryBuilder library,
+      CoreTypes coreTypes,
+      List<DelayedActionPerformer> delayedActionPerformers,
+      List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
+    // Do nothing.
+  }
+}
diff --git a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
index 29e8ce8..7e37aee 100644
--- a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
@@ -128,8 +128,8 @@
             unexpected(fullNameForErrors, declaration.parent!.fullNameForErrors,
                 charOffset, fileUri);
           }
-        } else if (declaration is MemberBuilderImpl) {
-          MemberBuilderImpl memberBuilder = declaration;
+        } else if (declaration is SourceMemberBuilder) {
+          SourceMemberBuilder memberBuilder = declaration;
           memberBuilder.buildMembers(libraryBuilder,
               (Member member, BuiltMemberKind memberKind) {
             if (addMembersToLibrary &&
@@ -295,7 +295,7 @@
     }
 
     void build(String ignore, Builder declaration) {
-      MemberBuilder member = declaration as MemberBuilder;
+      SourceMemberBuilder member = declaration as SourceMemberBuilder;
       member.buildOutlineExpressions(library, coreTypes,
           delayedActionPerformers, synthesizedFunctionNodes);
     }
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 6f3c22a..cfa2f08 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -1025,9 +1025,10 @@
           conflictingGetables.add(currentGetable);
         }
       }
-      for (MemberBuilderImpl? currentSetter = setter as MemberBuilderImpl?;
+      for (SourceMemberBuilderImpl? currentSetter =
+              setter as SourceMemberBuilderImpl?;
           currentSetter != null;
-          currentSetter = currentSetter.next as MemberBuilderImpl?) {
+          currentSetter = currentSetter.next as SourceMemberBuilderImpl?) {
         bool conflict = conflictingGetables.isNotEmpty;
         for (Builder? currentGetable = getable;
             currentGetable != null;
@@ -2994,7 +2995,7 @@
       } else if (declaration is ExtensionBuilder) {
         declaration.buildOutlineExpressions(
             this, coreTypes, delayedActionPerformers, synthesizedFunctionNodes);
-      } else if (declaration is MemberBuilder) {
+      } else if (declaration is SourceMemberBuilder) {
         declaration.buildOutlineExpressions(
             this, coreTypes, delayedActionPerformers, synthesizedFunctionNodes);
       } else if (declaration is SourceTypeAliasBuilder) {
@@ -3038,7 +3039,7 @@
       if (!declaration.isPatch && !declaration.isDuplicate) {
         library.addExtension(extension);
       }
-    } else if (declaration is MemberBuilderImpl) {
+    } else if (declaration is SourceMemberBuilder) {
       declaration.buildMembers(this,
           (Member member, BuiltMemberKind memberKind) {
         if (member is Field) {
diff --git a/pkg/front_end/test/id_tests/assigned_variables_test.dart b/pkg/front_end/test/id_tests/assigned_variables_test.dart
index 0f833c1..4b1516b 100644
--- a/pkg/front_end/test/id_tests/assigned_variables_test.dart
+++ b/pkg/front_end/test/id_tests/assigned_variables_test.dart
@@ -45,8 +45,8 @@
       Member member,
       Map<Id, ActualData<_Data>> actualMap,
       {bool? verbose}) {
-    MemberBuilderImpl memberBuilder =
-        lookupMemberBuilder(compilerResult, member) as MemberBuilderImpl;
+    SourceMemberBuilder memberBuilder =
+        lookupMemberBuilder(compilerResult, member) as SourceMemberBuilder;
     AssignedVariablesForTesting<TreeNode, VariableDeclaration>?
         assignedVariables = memberBuilder
             .dataForTesting!.inferenceData.flowAnalysisResult.assignedVariables;
diff --git a/pkg/front_end/test/id_tests/definite_assignment_test.dart b/pkg/front_end/test/id_tests/definite_assignment_test.dart
index 536f1e1..f51a939 100644
--- a/pkg/front_end/test/id_tests/definite_assignment_test.dart
+++ b/pkg/front_end/test/id_tests/definite_assignment_test.dart
@@ -40,8 +40,8 @@
       Member member,
       Map<Id, ActualData<String>> actualMap,
       {bool? verbose}) {
-    MemberBuilderImpl memberBuilder =
-        lookupMemberBuilder(compilerResult, member) as MemberBuilderImpl;
+    SourceMemberBuilder memberBuilder =
+        lookupMemberBuilder(compilerResult, member) as SourceMemberBuilder;
     member.accept(new DefiniteAssignmentDataExtractor(compilerResult, actualMap,
         memberBuilder.dataForTesting!.inferenceData.flowAnalysisResult));
   }
diff --git a/pkg/front_end/test/id_tests/definite_unassignment_test.dart b/pkg/front_end/test/id_tests/definite_unassignment_test.dart
index 67ce244..7aeba6f 100644
--- a/pkg/front_end/test/id_tests/definite_unassignment_test.dart
+++ b/pkg/front_end/test/id_tests/definite_unassignment_test.dart
@@ -40,8 +40,8 @@
       Member member,
       Map<Id, ActualData<String>> actualMap,
       {bool? verbose}) {
-    MemberBuilderImpl memberBuilder =
-        lookupMemberBuilder(compilerResult, member) as MemberBuilderImpl;
+    SourceMemberBuilder memberBuilder =
+        lookupMemberBuilder(compilerResult, member) as SourceMemberBuilder;
     member.accept(new DefiniteUnassignmentDataExtractor(
         compilerResult,
         actualMap,
diff --git a/pkg/front_end/test/id_tests/inferred_type_arguments_test.dart b/pkg/front_end/test/id_tests/inferred_type_arguments_test.dart
index b4d3787..12ea3ed 100644
--- a/pkg/front_end/test/id_tests/inferred_type_arguments_test.dart
+++ b/pkg/front_end/test/id_tests/inferred_type_arguments_test.dart
@@ -44,8 +44,8 @@
       Member member,
       Map<Id, ActualData<List<DartType>>> actualMap,
       {bool? verbose}) {
-    MemberBuilderImpl memberBuilder =
-        lookupMemberBuilder(compilerResult, member) as MemberBuilderImpl;
+    SourceMemberBuilder memberBuilder =
+        lookupMemberBuilder(compilerResult, member) as SourceMemberBuilder;
     member.accept(new InferredTypeArgumentDataExtractor(
         compilerResult,
         memberBuilder.dataForTesting!.inferenceData.typeInferenceResult,
diff --git a/pkg/front_end/test/id_tests/inferred_variable_types_test.dart b/pkg/front_end/test/id_tests/inferred_variable_types_test.dart
index 7205920..a7bc0cb 100644
--- a/pkg/front_end/test/id_tests/inferred_variable_types_test.dart
+++ b/pkg/front_end/test/id_tests/inferred_variable_types_test.dart
@@ -44,8 +44,8 @@
       Member member,
       Map<Id, ActualData<DartType>> actualMap,
       {bool? verbose}) {
-    MemberBuilderImpl memberBuilder =
-        lookupMemberBuilder(compilerResult, member) as MemberBuilderImpl;
+    SourceMemberBuilder memberBuilder =
+        lookupMemberBuilder(compilerResult, member) as SourceMemberBuilder;
     member.accept(new InferredTypeArgumentDataExtractor(
         compilerResult,
         memberBuilder.dataForTesting!.inferenceData.typeInferenceResult,
diff --git a/pkg/front_end/test/id_tests/reachability_test.dart b/pkg/front_end/test/id_tests/reachability_test.dart
index 1362a08..8ea7394 100644
--- a/pkg/front_end/test/id_tests/reachability_test.dart
+++ b/pkg/front_end/test/id_tests/reachability_test.dart
@@ -42,8 +42,8 @@
       Member member,
       Map<Id, ActualData<Set<_ReachabilityAssertion>>> actualMap,
       {bool? verbose}) {
-    MemberBuilderImpl memberBuilder =
-        lookupMemberBuilder(compilerResult, member) as MemberBuilderImpl;
+    SourceMemberBuilder memberBuilder =
+        lookupMemberBuilder(compilerResult, member) as SourceMemberBuilder;
     member.accept(new ReachabilityDataExtractor(compilerResult, actualMap,
         memberBuilder.dataForTesting!.inferenceData.flowAnalysisResult));
   }
diff --git a/pkg/front_end/test/id_tests/why_not_promoted_test.dart b/pkg/front_end/test/id_tests/why_not_promoted_test.dart
index ca26b01..5899c55 100644
--- a/pkg/front_end/test/id_tests/why_not_promoted_test.dart
+++ b/pkg/front_end/test/id_tests/why_not_promoted_test.dart
@@ -47,8 +47,8 @@
       Member member,
       Map<Id, ActualData<String>> actualMap,
       {bool? verbose}) {
-    MemberBuilderImpl memberBuilder =
-        lookupMemberBuilder(compilerResult, member) as MemberBuilderImpl;
+    SourceMemberBuilder memberBuilder =
+        lookupMemberBuilder(compilerResult, member) as SourceMemberBuilder;
     member.accept(new WhyNotPromotedDataExtractor(compilerResult, actualMap,
         memberBuilder.dataForTesting!.inferenceData.flowAnalysisResult));
   }
diff --git a/pkg/front_end/test/patching/patching_test.dart b/pkg/front_end/test/patching/patching_test.dart
index 60129e5..2dc83ee 100644
--- a/pkg/front_end/test/patching/patching_test.dart
+++ b/pkg/front_end/test/patching/patching_test.dart
@@ -174,9 +174,9 @@
         features.addElement(Tags.initializers, desc);
       }
     }
-    MemberBuilderImpl? memberBuilder =
+    SourceMemberBuilder? memberBuilder =
         lookupMemberBuilder(compilerResult, member, required: false)
-            as MemberBuilderImpl?;
+            as SourceMemberBuilder?;
     MemberBuilder? patchMember = memberBuilder?.dataForTesting?.patchForTesting;
     if (patchMember != null) {
       features.add(Tags.patch);
diff --git a/tools/VERSION b/tools/VERSION
index 1fea6fb..967b65e 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 16
 PATCH 0
-PRERELEASE 139
+PRERELEASE 140
 PRERELEASE_PATCH 0
\ No newline at end of file
