Generate optional parameter initializers in BodyBuilder

Change-Id: I3f33c660e25564dbdf907d6331cf391537113549
Reviewed-on: https://dart-review.googlesource.com/c/86341
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index e9bbdab..25bcd5d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -2716,6 +2716,8 @@
       } else {
         variable.initializer = initializer..parent = variable;
       }
+    } else if (kind != FormalParameterKind.mandatory) {
+      variable.initializer ??= forest.literalNull(null)..parent = variable;
     }
     if (annotations != null) {
       if (functionNestingLevel == 0) {
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index ec3c1f1..f32111d 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -1381,19 +1381,12 @@
       for (var i = 0; i < positionalParameters.length; i++) {
         var parameter = positionalParameters[i];
         inferMetadataKeepingHelper(parameter.annotations);
-        if (i >= function.requiredParameterCount &&
-            parameter.initializer == null) {
-          parameter.initializer = new NullLiteral()..parent = parameter;
-        }
         if (parameter.initializer != null) {
           inferExpression(parameter.initializer, parameter.type, !isTopLevel);
         }
       }
       for (var parameter in function.namedParameters) {
         inferMetadataKeepingHelper(parameter.annotations);
-        if (parameter.initializer == null) {
-          parameter.initializer = new NullLiteral()..parent = parameter;
-        }
         inferExpression(parameter.initializer, parameter.type, !isTopLevel);
       }
     }