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 8361256..148e2b6 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
@@ -200,8 +200,8 @@
 
   @override
   void buildMembers(void Function(Member, BuiltMemberKind) f) {
-    Member member = build();
-    f(member, BuiltMemberKind.Constructor);
+    _build();
+    f(_constructor, BuiltMemberKind.Constructor);
     if (_constructorTearOff != null) {
       f(_constructorTearOff!, BuiltMemberKind.Method);
     }
@@ -209,8 +209,7 @@
 
   bool _hasBeenBuilt = false;
 
-  @override
-  Constructor build() {
+  void _build() {
     if (!_hasBeenBuilt) {
       buildFunction();
       _constructor.function.fileOffset = charOpenParenOffset;
@@ -248,7 +247,6 @@
             .registerConstructorToBeInferred(_constructor, this);
       }
     }
-    return _constructor;
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
index a88180b..8b8f7b2 100644
--- a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
@@ -561,7 +561,6 @@
 
   @override
   Class build(LibraryBuilder coreLibrary) {
-    cls.isEnum = true;
     intType.resolveIn(coreLibrary.scope, charOffset, fileUri, libraryBuilder);
     stringType.resolveIn(
         coreLibrary.scope, charOffset, fileUri, libraryBuilder);
@@ -572,6 +571,9 @@
 
     listType.resolveIn(coreLibrary.scope, charOffset, fileUri, libraryBuilder);
 
+    Class cls = super.build(coreLibrary);
+    cls.isEnum = true;
+
     List<Expression> values = <Expression>[];
     if (enumConstantInfos != null) {
       for (EnumConstantInfo? enumConstantInfo in enumConstantInfos!) {
@@ -579,15 +581,11 @@
           Builder declaration = firstMemberNamed(enumConstantInfo.name)!;
           if (declaration.isField) {
             SourceFieldBuilder fieldBuilder = declaration as SourceFieldBuilder;
-            fieldBuilder.build();
             values.add(new StaticGet(fieldBuilder.field));
           }
         }
       }
     }
-    SourceFieldBuilder valuesBuilder =
-        firstMemberNamed("values") as SourceFieldBuilder;
-    valuesBuilder.build();
 
     // The super initializer for the synthesized default constructor is
     // inserted here if the enum's supertype is _Enum to preserve the legacy
@@ -597,7 +595,8 @@
     // building.
     if (identical(this.supertypeBuilder, enumType)) {
       if (synthesizedDefaultConstructorBuilder != null) {
-        Constructor constructor = synthesizedDefaultConstructorBuilder!.build();
+        Constructor constructor =
+            synthesizedDefaultConstructorBuilder!.constructor;
         ClassBuilder objectClass = objectType.declaration as ClassBuilder;
         ClassBuilder enumClass = enumType.declaration as ClassBuilder;
         MemberBuilder? superConstructor = enumClass.findConstructorOrFactory(
@@ -625,7 +624,7 @@
       }
     }
 
-    return super.build(coreLibrary);
+    return cls;
   }
 
   DartType buildElement(SourceFieldBuilder fieldBuilder, CoreTypes coreTypes) {
@@ -778,7 +777,6 @@
           Builder declaration = firstMemberNamed(enumConstantInfo.name)!;
           if (declaration.isField) {
             SourceFieldBuilder fieldBuilder = declaration as SourceFieldBuilder;
-            fieldBuilder.build();
             values.add(new StaticGet(fieldBuilder.field));
           }
         }
diff --git a/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart b/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
index 86e3ca3..ec7ffb5 100644
--- a/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
@@ -133,15 +133,14 @@
 
   @override
   void buildMembers(void Function(Member, BuiltMemberKind) f) {
-    Member member = build();
-    f(member, BuiltMemberKind.Method);
+    _build();
+    f(_procedureInternal, BuiltMemberKind.Method);
     if (_factoryTearOff != null) {
       f(_factoryTearOff!, BuiltMemberKind.Method);
     }
   }
 
-  @override
-  Procedure build() {
+  void _build() {
     buildFunction();
     _procedureInternal.function.fileOffset = charOpenParenOffset;
     _procedureInternal.function.fileEndOffset =
@@ -160,7 +159,6 @@
           enclosingClass: classBuilder!.cls,
           libraryBuilder: libraryBuilder);
     }
-    return _procedureInternal;
   }
 
   bool _hasBuiltOutlines = false;
@@ -341,15 +339,15 @@
 
   @override
   void buildMembers(void Function(Member, BuiltMemberKind) f) {
-    Member member = build();
-    f(member, BuiltMemberKind.RedirectingFactory);
+    _build();
+    f(_procedureInternal, BuiltMemberKind.RedirectingFactory);
     if (_factoryTearOff != null) {
       f(_factoryTearOff!, BuiltMemberKind.Method);
     }
   }
 
   @override
-  Procedure build() {
+  void _build() {
     buildFunction();
     _procedureInternal.function.fileOffset = charOpenParenOffset;
     _procedureInternal.function.fileEndOffset =
@@ -374,7 +372,6 @@
               implementationConstructor: _procedureInternal,
               libraryBuilder: libraryBuilder);
     }
-    return _procedureInternal;
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/source/source_field_builder.dart b/pkg/front_end/lib/src/fasta/source/source_field_builder.dart
index 00682eb..b05b07b 100644
--- a/pkg/front_end/lib/src/fasta/source/source_field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_field_builder.dart
@@ -375,12 +375,12 @@
 
   @override
   void buildMembers(void Function(Member, BuiltMemberKind) f) {
-    build();
+    _build();
     _fieldEncoding.registerMembers(libraryBuilder, this, f);
   }
 
   /// Builds the core AST structures for this field as needed for the outline.
-  void build() {
+  void _build() {
     if (type is! InferableTypeBuilder) {
       fieldType = type.build(libraryBuilder, TypeUse.fieldType);
     }
diff --git a/pkg/front_end/lib/src/fasta/source/source_function_builder.dart b/pkg/front_end/lib/src/fasta/source/source_function_builder.dart
index fe0eb20..d64c8d3 100644
--- a/pkg/front_end/lib/src/fasta/source/source_function_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_function_builder.dart
@@ -474,8 +474,6 @@
     }
   }
 
-  Member build();
-
   @override
   void becomeNative(SourceLoader loader) {
     MemberBuilder constructor = loader.getNativeAnnotation();
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 2d6873b..9588563 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
@@ -232,20 +232,20 @@
 
   @override
   void buildMembers(void Function(Member, BuiltMemberKind) f) {
-    Member member = build();
+    _build();
     if (isExtensionMethod) {
       switch (kind) {
         case ProcedureKind.Method:
-          f(member, BuiltMemberKind.ExtensionMethod);
+          f(_procedure, BuiltMemberKind.ExtensionMethod);
           break;
         case ProcedureKind.Getter:
-          f(member, BuiltMemberKind.ExtensionGetter);
+          f(_procedure, BuiltMemberKind.ExtensionGetter);
           break;
         case ProcedureKind.Setter:
-          f(member, BuiltMemberKind.ExtensionSetter);
+          f(_procedure, BuiltMemberKind.ExtensionSetter);
           break;
         case ProcedureKind.Operator:
-          f(member, BuiltMemberKind.ExtensionOperator);
+          f(_procedure, BuiltMemberKind.ExtensionOperator);
           break;
         case ProcedureKind.Factory:
           throw new UnsupportedError(
@@ -259,8 +259,7 @@
     }
   }
 
-  @override
-  Procedure build() {
+  void _build() {
     buildFunction();
     _procedure.function.fileOffset = charOpenParenOffset;
     _procedure.function.fileEndOffset = _procedure.fileEndOffset;
@@ -281,7 +280,6 @@
       _buildExtensionTearOff(libraryBuilder, parent as ExtensionBuilder);
       updatePrivateMemberName(extensionTearOff!, libraryBuilder);
     }
-    return _procedure;
   }
 
   /// Creates a top level function that creates a tear off of an extension
