diff --git a/pkg/front_end/lib/src/fragment/constructor/body_builder_context.dart b/pkg/front_end/lib/src/fragment/constructor/body_builder_context.dart
index 70dc43c..6f0a49d 100644
--- a/pkg/front_end/lib/src/fragment/constructor/body_builder_context.dart
+++ b/pkg/front_end/lib/src/fragment/constructor/body_builder_context.dart
@@ -103,12 +103,24 @@
   @override
   void addInitializer(
     Initializer initializer,
-    ExpressionGeneratorHelper helper, {
-    required InitializerInferenceResult? inferenceResult,
-  }) {
+    ExpressionGeneratorHelper helper,
+  ) {
     _builder.addInitializer(
       initializer,
       helper,
+      inferenceResult: null,
+      parent: _member,
+    );
+  }
+
+  @override
+  void addInferredInitializer(
+    InitializerInferenceResult inferenceResult,
+    ExpressionGeneratorHelper helper,
+  ) {
+    _builder.addInitializer(
+      inferenceResult.initializer,
+      helper,
       inferenceResult: inferenceResult,
       parent: _member,
     );
diff --git a/pkg/front_end/lib/src/kernel/body_builder.dart b/pkg/front_end/lib/src/kernel/body_builder.dart
index b36509a..5cb64ed 100644
--- a/pkg/front_end/lib/src/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/kernel/body_builder.dart
@@ -1183,7 +1183,7 @@
               );
             }
             for (Initializer initializer in initializers) {
-              _context.addInitializer(initializer, this, inferenceResult: null);
+              _context.addInitializer(initializer, this);
             }
           }
         }
@@ -2106,12 +2106,8 @@
           );
 
       if (!_context.isExternalConstructor) {
-        for (int i = 0; i < initializers.length; i++) {
-          _context.addInitializer(
-            initializers[i],
-            this,
-            inferenceResult: inferenceResults[i],
-          );
+        for (InitializerInferenceResult result in inferenceResults) {
+          _context.addInferredInitializer(result, this);
         }
       }
     }
@@ -2122,7 +2118,6 @@
           buildProblem(cfe.codeConstructorNotSync, body!.fileOffset, noLength),
         ),
         this,
-        inferenceResult: null,
       );
     }
     if (needsImplicitSuperInitializer) {
@@ -2343,13 +2338,9 @@
           this,
           typeInferrer,
         );
-        _context.addInitializer(
-          initializer,
-          this,
-          inferenceResult: inferenceResult,
-        );
+        _context.addInferredInitializer(inferenceResult, this);
       } else {
-        _context.addInitializer(initializer, this, inferenceResult: null);
+        _context.addInitializer(initializer, this);
       }
     }
     if (body == null && !_context.isExternalConstructor) {
diff --git a/pkg/front_end/lib/src/kernel/body_builder_context.dart b/pkg/front_end/lib/src/kernel/body_builder_context.dart
index 313de29..f4f1b12 100644
--- a/pkg/front_end/lib/src/kernel/body_builder_context.dart
+++ b/pkg/front_end/lib/src/kernel/body_builder_context.dart
@@ -353,12 +353,20 @@
   /// Adds [initializer] to generative constructor currently being built.
   void addInitializer(
     Initializer initializer,
-    ExpressionGeneratorHelper helper, {
-    required InitializerInferenceResult? inferenceResult,
-  }) {
+    ExpressionGeneratorHelper helper,
+  ) {
     throw new UnsupportedError('${runtimeType}.addInitializer');
   }
 
+  /// Adds the inferred [Initializer] from the [inferenceResult] to generative
+  /// constructor currently being built.
+  void addInferredInitializer(
+    InitializerInferenceResult inferenceResult,
+    ExpressionGeneratorHelper helper,
+  ) {
+    throw new UnsupportedError('${runtimeType}.addInferredInitializer');
+  }
+
   /// Infers the [initializer].
   InitializerInferenceResult inferInitializer(
     Initializer initializer,
diff --git a/pkg/front_end/lib/src/type_inference/inference_results.dart b/pkg/front_end/lib/src/type_inference/inference_results.dart
index b2a3c40..16dcb75 100644
--- a/pkg/front_end/lib/src/type_inference/inference_results.dart
+++ b/pkg/front_end/lib/src/type_inference/inference_results.dart
@@ -138,6 +138,10 @@
     }
     return expression;
   }
+
+  /// Creates the [InitializerResult] corresponding to this
+  /// [InvocationInferenceResult] for the given [initializer].
+  InitializerInferenceResult toInitializerResult(Initializer initializer);
 }
 
 class SuccessfulInferenceResult implements InvocationInferenceResult {
@@ -276,6 +280,13 @@
 
   @override
   bool get isInapplicable => false;
+
+  @override
+  InitializerInferenceResult toInitializerResult(Initializer initializer) {
+    return new // force line break
+    SuccessfulInitializerInvocationInferenceResult // force line break
+    .fromSuccessfulInferenceResult(initializer, this);
+  }
 }
 
 class WrapInProblemInferenceResult implements InvocationInferenceResult {
@@ -325,31 +336,38 @@
       );
     }
   }
+
+  @override
+  InitializerInferenceResult toInitializerResult(Initializer initializer) {
+    return new // force line break
+    WrapInProblemInitializerInferenceResult.fromWrapInProblemInferenceResult(
+      initializer,
+      this,
+    );
+  }
 }
 
 abstract class InitializerInferenceResult {
+  /// The inferred initializer.
+  Initializer get initializer;
+
   /// Modifies list of initializers in-place to apply the inference result.
   void applyResult(List<Initializer> initializers, TreeNode? parent);
 
   factory InitializerInferenceResult.fromInvocationInferenceResult(
+    Initializer initializer,
     InvocationInferenceResult invocationInferenceResult,
   ) {
-    if (invocationInferenceResult is SuccessfulInferenceResult) {
-      return new // force line break
-      SuccessfulInitializerInvocationInferenceResult // force line break
-      .fromSuccessfulInferenceResult(invocationInferenceResult);
-    } else {
-      return new WrapInProblemInitializerInferenceResult // force line break
-      .fromWrapInProblemInferenceResult(
-        invocationInferenceResult as WrapInProblemInferenceResult,
-      );
-    }
+    return invocationInferenceResult.toInitializerResult(initializer);
   }
 }
 
 class SuccessfulInitializerInferenceResult
     implements InitializerInferenceResult {
-  const SuccessfulInitializerInferenceResult();
+  @override
+  final Initializer initializer;
+
+  SuccessfulInitializerInferenceResult(this.initializer);
 
   @override
   void applyResult(List<Initializer> initializers, TreeNode? parent) {}
@@ -357,6 +375,9 @@
 
 class SuccessfulInitializerInvocationInferenceResult
     implements InitializerInferenceResult {
+  @override
+  final Initializer initializer;
+
   final DartType inferredType;
 
   final FunctionType functionType;
@@ -366,6 +387,7 @@
   final DartType? inferredReceiverType;
 
   SuccessfulInitializerInvocationInferenceResult({
+    required this.initializer,
     required this.inferredType,
     required this.functionType,
     required this.hoistedArguments,
@@ -373,8 +395,10 @@
   });
 
   SuccessfulInitializerInvocationInferenceResult.fromSuccessfulInferenceResult(
+    Initializer initializer,
     SuccessfulInferenceResult successfulInferenceResult,
   ) : this(
+        initializer: initializer,
         inferredType: successfulInferenceResult.inferredType,
         functionType: successfulInferenceResult.functionType,
         hoistedArguments: successfulInferenceResult.hoistedArguments,
@@ -398,8 +422,13 @@
 
 class WrapInProblemInitializerInferenceResult
     implements InitializerInferenceResult {
+  @override
+  final Initializer initializer;
+  final WrapInProblemInferenceResult wrapInProblemInferenceResult;
+
   WrapInProblemInitializerInferenceResult.fromWrapInProblemInferenceResult(
-    WrapInProblemInferenceResult wrapInProblemInferenceResult,
+    this.initializer,
+    this.wrapInProblemInferenceResult,
   );
 
   @override
diff --git a/pkg/front_end/lib/src/type_inference/inference_visitor.dart b/pkg/front_end/lib/src/type_inference/inference_visitor.dart
index dd4fdbd..f04debc 100644
--- a/pkg/front_end/lib/src/type_inference/inference_visitor.dart
+++ b/pkg/front_end/lib/src/type_inference/inference_visitor.dart
@@ -1035,7 +1035,7 @@
       // Coverage-ignore-block(suite): Not run.
       node.statement = (result.statement as AssertStatement)..parent = node;
     }
-    return const SuccessfulInitializerInferenceResult();
+    return new SuccessfulInitializerInferenceResult(node);
   }
 
   @override
@@ -2929,7 +2929,7 @@
       fileOffset: node.fileOffset,
     ).expression;
     node.value = initializer..parent = node;
-    return const SuccessfulInitializerInferenceResult();
+    return new SuccessfulInitializerInferenceResult(node);
   }
 
   ForInResult handleForInDeclaringVariable(
@@ -3770,7 +3770,7 @@
     );
     node.variable.initializer = initializerResult.expression
       ..parent = node.variable;
-    return const SuccessfulInitializerInferenceResult();
+    return new SuccessfulInitializerInferenceResult(node);
   }
 
   InitializerInferenceResult visitShadowInvalidFieldInitializer(
@@ -3782,7 +3782,7 @@
       isVoidAllowed: false,
     );
     node.value = initializerResult.expression..parent = node;
-    return const SuccessfulInitializerInferenceResult();
+    return new SuccessfulInitializerInferenceResult(node);
   }
 
   @override
@@ -12148,6 +12148,7 @@
     );
     arguments.resetExplicitTypeArguments();
     return new InitializerInferenceResult.fromInvocationInferenceResult(
+      node,
       inferenceResult,
     );
   }
@@ -12186,6 +12187,7 @@
       staticTarget: node.target,
     );
     return new InitializerInferenceResult.fromInvocationInferenceResult(
+      node,
       inferenceResult,
     );
   }
@@ -12205,7 +12207,7 @@
       fileOffset: node.fileOffset,
     ).expression;
     node.value = initializer..parent = node;
-    return const SuccessfulInitializerInferenceResult();
+    return new SuccessfulInitializerInferenceResult(node);
   }
 
   @override
@@ -12548,6 +12550,7 @@
       staticTarget: node.target,
     );
     return new InitializerInferenceResult.fromInvocationInferenceResult(
+      node,
       inferenceResult,
     );
   }
