diff --git a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
index 0a4424c..68f16e3 100644
--- a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
@@ -8,7 +8,7 @@
     show FormalParameterKind, FormalParameterKindExtension;
 import 'package:_fe_analyzer_shared/src/scanner/scanner.dart' show Token;
 import 'package:kernel/ast.dart'
-    show DartType, DynamicType, Expression, VariableDeclaration;
+    show DartType, DynamicType, Expression, NullLiteral, VariableDeclaration;
 
 import '../constant_context.dart' show ConstantContext;
 import '../kernel/body_builder.dart' show BodyBuilder;
@@ -219,23 +219,23 @@
   /// formal parameter on a const constructor or instance method.
   void buildOutlineExpressions(SourceLibraryBuilder library,
       List<DelayedActionPerformer> delayedActionPerformers) {
-    if (initializerToken != null) {
-      // For modular compilation we need to include default values for optional
-      // and named parameters in several cases:
-      // * for const constructors to enable constant evaluation,
-      // * for instance methods because these might be needed to generated
-      //   noSuchMethod forwarders, and
-      // * for generative constructors to support forwarding constructors
-      //   in mixin applications.
-      bool needsDefaultValues = false;
-      if (parent is ConstructorBuilder) {
-        needsDefaultValues = true;
-      } else if (parent is SourceFactoryBuilder) {
-        needsDefaultValues = parent!.isFactory && parent!.isConst;
-      } else {
-        needsDefaultValues = parent!.isClassInstanceMember;
-      }
-      if (needsDefaultValues) {
+    // For modular compilation we need to include default values for optional
+    // and named parameters in several cases:
+    // * for const constructors to enable constant evaluation,
+    // * for instance methods because these might be needed to generated
+    //   noSuchMethod forwarders, and
+    // * for generative constructors to support forwarding constructors
+    //   in mixin applications.
+    bool needsDefaultValues = false;
+    if (parent is ConstructorBuilder) {
+      needsDefaultValues = true;
+    } else if (parent is SourceFactoryBuilder) {
+      needsDefaultValues = parent!.isFactory && parent!.isConst;
+    } else {
+      needsDefaultValues = parent!.isClassInstanceMember;
+    }
+    if (needsDefaultValues) {
+      if (initializerToken != null) {
         final ClassBuilder classBuilder = parent!.parent as ClassBuilder;
         Scope scope = classBuilder.scope;
         BodyBuilder bodyBuilder = library.loader
@@ -255,6 +255,9 @@
             library.library);
         initializerWasInferred = true;
         bodyBuilder.performBacklogComputations(delayedActionPerformers);
+      } else if (kind != FormalParameterKind.requiredPositional) {
+        // As done by BodyBuilder.endFormalParameter.
+        variable!.initializer = new NullLiteral()..parent = variable;
       }
     }
     initializerToken = null;
diff --git a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
index 2f58bb1..bd6983c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -27,7 +27,8 @@
 import 'package:kernel/src/const_canonical_type.dart';
 import 'package:kernel/src/legacy_erasure.dart';
 import 'package:kernel/src/norm.dart';
-import 'package:kernel/src/printer.dart' show AstPrinter, AstTextStrategy;
+import 'package:kernel/src/printer.dart'
+    show AstPrinter, AstTextStrategy, defaultAstTextStrategy;
 import 'package:kernel/type_algebra.dart';
 import 'package:kernel/type_environment.dart';
 import 'package:kernel/target/targets.dart';
@@ -2539,8 +2540,8 @@
         switch (op) {
           case 'toString':
             // Default value for toString() of instances.
-            return new StringConstant(
-                "Instance of '${receiver.classReference.toStringInternal()}'");
+            return new StringConstant("Instance of "
+                "'${receiver.classReference.toText(defaultAstTextStrategy)}'");
         }
       }
     }
diff --git a/pkg/front_end/test/incremental_suite.dart b/pkg/front_end/test/incremental_suite.dart
index 84d3b6c..a8394f1 100644
--- a/pkg/front_end/test/incremental_suite.dart
+++ b/pkg/front_end/test/incremental_suite.dart
@@ -59,6 +59,13 @@
 import 'package:kernel/class_hierarchy.dart'
     show ClassHierarchy, ClosedWorldClassHierarchy, ForTestingClassInfo;
 
+import 'package:kernel/src/equivalence.dart'
+    show
+        EquivalenceResult,
+        EquivalenceStrategy,
+        EquivalenceVisitor,
+        checkEquivalence;
+
 import 'package:kernel/target/targets.dart'
     show
         LateLowering,
@@ -110,6 +117,7 @@
     const Expectation.fail("UnexpectedInitializationError");
 const Expectation ReachableLibrariesError =
     const Expectation.fail("ReachableLibrariesError");
+const Expectation EquivalenceError = const Expectation.fail("EquivalenceError");
 const Expectation UriToSourceError = const Expectation.fail("UriToSourceError");
 const Expectation MissingPlatformLibraries =
     const Expectation.fail("MissingPlatformLibraries");
@@ -761,6 +769,16 @@
         }
       }
 
+      if (world["compareToPrevious"] == true && newestWholeComponent != null) {
+        EquivalenceResult result = checkEquivalence(
+            newestWholeComponent!, component!,
+            strategy: const Strategy());
+        if (!result.isEquivalent) {
+          return new Result<TestData>(
+              data, EquivalenceError, result.toString());
+        }
+      }
+
       newestWholeComponentData = util.postProcess(component!);
       newestWholeComponent = component;
       String actualSerialized = componentToStringSdkFiltered(component!);
@@ -1135,6 +1153,31 @@
   }
 }
 
+class Strategy extends EquivalenceStrategy {
+  const Strategy();
+
+  @override
+  bool checkComponent_libraries(
+      EquivalenceVisitor visitor, Component node, Component other) {
+    return visitor.checkSets(node.libraries.toSet(), other.libraries.toSet(),
+        visitor.matchNamedNodes, visitor.checkNodes, 'libraries');
+  }
+
+  @override
+  bool checkClass_procedures(
+      EquivalenceVisitor visitor, Class node, Class other) {
+    // Check procedures as a set instead of a list to allow for reordering.
+    return visitor.checkSets(node.procedures.toSet(), other.procedures.toSet(),
+        visitor.matchNamedNodes, visitor.checkNodes, 'procedures');
+  }
+
+  @override
+  bool checkVariableDeclaration_binaryOffsetNoTag(EquivalenceVisitor visitor,
+      VariableDeclaration node, VariableDeclaration other) {
+    return true;
+  }
+}
+
 Result? checkNNBDSettings(Component component) {
   NonNullableByDefaultCompiledMode mode = component.mode;
   if (mode == NonNullableByDefaultCompiledMode.Invalid) return null;
diff --git a/pkg/front_end/test/text_representation/empty_reference_test.dart b/pkg/front_end/test/text_representation/empty_reference_test.dart
index dd15aff..5d60dce 100644
--- a/pkg/front_end/test/text_representation/empty_reference_test.dart
+++ b/pkg/front_end/test/text_representation/empty_reference_test.dart
@@ -51,16 +51,16 @@
       new TypedefType.byReference(rootReference, Nullability.nonNullable, []),
       '<root>');
 
-  CanonicalName library = root.getChild('library');
+  CanonicalName library = root.getChild('lib');
   Reference libraryReference = new Reference()..canonicalName = library;
   testType(
       new InterfaceType.byReference(
           libraryReference, Nullability.nonNullable, []),
-      'library');
+      'library lib');
   testType(
       new TypedefType.byReference(
           libraryReference, Nullability.nonNullable, []),
-      'library');
+      'library lib');
 
   CanonicalName className = library.getChild('Class');
   Reference classNameReference = new Reference()..canonicalName = className;
@@ -68,12 +68,12 @@
       new InterfaceType.byReference(
           classNameReference, Nullability.nonNullable, []),
       'Class',
-      verbose: 'library::Class');
+      verbose: 'library lib::Class');
   testType(
       new TypedefType.byReference(
           classNameReference, Nullability.nonNullable, []),
       'Class',
-      verbose: 'library::Class');
+      verbose: 'library lib::Class');
 }
 
 void testMembers() {
@@ -100,7 +100,7 @@
   testExpression(new StaticGet.byReference(rootReference), '''
 <root>''');
 
-  CanonicalName library = root.getChild('library');
+  CanonicalName library = root.getChild('lib');
   Reference libraryReference = new Reference()..canonicalName = library;
   testExpression(
       new InstanceGet.byReference(
@@ -110,9 +110,10 @@
       '''
 0.foo''');
   testExpression(new StaticGet.byReference(libraryReference), '''
-library''');
+library lib''');
 
-  CanonicalName topLevelMemberName = library.getChild('member');
+  CanonicalName topLevelMemberName =
+      library.getChild(CanonicalName.methodsName).getChild('member');
   Reference topLevelMemberNameReference = new Reference()
     ..canonicalName = topLevelMemberName;
   testExpression(
@@ -124,7 +125,7 @@
 0.foo''');
   testExpression(new StaticGet.byReference(topLevelMemberNameReference), '''
 member''', verbose: '''
-library::member''');
+library lib::member''');
 
   CanonicalName className = library.getChild('Class');
   Reference classNameReference = new Reference()..canonicalName = className;
@@ -137,9 +138,10 @@
 0.foo''');
   testExpression(new StaticGet.byReference(classNameReference), '''
 Class''', verbose: '''
-library::Class''');
+library lib::Class''');
 
-  CanonicalName classMemberName = className.getChild('member');
+  CanonicalName classMemberName =
+      className.getChild(CanonicalName.methodsName).getChild('member');
   Reference classMemberNameReference = new Reference()
     ..canonicalName = classMemberName;
   testExpression(
@@ -151,5 +153,5 @@
 0.foo''');
   testExpression(new StaticGet.byReference(classMemberNameReference), '''
 Class.member''', verbose: '''
-library::Class.member''');
+library lib::Class.member''');
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.weak.outline.expect
index 7c7ba9c..822ba26 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.weak.outline.expect
@@ -23,7 +23,7 @@
 }
 class Class4 extends core::Object {
   final field core::int? field;
-  constructor •([core::int? field]) → self::Class4
+  constructor •([core::int? field = null]) → self::Class4
     ;
   static method _#new#tearOff([core::int? field]) → self::Class4
     return new self::Class4::•(field);
@@ -31,7 +31,7 @@
 class Class5 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
-  constructor •(core::int field1, [core::int? field2]) → self::Class5
+  constructor •(core::int field1, [core::int? field2 = null]) → self::Class5
     ;
   static method _#new#tearOff(core::int field1, [core::int? field2]) → self::Class5
     return new self::Class5::•(field1, field2);
@@ -40,7 +40,7 @@
   final field core::int field1;
   final field core::int? field2;
   final field core::int field3;
-  constructor •(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
+  constructor •(core::int field1, {core::int? field2 = null, required core::int field3 = null}) → self::Class6
     ;
   static method _#new#tearOff(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
     return new self::Class6::•(field1, field2: field2, field3: field3);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.weak.outline.expect
index daea2b6..830da60 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.weak.outline.expect
@@ -35,7 +35,7 @@
 }
 class Class4 extends core::Object {
   final field core::int? field;
-  constructor _([core::int? field]) → self::Class4
+  constructor _([core::int? field = null]) → self::Class4
     ;
   static method _#_#tearOff([core::int? field]) → self::Class4
     return new self::Class4::_(field);
@@ -47,7 +47,7 @@
 class Class5 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
-  constructor _(core::int field1, [core::int? field2]) → self::Class5
+  constructor _(core::int field1, [core::int? field2 = null]) → self::Class5
     ;
   static method _#_#tearOff(core::int field1, [core::int? field2]) → self::Class5
     return new self::Class5::_(field1, field2);
@@ -60,7 +60,7 @@
   final field core::int field1;
   final field core::int? field2;
   final field core::int field3;
-  constructor _(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
+  constructor _(core::int field1, {core::int? field2 = null, required core::int field3 = null}) → self::Class6
     ;
   static method _#_#tearOff(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.outline.expect
index 146ad99..d38cf02 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.outline.expect
@@ -43,7 +43,7 @@
 class Class4 extends core::Object {
   final field core::int? field;
   static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
-  constructor _([core::int? field]) → self::Class4
+  constructor _([core::int? field = null]) → self::Class4
     ;
   static method _#_#tearOff([core::int? field]) → self::Class4
     return new self::Class4::_(field);
@@ -56,7 +56,7 @@
   final field core::int field1;
   final field core::int? field2;
   static final field dynamic _redirecting# = <dynamic>[self::Class5::•]/*isLegacy*/;
-  constructor _(core::int field1, [core::int? field2]) → self::Class5
+  constructor _(core::int field1, [core::int? field2 = null]) → self::Class5
     ;
   static method _#_#tearOff(core::int field1, [core::int? field2]) → self::Class5
     return new self::Class5::_(field1, field2);
@@ -70,7 +70,7 @@
   final field core::int? field2;
   final field core::int field3;
   static final field dynamic _redirecting# = <dynamic>[self::Class6::•]/*isLegacy*/;
-  constructor _(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
+  constructor _(core::int field1, {core::int? field2 = null, required core::int field3 = null}) → self::Class6
     ;
   static method _#_#tearOff(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.outline.expect
index 451d45b..b5be0c4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.outline.expect
@@ -10,7 +10,7 @@
   static final field dynamic _redirecting# = <dynamic>[self::Class::redirect]/*isLegacy*/;
   constructor •(self::Class::S% a, self::Class::T% b) → self::Class<self::Class::S%, self::Class::T%>
     ;
-  constructor named(self::Class::S% a, [self::Class::T? b, core::int c = 42]) → self::Class<self::Class::S%, self::Class::T%>
+  constructor named(self::Class::S% a, [self::Class::T? b = null, core::int c = 42]) → self::Class<self::Class::S%, self::Class::T%>
     ;
   static method _#new#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#new#tearOff::S% a, self::Class::_#new#tearOff::T% b) → self::Class<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>
     return new self::Class::•<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>(a, b);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.modular.expect
index 53cbd09..b458764 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.modular.expect
@@ -74,7 +74,7 @@
   return mai::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
 static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#new#tearOff::Y%>
   return new mai::A::•<self::_#H#new#tearOff::Y%>();
-static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b]) → mai::A<self::_#H#named#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<self::_#H#named#tearOff::Y%>
   return new mai::A::named<self::_#H#named#tearOff::Y%>(a, b);
 
 constants  {
@@ -86,4 +86,5 @@
   #C6 = static-tearoff mai::_#F#named#tearOff
   #C7 = static-tearoff mai::_#F#fact#tearOff
   #C8 = static-tearoff mai::_#F#redirect#tearOff
+  #C9 = null
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect
index fdfd1c3..829a8ce 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect
@@ -37,7 +37,7 @@
   static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → mai::A<mai::A::T%>
     ;
-  constructor named(mai::A::T% a, [core::int? b]) → mai::A<mai::A::T%>
+  constructor named(mai::A::T% a, [core::int? b = #C2]) → mai::A<mai::A::T%>
     ;
   static method _#new#tearOff<T extends core::Object? = dynamic>() → mai::A<mai::A::_#new#tearOff::T%>
     return new mai::A::•<mai::A::_#new#tearOff::T%>();
@@ -79,4 +79,5 @@
 
 constants  {
   #C1 = constructor-tearoff mai::A::redirect
+  #C2 = null
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.outline.expect
index 26c6cb7..6a47350 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.outline.expect
@@ -37,7 +37,7 @@
   static final field dynamic _redirecting# = <dynamic>[typ::A::redirect]/*isLegacy*/;
   constructor •() → typ::A<typ::A::T%>
     ;
-  constructor named(typ::A::T% a, [core::int? b]) → typ::A<typ::A::T%>
+  constructor named(typ::A::T% a, [core::int? b = null]) → typ::A<typ::A::T%>
     ;
   static method _#new#tearOff<T extends core::Object? = dynamic>() → typ::A<typ::A::_#new#tearOff::T%>
     return new typ::A::•<typ::A::_#new#tearOff::T%>();
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.outline.expect
index bae6873..23dbb32 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.outline.expect
@@ -29,7 +29,7 @@
 class Class4 extends core::Object {
   final field core::int? field;
   static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
-  constructor _([core::int? field]) → self::Class4
+  constructor _([core::int? field = null]) → self::Class4
     ;
   static factory •([core::int? field]) → self::Class4
     return new self::Class4::_(field);
@@ -38,7 +38,7 @@
   final field core::int field1;
   final field core::int? field2;
   static final field dynamic _redirecting# = <dynamic>[self::Class5::•]/*isLegacy*/;
-  constructor _(core::int field1, [core::int? field2]) → self::Class5
+  constructor _(core::int field1, [core::int? field2 = null]) → self::Class5
     ;
   static factory •(core::int field1, [core::int? field2]) → self::Class5
     return new self::Class5::_(field1, field2);
@@ -48,7 +48,7 @@
   final field core::int? field2;
   final field core::int field3;
   static final field dynamic _redirecting# = <dynamic>[self::Class6::•]/*isLegacy*/;
-  constructor _(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
+  constructor _(core::int field1, {core::int? field2 = null, required core::int field3 = null}) → self::Class6
     ;
   static factory •(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.outline.expect
index 927a4e3..839811b 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.outline.expect
@@ -8,7 +8,7 @@
   final field core::int bar;
   static const field self::E0 one = const self::E0::•(0, "one", 1, bar: 1);
   static const field self::E0 two = const self::E0::•(1, "two", 2, bar: 2);
-  const constructor •(core::int index, core::String name, core::int foo, {required core::int bar}) → self::E0
+  const constructor •(core::int index, core::String name, core::int foo, {required core::int bar = null}) → self::E0
     : self::E0::foo = foo, self::E0::bar = bar, super core::_Enum::•(index, name)
     ;
   method toString() → core::String
@@ -19,7 +19,7 @@
   final field self::E1::X% foo;
   static const field self::E1<core::String> one = const self::E1::•<core::String>(0, "one", foo: "1");
   static const field self::E1<core::int> two = const self::E1::•<core::int>(1, "two", foo: 2);
-  const constructor •(core::int index, core::String name, {required self::E1::X% foo}) → self::E1<self::E1::X%>
+  const constructor •(core::int index, core::String name, {required self::E1::X% foo = null}) → self::E1<self::E1::X%>
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
   method toString() → core::String
@@ -33,7 +33,7 @@
   static const field self::E2<core::int, core::String, core::double> one = const self::E2::•<core::int, core::String, core::double>(0, "one", 1, bar: "1", baz: 3.14);
   static const field self::E2<core::String, core::int, core::double> two = const self::E2::•<core::String, core::int, core::double>(1, "two", "2", baz: 3.14, bar: 2);
   static const field self::E2<core::double, core::bool, dynamic> three = const self::E2::•<core::double, core::bool, dynamic>(2, "three", 3.0, bar: false);
-  const constructor •(core::int index, core::String name, self::E2::X% foo, {required self::E2::Y% bar, has-declared-initializer self::E2::Z? baz = null}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
+  const constructor •(core::int index, core::String name, self::E2::X% foo, {required self::E2::Y% bar = null, has-declared-initializer self::E2::Z? baz = null}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
     : self::E2::foo = foo, self::E2::bar = bar, self::E2::baz = baz, super core::_Enum::•(index, name)
     ;
   method toString() → core::String
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.outline.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.outline.expect
index 670f664..9119e8f 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.outline.expect
@@ -44,12 +44,12 @@
 abstract class I extends core::Object {
   synthetic constructor •() → self::I
     ;
-  abstract method foo([dynamic a]) → void;
+  abstract method foo([dynamic a = null]) → void;
 }
 abstract class B extends self::A {
   synthetic constructor •() → self::B
     ;
-  abstract method foo([dynamic a]) → void;
+  abstract method foo([dynamic a = null]) → void;
 }
 class C extends self::B {
   synthetic constructor •() → self::C
diff --git a/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.outline.expect b/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.outline.expect
index 2ca5306..8bd0275 100644
--- a/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.outline.expect
@@ -16,9 +16,9 @@
     ;
   static factory bazFactory(dynamic factoryFormal) → self::Baz
     ;
-  method fisk(dynamic formal1, dynamic formal2, dynamic formal3, dynamic formal4, [dynamic optional]) → dynamic
+  method fisk(dynamic formal1, dynamic formal2, dynamic formal3, dynamic formal4, [dynamic optional = null]) → dynamic
     ;
-  method hest({dynamic named}) → dynamic
+  method hest({dynamic named = null}) → dynamic
     ;
 }
 static const field core::int foo = 42;
diff --git a/pkg/front_end/testcases/general/async_nested.dart.weak.outline.expect b/pkg/front_end/testcases/general/async_nested.dart.weak.outline.expect
index 60f8e3e..39e35eb 100644
--- a/pkg/front_end/testcases/general/async_nested.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/async_nested.dart.weak.outline.expect
@@ -7,7 +7,7 @@
 class Node extends core::Object {
   final field core::List<self::Node>? nested;
   final field core::String name;
-  constructor •(core::String name, [core::List<self::Node>? nested]) → self::Node
+  constructor •(core::String name, [core::List<self::Node>? nested = null]) → self::Node
     ;
   method toString() → core::String
     ;
diff --git a/pkg/front_end/testcases/general/bug32426.dart.weak.outline.expect b/pkg/front_end/testcases/general/bug32426.dart.weak.outline.expect
index 4da5082..1f233dd 100644
--- a/pkg/front_end/testcases/general/bug32426.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/bug32426.dart.weak.outline.expect
@@ -20,7 +20,7 @@
 class C extends core::Object implements self::I {
   synthetic constructor •() → self::C*
     ;
-  method call([core::int* x]) → void
+  method call([core::int* x = null]) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect
index d73794e..c83eee4 100644
--- a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect
@@ -125,7 +125,7 @@
   @core::override
   method removeWhere((core::String, core::String) → core::bool predicate) → void
     ;
-  method update(covariant-by-class core::String key, covariant-by-class (core::String) → core::String update, {covariant-by-class () →? core::String ifAbsent}) → core::String
+  method update(covariant-by-class core::String key, covariant-by-class (core::String) → core::String update, {covariant-by-class () →? core::String ifAbsent = null}) → core::String
     ;
   method map<K2 extends core::Object? = dynamic, V2 extends core::Object? = dynamic>((core::String, core::String) → core::MapEntry<self::CustomMap::map::K2%, self::CustomMap::map::V2%> f) → core::Map<self::CustomMap::map::K2%, self::CustomMap::map::V2%>
     ;
diff --git a/pkg/front_end/testcases/general/forwarding_semi_stub.dart.weak.outline.expect b/pkg/front_end/testcases/general/forwarding_semi_stub.dart.weak.outline.expect
index 413db05..d738bdb 100644
--- a/pkg/front_end/testcases/general/forwarding_semi_stub.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/forwarding_semi_stub.dart.weak.outline.expect
@@ -7,27 +7,27 @@
     ;
   method method1(core::int a) → void
     ;
-  method method2({core::int? a}) → void
+  method method2({core::int? a = null}) → void
     ;
   method method3(core::int a) → void
     ;
   method method4(core::num a) → void
     ;
-  method method5({core::int? a}) → void
+  method method5({core::int? a = null}) → void
     ;
-  method method6({core::num? a}) → void
+  method method6({core::num? a = null}) → void
     ;
   method method7(covariant-by-class core::List<self::Super::T%> a) → void
     ;
-  method method8({covariant-by-class core::List<self::Super::T%>? a}) → void
+  method method8({covariant-by-class core::List<self::Super::T%>? a = null}) → void
     ;
   method method9(covariant-by-class core::List<self::Super::T%> a) → void
     ;
   method method10(covariant-by-class core::Iterable<self::Super::T%> a) → void
     ;
-  method method11({covariant-by-class core::List<self::Super::T%>? a}) → void
+  method method11({covariant-by-class core::List<self::Super::T%>? a = null}) → void
     ;
-  method method12({covariant-by-class core::Iterable<self::Super::T%>? a}) → void
+  method method12({covariant-by-class core::Iterable<self::Super::T%>? a = null}) → void
     ;
   set setter1(core::int a) → void
     ;
@@ -43,11 +43,11 @@
     ;
   method method1(covariant-by-declaration core::num a) → void
     ;
-  method method2({covariant-by-declaration core::num? a}) → void
+  method method2({covariant-by-declaration core::num? a = null}) → void
     ;
   method method7(covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%> a) → void
     ;
-  method method8({covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%>? a}) → void
+  method method8({covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%>? a = null}) → void
     ;
   set setter1(covariant-by-declaration core::num a) → void
     ;
@@ -61,17 +61,17 @@
     return super.{self::Super::method3}(a);
   forwarding-stub forwarding-semi-stub method /* signature-type: (core::int) → void */ method4(covariant-by-declaration core::num a) → void
     return super.{self::Super::method4}(a);
-  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::num?}) → void */ method5({covariant-by-declaration core::int? a}) → void
+  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::num?}) → void */ method5({covariant-by-declaration core::int? a = null}) → void
     return super.{self::Super::method5}(a: a);
-  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::int?}) → void */ method6({covariant-by-declaration core::num? a}) → void
+  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::int?}) → void */ method6({covariant-by-declaration core::num? a = null}) → void
     return super.{self::Super::method6}(a: a);
   forwarding-stub forwarding-semi-stub method /* signature-type: (core::Iterable<self::Class::T%>) → void */ method9(covariant-by-declaration covariant-by-class core::List<self::Class::T%> a) → void
     return super.{self::Super::method9}(a);
   forwarding-stub forwarding-semi-stub method /* signature-type: (core::List<self::Class::T%>) → void */ method10(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a) → void
     return super.{self::Super::method10}(a);
-  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::Iterable<self::Class::T%>?}) → void */ method11({covariant-by-declaration covariant-by-class core::List<self::Class::T%>? a}) → void
+  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::Iterable<self::Class::T%>?}) → void */ method11({covariant-by-declaration covariant-by-class core::List<self::Class::T%>? a = null}) → void
     return super.{self::Super::method11}(a: a);
-  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::List<self::Class::T%>?}) → void */ method12({covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%>? a}) → void
+  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::List<self::Class::T%>?}) → void */ method12({covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%>? a = null}) → void
     return super.{self::Super::method12}(a: a);
   forwarding-stub forwarding-semi-stub set /* signature-type: (core::int) → void */ setter2(covariant-by-declaration core::num a) → void
     return super.{self::Super::setter2} = a;
@@ -95,27 +95,27 @@
     ;
   method method1(covariant-by-declaration core::num a) → void
     ;
-  method method2({covariant-by-declaration core::num? a}) → void
+  method method2({covariant-by-declaration core::num? a = null}) → void
     ;
   method method3(covariant-by-declaration core::num a) → void
     ;
   method method4(covariant-by-declaration core::num a) → void
     ;
-  method method5({covariant-by-declaration core::num? a}) → void
+  method method5({covariant-by-declaration core::num? a = null}) → void
     ;
-  method method6({covariant-by-declaration core::num? a}) → void
+  method method6({covariant-by-declaration core::num? a = null}) → void
     ;
   method method7(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void
     ;
-  method method8({covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%>? a}) → void
+  method method8({covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%>? a = null}) → void
     ;
   method method9(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void
     ;
   method method10(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void
     ;
-  method method11({covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%>? a}) → void
+  method method11({covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%>? a = null}) → void
     ;
-  method method12({covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%>? a}) → void
+  method method12({covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%>? a = null}) → void
     ;
   set setter1(covariant-by-declaration core::num a) → void
     ;
diff --git a/pkg/front_end/testcases/general/implement_semi_stub.dart.weak.outline.expect b/pkg/front_end/testcases/general/implement_semi_stub.dart.weak.outline.expect
index a5176a6..4e28f66 100644
--- a/pkg/front_end/testcases/general/implement_semi_stub.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/implement_semi_stub.dart.weak.outline.expect
@@ -140,9 +140,9 @@
     ;
   method method3(core::num a, core::int b) → void
     ;
-  method method4({required core::num a}) → void
+  method method4({required core::num a = null}) → void
     ;
-  method method5({required core::int b}) → void
+  method method5({required core::int b = null}) → void
     ;
   method method7(covariant-by-class core::Iterable<self::Super::T%> a) → void
     ;
@@ -150,9 +150,9 @@
     ;
   method method9(covariant-by-class core::Iterable<self::Super::T%> a, covariant-by-class core::List<self::Super::T%> b) → void
     ;
-  method method10({required covariant-by-class core::Iterable<self::Super::T%> a}) → void
+  method method10({required covariant-by-class core::Iterable<self::Super::T%> a = null}) → void
     ;
-  method method11({required covariant-by-class core::List<self::Super::T%> b}) → void
+  method method11({required covariant-by-class core::List<self::Super::T%> b = null}) → void
     ;
   set setter1(core::num a) → void
     ;
@@ -166,13 +166,13 @@
     ;
   method method3(core::num a, covariant-by-declaration core::num b) → void
     ;
-  method method5({required core::int b}) → void
+  method method5({required core::int b = null}) → void
     ;
   method method8(covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%> b) → void
     ;
   method method9(covariant-by-class core::Iterable<self::Interface::T%> a, covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%> b) → void
     ;
-  method method11({required covariant-by-class core::List<self::Interface::T%> b}) → void
+  method method11({required covariant-by-class core::List<self::Interface::T%> b = null}) → void
     ;
 }
 class Class<T extends core::Object? = dynamic> extends self::Super<self::Class::T%> implements self::Interface<self::Class::T%> {
@@ -204,9 +204,9 @@
     ;
   method method3(covariant-by-declaration core::double a, covariant-by-declaration core::double b) → void
     ;
-  method method4({required core::double a}) → void
+  method method4({required core::double a = null}) → void
     ;
-  method method5({required core::double b}) → void
+  method method5({required core::double b = null}) → void
     ;
   method method7(covariant-by-declaration covariant-by-class core::Set<self::Class1::T%> a) → void
     ;
@@ -214,9 +214,9 @@
     ;
   method method9(covariant-by-declaration covariant-by-class core::Set<self::Class1::T%> a, covariant-by-declaration covariant-by-class core::Set<self::Class1::T%> b) → void
     ;
-  method method10({required covariant-by-class core::Set<self::Class1::T%> a}) → void
+  method method10({required covariant-by-class core::Set<self::Class1::T%> a = null}) → void
     ;
-  method method11({required covariant-by-class core::Set<self::Class1::T%> b}) → void
+  method method11({required covariant-by-class core::Set<self::Class1::T%> b = null}) → void
     ;
   set setter1(covariant-by-declaration core::double a) → void
     ;
diff --git a/pkg/front_end/testcases/general/implicit_super_call.dart.weak.outline.expect b/pkg/front_end/testcases/general/implicit_super_call.dart.weak.outline.expect
index 3f03f7a..9ec5019 100644
--- a/pkg/front_end/testcases/general/implicit_super_call.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/implicit_super_call.dart.weak.outline.expect
@@ -17,7 +17,7 @@
 class Super2 extends core::Object {
   synthetic constructor •() → self::Super2
     ;
-  method call(core::int a, [core::int? b]) → core::int
+  method call(core::int a, [core::int? b = null]) → core::int
     ;
 }
 class Class2 extends self::Super2 {
@@ -29,7 +29,7 @@
 class Super3 extends core::Object {
   synthetic constructor •() → self::Super3
     ;
-  method call(core::int a, {core::int? b, core::int? c}) → core::int
+  method call(core::int a, {core::int? b = null, core::int? c = null}) → core::int
     ;
 }
 class Class3 extends self::Super3 {
diff --git a/pkg/front_end/testcases/general/invalid_operator.dart.weak.outline.expect b/pkg/front_end/testcases/general/invalid_operator.dart.weak.outline.expect
index 839e7f4..92c304b 100644
--- a/pkg/front_end/testcases/general/invalid_operator.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/invalid_operator.dart.weak.outline.expect
@@ -686,167 +686,167 @@
     ;
   operator ==([core::Object a = 0]) → core::bool
     ;
-  operator <([dynamic a]) → dynamic
+  operator <([dynamic a = null]) → dynamic
     ;
-  operator >([dynamic a]) → dynamic
+  operator >([dynamic a = null]) → dynamic
     ;
-  operator <=([dynamic a]) → dynamic
+  operator <=([dynamic a = null]) → dynamic
     ;
-  operator >=([dynamic a]) → dynamic
+  operator >=([dynamic a = null]) → dynamic
     ;
-  operator -([dynamic a]) → dynamic
+  operator -([dynamic a = null]) → dynamic
     ;
-  operator +([dynamic a]) → dynamic
+  operator +([dynamic a = null]) → dynamic
     ;
-  operator /([dynamic a]) → dynamic
+  operator /([dynamic a = null]) → dynamic
     ;
-  operator ~/([dynamic a]) → dynamic
+  operator ~/([dynamic a = null]) → dynamic
     ;
-  operator *([dynamic a]) → dynamic
+  operator *([dynamic a = null]) → dynamic
     ;
-  operator %([dynamic a]) → dynamic
+  operator %([dynamic a = null]) → dynamic
     ;
-  operator |([dynamic a]) → dynamic
+  operator |([dynamic a = null]) → dynamic
     ;
-  operator ^([dynamic a]) → dynamic
+  operator ^([dynamic a = null]) → dynamic
     ;
-  operator &([dynamic a]) → dynamic
+  operator &([dynamic a = null]) → dynamic
     ;
-  operator <<([dynamic a]) → dynamic
+  operator <<([dynamic a = null]) → dynamic
     ;
-  operator >>([dynamic a]) → dynamic
+  operator >>([dynamic a = null]) → dynamic
     ;
-  operator []=([dynamic a, dynamic b]) → void
+  operator []=([dynamic a = null, dynamic b = null]) → void
     ;
-  operator []([dynamic a]) → dynamic
+  operator []([dynamic a = null]) → dynamic
     ;
-  operator ~([dynamic a]) → dynamic
+  operator ~([dynamic a = null]) → dynamic
     ;
 }
 class Operators4 extends core::Object {
   synthetic constructor •() → self::Operators4
     ;
-  operator ==({dynamic a}) → core::bool
+  operator ==({dynamic a = null}) → core::bool
     ;
-  operator <({dynamic a}) → dynamic
+  operator <({dynamic a = null}) → dynamic
     ;
-  operator >({dynamic a}) → dynamic
+  operator >({dynamic a = null}) → dynamic
     ;
-  operator <=({dynamic a}) → dynamic
+  operator <=({dynamic a = null}) → dynamic
     ;
-  operator >=({dynamic a}) → dynamic
+  operator >=({dynamic a = null}) → dynamic
     ;
-  operator -({dynamic a}) → dynamic
+  operator -({dynamic a = null}) → dynamic
     ;
-  operator +({dynamic a}) → dynamic
+  operator +({dynamic a = null}) → dynamic
     ;
-  operator /({dynamic a}) → dynamic
+  operator /({dynamic a = null}) → dynamic
     ;
-  operator ~/({dynamic a}) → dynamic
+  operator ~/({dynamic a = null}) → dynamic
     ;
-  operator *({dynamic a}) → dynamic
+  operator *({dynamic a = null}) → dynamic
     ;
-  operator %({dynamic a}) → dynamic
+  operator %({dynamic a = null}) → dynamic
     ;
-  operator |({dynamic a}) → dynamic
+  operator |({dynamic a = null}) → dynamic
     ;
-  operator ^({dynamic a}) → dynamic
+  operator ^({dynamic a = null}) → dynamic
     ;
-  operator &({dynamic a}) → dynamic
+  operator &({dynamic a = null}) → dynamic
     ;
-  operator <<({dynamic a}) → dynamic
+  operator <<({dynamic a = null}) → dynamic
     ;
-  operator >>({dynamic a}) → dynamic
+  operator >>({dynamic a = null}) → dynamic
     ;
-  operator []=({dynamic a, dynamic b}) → void
+  operator []=({dynamic a = null, dynamic b = null}) → void
     ;
-  operator []({dynamic a}) → dynamic
+  operator []({dynamic a = null}) → dynamic
     ;
-  operator ~({dynamic a}) → dynamic
+  operator ~({dynamic a = null}) → dynamic
     ;
 }
 class Operators5 extends core::Object {
   synthetic constructor •() → self::Operators5
     ;
-  operator ==(core::Object a, [dynamic b]) → core::bool
+  operator ==(core::Object a, [dynamic b = null]) → core::bool
     ;
-  operator <(dynamic a, [dynamic b]) → dynamic
+  operator <(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator >(dynamic a, [dynamic b]) → dynamic
+  operator >(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator <=(dynamic a, [dynamic b]) → dynamic
+  operator <=(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator >=(dynamic a, [dynamic b]) → dynamic
+  operator >=(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator -(dynamic a, [dynamic b]) → dynamic
+  operator -(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator +(dynamic a, [dynamic b]) → dynamic
+  operator +(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator /(dynamic a, [dynamic b]) → dynamic
+  operator /(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator ~/(dynamic a, [dynamic b]) → dynamic
+  operator ~/(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator *(dynamic a, [dynamic b]) → dynamic
+  operator *(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator %(dynamic a, [dynamic b]) → dynamic
+  operator %(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator |(dynamic a, [dynamic b]) → dynamic
+  operator |(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator ^(dynamic a, [dynamic b]) → dynamic
+  operator ^(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator &(dynamic a, [dynamic b]) → dynamic
+  operator &(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator <<(dynamic a, [dynamic b]) → dynamic
+  operator <<(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator >>(dynamic a, [dynamic b]) → dynamic
+  operator >>(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator []=(dynamic a, dynamic b, [dynamic c]) → void
+  operator []=(dynamic a, dynamic b, [dynamic c = null]) → void
     ;
-  operator [](dynamic a, [dynamic b]) → dynamic
+  operator [](dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator ~(dynamic a, [dynamic b]) → dynamic
+  operator ~(dynamic a, [dynamic b = null]) → dynamic
     ;
 }
 class Operators6 extends core::Object {
   synthetic constructor •() → self::Operators6
     ;
-  operator ==(core::Object a, {dynamic b}) → core::bool
+  operator ==(core::Object a, {dynamic b = null}) → core::bool
     ;
-  operator <(dynamic a, {dynamic b}) → dynamic
+  operator <(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator >(dynamic a, {dynamic b}) → dynamic
+  operator >(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator <=(dynamic a, {dynamic b}) → dynamic
+  operator <=(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator >=(dynamic a, {dynamic b}) → dynamic
+  operator >=(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator -(dynamic a, {dynamic b}) → dynamic
+  operator -(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator +(dynamic a, {dynamic b}) → dynamic
+  operator +(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator /(dynamic a, {dynamic b}) → dynamic
+  operator /(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator ~/(dynamic a, {dynamic b}) → dynamic
+  operator ~/(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator *(dynamic a, {dynamic b}) → dynamic
+  operator *(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator %(dynamic a, {dynamic b}) → dynamic
+  operator %(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator |(dynamic a, {dynamic b}) → dynamic
+  operator |(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator ^(dynamic a, {dynamic b}) → dynamic
+  operator ^(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator &(dynamic a, {dynamic b}) → dynamic
+  operator &(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator <<(dynamic a, {dynamic b}) → dynamic
+  operator <<(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator >>(dynamic a, {dynamic b}) → dynamic
+  operator >>(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator []=(dynamic a, dynamic b, {dynamic c}) → void
+  operator []=(dynamic a, dynamic b, {dynamic c = null}) → void
     ;
-  operator [](dynamic a, {dynamic b}) → dynamic
+  operator [](dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator ~(dynamic a, {dynamic b}) → dynamic
+  operator ~(dynamic a, {dynamic b = null}) → dynamic
     ;
 }
 class Operators7 extends core::Object {
diff --git a/pkg/front_end/testcases/general/issue42615.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue42615.dart.weak.outline.expect
index 1cd32a4..d0547dd 100644
--- a/pkg/front_end/testcases/general/issue42615.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue42615.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 import "dart:async";
 
 class Class<T extends core::Object* = dynamic> extends core::Object {
-  constructor •({() →* FutureOr<core::List<self::Class::T*>*>* a}) → self::Class<self::Class::T*>*
+  constructor •({() →* FutureOr<core::List<self::Class::T*>*>* a = null}) → self::Class<self::Class::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/issue46389.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue46389.dart.weak.outline.expect
index 8ff791a..bb955ac 100644
--- a/pkg/front_end/testcases/general/issue46389.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue46389.dart.weak.outline.expect
@@ -8,7 +8,7 @@
     ;
   method foo(core::int n) → core::num
     ;
-  method bar({required core::int x}) → core::num
+  method bar({required core::int x = null}) → core::num
     ;
   set baz(core::int x) → void
     ;
@@ -17,7 +17,7 @@
   synthetic constructor •() → self::B<self::B::X%>
     ;
   abstract method foo(covariant-by-class self::B::X% x) → self::B::X%;
-  abstract method bar({required covariant-by-class self::B::X% x}) → self::B::X%;
+  abstract method bar({required covariant-by-class self::B::X% x = null}) → self::B::X%;
   abstract set baz(covariant-by-class self::B::X% x) → void;
   abstract set boz(covariant-by-class self::B::X% x) → void;
 }
diff --git a/pkg/front_end/testcases/general/issue47036.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47036.dart.weak.outline.expect
index bad6433..f84d0ad 100644
--- a/pkg/front_end/testcases/general/issue47036.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue47036.dart.weak.outline.expect
@@ -10,7 +10,7 @@
 }
 class Settings extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Settings::•]/*isLegacy*/;
-  static factory •({self::Sidebar sidebar}) → self::Settings
+  static factory •({self::Sidebar sidebar = null}) → self::Settings
     return self::_SSettings::•(sidebar: sidebar);
 }
 class Sidebar extends core::Object {
@@ -20,7 +20,7 @@
 }
 abstract class _SSettings extends core::Object implements self::Settings {
   static final field dynamic _redirecting# = <dynamic>[self::_SSettings::•]/*isLegacy*/;
-  static factory •({self::Sidebar sidebar}) → self::_SSettings
+  static factory •({self::Sidebar sidebar = null}) → self::_SSettings
     return new self::_$_SSettings::•(sidebar: sidebar);
 }
 class _$_SSettings extends core::Object implements self::_SSettings /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/issue47994a.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47994a.dart.weak.outline.expect
index 0347e2e..4e6414d 100644
--- a/pkg/front_end/testcases/general/issue47994a.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue47994a.dart.weak.outline.expect
@@ -8,7 +8,7 @@
     ;
 }
 class BuildAssert extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::bool condition, [core::Object? message]) → self::BuildAssert
+  const constructor •(core::bool condition, [core::Object? message = null]) → self::BuildAssert
     : assert(condition, message), super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/issue48242.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue48242.dart.weak.outline.expect
index fe420e8..e400a72 100644
--- a/pkg/front_end/testcases/general/issue48242.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue48242.dart.weak.outline.expect
@@ -8,7 +8,7 @@
 }
 abstract class TestFailure<A extends core::Object? = dynamic> extends self::Base /*isMixinDeclaration*/  {
   @core::override
-  abstract method methodWithDefaultImpl({covariant-by-class self::TestFailure::A? nameParam}) → core::Object?;
+  abstract method methodWithDefaultImpl({covariant-by-class self::TestFailure::A? nameParam = null}) → core::Object?;
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/general/mixin_application_override.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_application_override.dart.weak.outline.expect
index a0a1070..b5bf4ad 100644
--- a/pkg/front_end/testcases/general/mixin_application_override.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_application_override.dart.weak.outline.expect
@@ -128,7 +128,7 @@
 class S extends core::Object {
   synthetic constructor •() → self::S
     ;
-  method foo([dynamic x]) → dynamic
+  method foo([dynamic x = null]) → dynamic
     ;
 }
 class M extends core::Object {
diff --git a/pkg/front_end/testcases/general/mixin_covariant.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_covariant.dart.weak.outline.expect
index 40e7e6a..27daeeb 100644
--- a/pkg/front_end/testcases/general/mixin_covariant.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant.dart.weak.outline.expect
@@ -44,9 +44,9 @@
     ;
   method positional(covariant-by-declaration core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, core::int? e) → void
     ;
-  method optional([covariant-by-declaration core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d]) → void
+  method optional([covariant-by-declaration core::int? a = null, core::int? b = null, covariant-by-declaration core::int? c = null, core::int? d = null]) → void
     ;
-  method named({covariant-by-declaration core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d}) → void
+  method named({covariant-by-declaration core::int? a = null, core::int? b = null, covariant-by-declaration core::int? c = null, core::int? d = null}) → void
     ;
 }
 class Inherited extends self::Direct {
diff --git a/pkg/front_end/testcases/general/named_parameters.dart.weak.outline.expect b/pkg/front_end/testcases/general/named_parameters.dart.weak.outline.expect
index a660886..9f54111 100644
--- a/pkg/front_end/testcases/general/named_parameters.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/named_parameters.dart.weak.outline.expect
@@ -5,9 +5,9 @@
 class Superclass extends core::Object {
   synthetic constructor •() → self::Superclass
     ;
-  method foo({dynamic alpha, dynamic beta}) → dynamic
+  method foo({dynamic alpha = null, dynamic beta = null}) → dynamic
     ;
-  method bar({dynamic beta, dynamic alpha}) → dynamic
+  method bar({dynamic beta = null, dynamic alpha = null}) → dynamic
     ;
   method namedCallback(({alpha: core::String, beta: core::int}) → dynamic callback) → dynamic
     ;
@@ -15,9 +15,9 @@
 class Subclass extends self::Superclass {
   synthetic constructor •() → self::Subclass
     ;
-  method foo({dynamic beta, dynamic alpha}) → dynamic
+  method foo({dynamic beta = null, dynamic alpha = null}) → dynamic
     ;
-  method bar({dynamic alpha, dynamic beta}) → dynamic
+  method bar({dynamic alpha = null, dynamic beta = null}) → dynamic
     ;
   method namedCallback(({alpha: core::String, beta: core::int}) → dynamic callback) → dynamic
     ;
diff --git a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.outline.expect b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.outline.expect
index 6ab71bf..6a88f7b 100644
--- a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.outline.expect
@@ -62,17 +62,17 @@
   synthetic constructor •() → nsm::A<nsm::A::T%>
     ;
   abstract method _method1(core::int a, core::int b, covariant-by-class nsm::A::T% c, covariant-by-class nsm::A::T% d) → void;
-  abstract method _method2({core::int a, core::int b, covariant-by-class nsm::A::T% c, covariant-by-class nsm::A::T% d}) → void;
+  abstract method _method2({core::int a = null, core::int b = null, covariant-by-class nsm::A::T% c = null, covariant-by-class nsm::A::T% d = null}) → void;
   abstract method _method3(core::int a, covariant-by-class nsm::A::T% b) → void;
-  abstract method _method4({core::int a, covariant-by-class nsm::A::T% b}) → void;
+  abstract method _method4({core::int a = null, covariant-by-class nsm::A::T% b = null}) → void;
 }
 abstract class B extends core::Object {
   synthetic constructor •() → nsm::B
     ;
   abstract method _method1(core::int x, covariant-by-declaration core::int y, core::int z, covariant-by-declaration core::int w) → void;
-  abstract method _method2({core::int a, covariant-by-declaration core::int b, core::int c, covariant-by-declaration core::int d}) → void;
+  abstract method _method2({core::int a = null, covariant-by-declaration core::int b = null, core::int c = null, covariant-by-declaration core::int d = null}) → void;
   abstract method _method3(covariant-by-declaration core::int x, core::int y) → void;
-  abstract method _method4({covariant-by-declaration core::int a, core::int b}) → void;
+  abstract method _method4({covariant-by-declaration core::int a = null, core::int b = null}) → void;
 }
 abstract class C1 extends core::Object implements nsm::A<core::int>, nsm::B {
   synthetic constructor •() → nsm::C1
diff --git a/pkg/front_end/testcases/general/optional.dart.weak.outline.expect b/pkg/front_end/testcases/general/optional.dart.weak.outline.expect
index 0d055ce..39abe43 100644
--- a/pkg/front_end/testcases/general/optional.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/optional.dart.weak.outline.expect
@@ -5,36 +5,36 @@
 class Foo extends core::Object {
   synthetic constructor •() → self::Foo
     ;
-  method method(dynamic x, [dynamic y, dynamic z]) → dynamic
+  method method(dynamic x, [dynamic y = null, dynamic z = null]) → dynamic
     ;
 }
 abstract class External extends core::Object {
   synthetic constructor •() → self::External
     ;
-  abstract method externalMethod(core::int x, [core::int y, core::int z]) → core::String;
+  abstract method externalMethod(core::int x, [core::int y = null, core::int z = null]) → core::String;
   abstract method listen(self::Listener listener) → void;
 }
 abstract class Listener extends core::Object {
   synthetic constructor •() → self::Listener
     ;
-  abstract method event(core::String input, [core::int? x, core::int? y]) → void;
+  abstract method event(core::String input, [core::int? x = null, core::int? y = null]) → void;
 }
 class TestListener extends self::Listener {
   synthetic constructor •() → self::TestListener
     ;
-  method event(core::String input, [core::int? x, core::int? y]) → void
+  method event(core::String input, [core::int? x = null, core::int? y = null]) → void
     ;
 }
 class ExtendedListener extends self::Listener {
   synthetic constructor •() → self::ExtendedListener
     ;
-  method event(core::String input, [core::int? x, core::int? y, dynamic z]) → void
+  method event(core::String input, [core::int? x = null, core::int? y = null, dynamic z = null]) → void
     ;
 }
 class InvalidListener extends core::Object {
   synthetic constructor •() → self::InvalidListener
     ;
-  method event(dynamic input, [dynamic x]) → void
+  method event(dynamic input, [dynamic x = null]) → void
     ;
 }
 external static method createExternal() → self::External;
diff --git a/pkg/front_end/testcases/general/override_check_basic.dart.weak.outline.expect b/pkg/front_end/testcases/general/override_check_basic.dart.weak.outline.expect
index 50f0b43..85c382b 100644
--- a/pkg/front_end/testcases/general/override_check_basic.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_basic.dart.weak.outline.expect
@@ -58,9 +58,9 @@
     ;
   method f1(self::A x) → void
     ;
-  method f2([self::A? x]) → void
+  method f2([self::A? x = null]) → void
     ;
-  method f3({self::A? x}) → void
+  method f3({self::A? x = null}) → void
     ;
   method f4() → self::A?
     ;
@@ -70,9 +70,9 @@
     ;
   method f1(core::Object x) → void
     ;
-  method f2([core::Object? x]) → void
+  method f2([core::Object? x = null]) → void
     ;
-  method f3({core::Object? x}) → void
+  method f3({core::Object? x = null}) → void
     ;
   method f4() → self::B?
     ;
@@ -82,9 +82,9 @@
     ;
   method f1(self::B x) → void
     ;
-  method f2([self::B? x]) → void
+  method f2([self::B? x = null]) → void
     ;
-  method f3({self::B? x}) → void
+  method f3({self::B? x = null}) → void
     ;
   method f4() → core::Object?
     ;
diff --git a/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.outline.expect b/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.outline.expect
index 17f1de7..beb4abd 100644
--- a/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.outline.expect
@@ -5,37 +5,37 @@
 class A extends core::Object {
   synthetic constructor •() → self::A
     ;
-  method foo({core::bool? c = true, core::bool? a}) → dynamic
+  method foo({core::bool? c = true, core::bool? a = null}) → dynamic
     ;
 }
 class B extends self::A {
   synthetic constructor •() → self::B
     ;
-  method foo({core::bool? c = true, core::bool? a}) → dynamic
+  method foo({core::bool? c = true, core::bool? a = null}) → dynamic
     ;
 }
 class C extends self::B {
   synthetic constructor •() → self::C
     ;
-  method foo({core::bool? c = true, core::bool? a}) → dynamic
+  method foo({core::bool? c = true, core::bool? a = null}) → dynamic
     ;
 }
 class A1 extends core::Object {
   synthetic constructor •() → self::A1
     ;
-  method foo({core::bool? a = true, core::bool? c}) → dynamic
+  method foo({core::bool? a = true, core::bool? c = null}) → dynamic
     ;
 }
 class B1 extends self::A1 {
   synthetic constructor •() → self::B1
     ;
-  method foo({core::bool? a = true, core::bool? c}) → dynamic
+  method foo({core::bool? a = true, core::bool? c = null}) → dynamic
     ;
 }
 class C1 extends self::B1 {
   synthetic constructor •() → self::C1
     ;
-  method foo({core::bool? a = true, core::bool? c}) → dynamic
+  method foo({core::bool? a = true, core::bool? c = null}) → dynamic
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.outline.expect
index 70bc2cc..a663626 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.outline.expect
@@ -16,7 +16,7 @@
   final field self::Class2 _c2;
   constructor •(self::Class2 _c2) → self::Class2
     ;
-  method method({dynamic a}) → dynamic
+  method method({dynamic a = null}) → dynamic
     ;
   get call() → core::int
     ;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.outline.expect
index ac02ea3..d242338 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.outline.expect
@@ -31,10 +31,10 @@
   constructor •() → self::Class<self::Class::T%>
     ;
   @self::Const::internal()
-  method method1<@self::Const::internal() T extends core::Object? = dynamic>(dynamic o1, [dynamic o2]) → dynamic
+  method method1<@self::Const::internal() T extends core::Object? = dynamic>(dynamic o1, [dynamic o2 = null]) → dynamic
     ;
   @self::Const::internal()
-  method method2<@self::Const::internal() T extends core::Object? = dynamic>(dynamic o1, {dynamic o2}) → dynamic
+  method method2<@self::Const::internal() T extends core::Object? = dynamic>(dynamic o1, {dynamic o2 = null}) → dynamic
     ;
 }
 @self::Const::internal()
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.weak.outline.expect
index 8972be7..95eee3f 100644
--- a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   constructor fromT(self::Foo::T _init) → self::Foo<self::Foo::T>
     ;
-  constructor _internal({required self::Foo::T x}) → self::Foo<self::Foo::T>
+  constructor _internal({required self::Foo::T x = null}) → self::Foo<self::Foo::T>
     ;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.weak.outline.expect
index 9c7ccb9..3aac044 100644
--- a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.weak.outline.expect
@@ -22,7 +22,7 @@
     ;
   constructor fromT(self::Foo::T* _init) → self::Foo<self::Foo::T*>*
     ;
-  constructor _internal({self::Foo::T* x}) → self::Foo<self::Foo::T*>*
+  constructor _internal({self::Foo::T* x = null}) → self::Foo<self::Foo::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.outline.expect
index 5e288fa..d0557a9 100644
--- a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.outline.expect
@@ -6,7 +6,7 @@
   covariant-by-class field self::Foo::T% x;
   constructor from(core::String _init) → self::Foo<self::Foo::T%>
     ;
-  constructor _internal({required self::Foo::T% x}) → self::Foo<self::Foo::T%>
+  constructor _internal({required self::Foo::T% x = null}) → self::Foo<self::Foo::T%>
     ;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/general/trailing_comma1.dart.weak.outline.expect b/pkg/front_end/testcases/general/trailing_comma1.dart.weak.outline.expect
index 5048b8e..ed37270 100644
--- a/pkg/front_end/testcases/general/trailing_comma1.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/trailing_comma1.dart.weak.outline.expect
@@ -5,9 +5,9 @@
 class C extends core::Object {
   synthetic constructor •() → self::C
     ;
-  method instance1({dynamic z}) → void
+  method instance1({dynamic z = null}) → void
     ;
-  method instance2(dynamic a, {dynamic z}) → void
+  method instance2(dynamic a, {dynamic z = null}) → void
     ;
 }
 class Bad extends core::Object {
diff --git a/pkg/front_end/testcases/incremental/const_to_string.yaml b/pkg/front_end/testcases/incremental/const_to_string.yaml
new file mode 100644
index 0000000..d97feb7
--- /dev/null
+++ b/pkg/front_end/testcases/incremental/const_to_string.yaml
@@ -0,0 +1,38 @@
+# Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE.md file.
+
+# Importing a package also via file uri gives two libraries with the same
+# file uri --- that shouldn't crash experimental invalidation though.
+
+type: newworld
+worlds:
+  - entry: main.dart
+    experiments: const-functions
+    sources:
+      main.dart: |
+        import "a.dart";
+        import "b.dart";
+        const String s1 = const A().toString();
+        const String s2 = const B<List<int>>().toString();
+        main() {
+          print(s1);
+          print(s2);
+        }
+      a.dart: |
+        class A {
+          const A();
+        }
+      b.dart: |
+        class B<E> {
+          const B();
+        }
+    expectedLibraryCount: 3
+
+  - entry: main.dart
+    experiments: const-functions
+    worldType: updated
+    expectInitializeFromDill: false
+    invalidate:
+      - main.dart
+    expectedLibraryCount: 3
diff --git a/pkg/front_end/testcases/incremental/const_to_string.yaml.world.1.expect b/pkg/front_end/testcases/incremental/const_to_string.yaml.world.1.expect
new file mode 100644
index 0000000..f842a13
--- /dev/null
+++ b/pkg/front_end/testcases/incremental/const_to_string.yaml.world.1.expect
@@ -0,0 +1,33 @@
+main = main::main;
+library from "org-dartlang-test:///a.dart" as a {
+
+  class A extends dart.core::Object /*hasConstConstructor*/  {
+    const constructor •() → a::A
+      : super dart.core::Object::•()
+      ;
+  }
+}
+library from "org-dartlang-test:///b.dart" as b {
+
+  class B<E extends dart.core::Object? = dynamic> extends dart.core::Object /*hasConstConstructor*/  {
+    const constructor •() → b::B<b::B::E%>
+      : super dart.core::Object::•()
+      ;
+  }
+}
+library from "org-dartlang-test:///main.dart" as main {
+
+  import "org-dartlang-test:///a.dart";
+  import "org-dartlang-test:///b.dart";
+
+  static const field dart.core::String s1 = #C1;
+  static const field dart.core::String s2 = #C2;
+  static method main() → dynamic {
+    dart.core::print(#C1);
+    dart.core::print(#C2);
+  }
+}
+constants  {
+  #C1 = "Instance of 'A'"
+  #C2 = "Instance of 'B'"
+}
diff --git a/pkg/front_end/testcases/incremental/const_to_string.yaml.world.2.expect b/pkg/front_end/testcases/incremental/const_to_string.yaml.world.2.expect
new file mode 100644
index 0000000..f842a13
--- /dev/null
+++ b/pkg/front_end/testcases/incremental/const_to_string.yaml.world.2.expect
@@ -0,0 +1,33 @@
+main = main::main;
+library from "org-dartlang-test:///a.dart" as a {
+
+  class A extends dart.core::Object /*hasConstConstructor*/  {
+    const constructor •() → a::A
+      : super dart.core::Object::•()
+      ;
+  }
+}
+library from "org-dartlang-test:///b.dart" as b {
+
+  class B<E extends dart.core::Object? = dynamic> extends dart.core::Object /*hasConstConstructor*/  {
+    const constructor •() → b::B<b::B::E%>
+      : super dart.core::Object::•()
+      ;
+  }
+}
+library from "org-dartlang-test:///main.dart" as main {
+
+  import "org-dartlang-test:///a.dart";
+  import "org-dartlang-test:///b.dart";
+
+  static const field dart.core::String s1 = #C1;
+  static const field dart.core::String s2 = #C2;
+  static method main() → dynamic {
+    dart.core::print(#C1);
+    dart.core::print(#C2);
+  }
+}
+constants  {
+  #C1 = "Instance of 'A'"
+  #C2 = "Instance of 'B'"
+}
diff --git a/pkg/front_end/testcases/incremental/initializer_implicit_null.yaml b/pkg/front_end/testcases/incremental/initializer_implicit_null.yaml
new file mode 100644
index 0000000..e60bc44
--- /dev/null
+++ b/pkg/front_end/testcases/incremental/initializer_implicit_null.yaml
@@ -0,0 +1,29 @@
+# Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE.md file.
+
+# Recompiling with no change shouldn't change the initializer - even from
+# null to Constant(null).
+
+type: newworld
+worlds:
+  - entry: main.dart
+    sources:
+      main.dart: |
+        import "lib.dart";
+        class B {}
+        class C = A with B;
+      lib.dart: |
+        class A {
+          final int? a;
+          A([this.a]);
+        }
+    expectedLibraryCount: 2
+
+  - entry: main.dart
+    worldType: updated
+    compareToPrevious: true
+    expectInitializeFromDill: false
+    invalidate:
+      - main.dart
+    expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/initializer_implicit_null.yaml.world.1.expect b/pkg/front_end/testcases/incremental/initializer_implicit_null.yaml.world.1.expect
new file mode 100644
index 0000000..8290d7d
--- /dev/null
+++ b/pkg/front_end/testcases/incremental/initializer_implicit_null.yaml.world.1.expect
@@ -0,0 +1,28 @@
+main = <No Member>;
+library from "org-dartlang-test:///lib.dart" as lib {
+
+  class A extends dart.core::Object {
+    final field dart.core::int? a;
+    constructor •([dart.core::int? a = #C1]) → lib::A
+      : lib::A::a = a, super dart.core::Object::•()
+      ;
+  }
+}
+library from "org-dartlang-test:///main.dart" as main {
+
+  import "org-dartlang-test:///lib.dart";
+
+  class B extends dart.core::Object {
+    synthetic constructor •() → main::B
+      : super dart.core::Object::•()
+      ;
+  }
+  class C extends lib::A implements main::B /*isEliminatedMixin*/  {
+    synthetic constructor •([dart.core::int? a = #C1]) → main::C
+      : super lib::A::•(a)
+      ;
+  }
+}
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/incremental/initializer_implicit_null.yaml.world.2.expect b/pkg/front_end/testcases/incremental/initializer_implicit_null.yaml.world.2.expect
new file mode 100644
index 0000000..8290d7d
--- /dev/null
+++ b/pkg/front_end/testcases/incremental/initializer_implicit_null.yaml.world.2.expect
@@ -0,0 +1,28 @@
+main = <No Member>;
+library from "org-dartlang-test:///lib.dart" as lib {
+
+  class A extends dart.core::Object {
+    final field dart.core::int? a;
+    constructor •([dart.core::int? a = #C1]) → lib::A
+      : lib::A::a = a, super dart.core::Object::•()
+      ;
+  }
+}
+library from "org-dartlang-test:///main.dart" as main {
+
+  import "org-dartlang-test:///lib.dart";
+
+  class B extends dart.core::Object {
+    synthetic constructor •() → main::B
+      : super dart.core::Object::•()
+      ;
+  }
+  class C extends lib::A implements main::B /*isEliminatedMixin*/  {
+    synthetic constructor •([dart.core::int? a = #C1]) → main::C
+      : super lib::A::•(a)
+      ;
+  }
+}
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/inference/bug30624.dart.weak.outline.expect b/pkg/front_end/testcases/inference/bug30624.dart.weak.outline.expect
index 7b44ed7..2d19b55 100644
--- a/pkg/front_end/testcases/inference/bug30624.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/bug30624.dart.weak.outline.expect
@@ -5,17 +5,17 @@
 class C<E extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::E*>*
     ;
-  method barA([(self::C::E*, self::C::E*) →* core::int* cmp]) → void
+  method barA([(self::C::E*, self::C::E*) →* core::int* cmp = null]) → void
     ;
-  method barB([(self::C::E*, self::C::E*) →* core::int* cmp]) → void
+  method barB([(self::C::E*, self::C::E*) →* core::int* cmp = null]) → void
     ;
-  method barC([(self::C::E*, self::C::E*) →* core::int* cmp]) → void
+  method barC([(self::C::E*, self::C::E*) →* core::int* cmp = null]) → void
     ;
-  method barD([(self::C::E*, self::C::E*) →* core::int* cmp]) → void
+  method barD([(self::C::E*, self::C::E*) →* core::int* cmp = null]) → void
     ;
-  method barE([(self::C::E*, self::C::E*) →* core::int* cmp]) → void
+  method barE([(self::C::E*, self::C::E*) →* core::int* cmp = null]) → void
     ;
-  method barF([(self::C::E*, self::C::E*) →* core::int* cmp]) → void
+  method barF([(self::C::E*, self::C::E*) →* core::int* cmp = null]) → void
     ;
   static method _default(dynamic a, dynamic b) → core::int*
     ;
diff --git a/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.outline.expect b/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.outline.expect
index 79e8640..0e0f2e4 100644
--- a/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class ActionDispatcher<P extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::ActionDispatcher<self::ActionDispatcher::P*>*
     ;
-  method call([covariant-by-class self::ActionDispatcher::P* value]) → void
+  method call([covariant-by-class self::ActionDispatcher::P* value = null]) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.outline.expect
index b4bd378..f77a3ad 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.outline.expect
@@ -17,7 +17,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F1 extends core::Object {
-  constructor •({core::List<core::int*>* a}) → self::F1*
+  constructor •({core::List<core::int*>* a = null}) → self::F1*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -59,7 +59,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F4 extends core::Object {
-  constructor •({core::Iterable<core::Iterable<core::int*>*>* a}) → self::F4*
+  constructor •({core::Iterable<core::Iterable<core::int*>*>* a = null}) → self::F4*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.outline.expect
index 0a9290c..568d09d 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.outline.expect
@@ -17,7 +17,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F4<T extends core::Object* = dynamic> extends core::Object {
-  constructor •({core::Iterable<core::Iterable<self::F4::T*>*>* a}) → self::F4<self::F4::T*>*
+  constructor •({core::Iterable<core::Iterable<self::F4::T*>*>* a = null}) → self::F4<self::F4::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.outline.expect
index 6ad323d..bc46cfe 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.outline.expect
@@ -17,7 +17,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F1<T extends core::Object* = dynamic> extends core::Object {
-  constructor •({core::List<self::F1::T*>* a}) → self::F1<self::F1::T*>*
+  constructor •({core::List<self::F1::T*>* a = null}) → self::F1<self::F1::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -59,7 +59,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F4<T extends core::Object* = dynamic> extends core::Object {
-  constructor •({core::Iterable<core::Iterable<self::F4::T*>*>* a}) → self::F4<self::F4::T*>*
+  constructor •({core::Iterable<core::Iterable<self::F4::T*>*>* a = null}) → self::F4<self::F4::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.outline.expect
index 6b90f7f..a2ec85f 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.outline.expect
@@ -43,9 +43,9 @@
     ;
 }
 class F<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::A<self::F::S*, self::F::T*> {
-  constructor •(self::F::S* x, self::F::T* y, {core::List<self::F::S*>* a, core::List<self::F::T*>* b}) → self::F<self::F::S*, self::F::T*>*
+  constructor •(self::F::S* x, self::F::T* y, {core::List<self::F::S*>* a = null, core::List<self::F::T*>* b = null}) → self::F<self::F::S*, self::F::T*>*
     ;
-  constructor named(self::F::S* x, self::F::T* y, [self::F::S* a, self::F::T* b]) → self::F<self::F::S*, self::F::T*>*
+  constructor named(self::F::S* x, self::F::T* y, [self::F::S* a = null, self::F::T* b = null]) → self::F<self::F::S*, self::F::T*>*
     ;
 }
 static method test() → void
diff --git a/pkg/front_end/testcases/inference/future_then.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then.dart.weak.outline.expect
index 1e5bf1d..9492fb2 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_2.dart.weak.outline.expect
index 65c689a..6bf7851 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_3.dart.weak.outline.expect
index dec6dfa..d8325ea 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_4.dart.weak.outline.expect
index 716cde4..bd648b9 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_5.dart.weak.outline.expect
index b9060d8..bdf2de4 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_6.dart.weak.outline.expect
index f7c82fa..6308c69 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.outline.expect
index 3a661d0..c6f1986 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.outline.expect
index 68bc085..c076dc4 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.outline.expect
index bb3f357..9969d8c 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.outline.expect
index c9869bc..242640b 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.outline.expect
index c2dff99..072b257 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.outline.expect
index 4bf3e0c..78864f5 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.outline.expect
index 3719c43..174999b 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.outline.expect
index 0838a5b..2f7fa11 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.outline.expect
index 244190b..d1dd603 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.outline.expect
index 0096c45..1d10649 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.outline.expect
index 45d1408..41c31af 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.outline.expect
index 6e0c9a1..0b1b385 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.outline.expect
index 53ccca1..871785f 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.outline.expect
@@ -8,11 +8,11 @@
 class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
   constructor •() → self::MyFuture<self::MyFuture::T*>*
     ;
-  constructor value([dynamic x]) → self::MyFuture<self::MyFuture::T*>*
+  constructor value([dynamic x = null]) → self::MyFuture<self::MyFuture::T*>*
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.outline.expect
index f4f33bc..cec3e52 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.outline.expect
@@ -8,11 +8,11 @@
 class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
   constructor •() → self::MyFuture<self::MyFuture::T*>*
     ;
-  constructor value([dynamic x]) → self::MyFuture<self::MyFuture::T*>*
+  constructor value([dynamic x = null]) → self::MyFuture<self::MyFuture::T*>*
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.outline.expect
index cd98612..2ba5919 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.outline.expect
@@ -8,11 +8,11 @@
 class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
   constructor •() → self::MyFuture<self::MyFuture::T*>*
     ;
-  constructor value([dynamic x]) → self::MyFuture<self::MyFuture::T*>*
+  constructor value([dynamic x = null]) → self::MyFuture<self::MyFuture::T*>*
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.outline.expect
index 57e4893..a8d85df 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.outline.expect
@@ -8,11 +8,11 @@
 class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
   constructor •() → self::MyFuture<self::MyFuture::T*>*
     ;
-  constructor value([dynamic x]) → self::MyFuture<self::MyFuture::T*>*
+  constructor value([dynamic x = null]) → self::MyFuture<self::MyFuture::T*>*
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.outline.expect b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.outline.expect
index 3603daa..d909d15 100644
--- a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 abstract class C<E extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::E*>*
     ;
-  method sort([(self::C::E*, self::C::E*) →* core::int* compare]) → void
+  method sort([(self::C::E*, self::C::E*) →* core::int* compare = null]) → void
     ;
   static method _compareAny(dynamic a, dynamic b) → core::int*
     ;
diff --git a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.outline.expect
index 6756bd4..66062f6 100644
--- a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.outline.expect
@@ -41,11 +41,11 @@
 class A extends core::Object {
   synthetic constructor •() → self::A*
     ;
-  method f(self::A* x, {self::A* y}) → self::A*
+  method f(self::A* x, {self::A* y = null}) → self::A*
     ;
-  method g(self::A* x, {self::A* y}) → self::A*
+  method g(self::A* x, {self::A* y = null}) → self::A*
     ;
-  method h(self::A* x, {self::A* y}) → self::A*
+  method h(self::A* x, {self::A* y = null}) → self::A*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -61,21 +61,21 @@
 class B extends self::A implements self::I {
   synthetic constructor •() → self::B*
     ;
-  method f(invalid-type x, {invalid-type y}) → invalid-type
+  method f(invalid-type x, {invalid-type y = null}) → invalid-type
     ;
-  method g(invalid-type x, {invalid-type y}) → invalid-type
+  method g(invalid-type x, {invalid-type y = null}) → invalid-type
     ;
-  method h(invalid-type x, {invalid-type y}) → invalid-type
+  method h(invalid-type x, {invalid-type y = null}) → invalid-type
     ;
 }
 class I extends core::Object {
   synthetic constructor •() → self::I*
     ;
-  method f(self::I* x, {self::I* y}) → self::I*
+  method f(self::I* x, {self::I* y = null}) → self::I*
     ;
-  method g(self::I* x, {self::I* y}) → self::A*
+  method g(self::I* x, {self::I* y = null}) → self::A*
     ;
-  method h(self::A* x, {self::I* y}) → self::A*
+  method h(self::A* x, {self::I* y = null}) → self::A*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.outline.expect
index 3588046..01a5825 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class C extends core::Object {
   synthetic constructor •() → self::C*
     ;
-  method m<T extends core::Object* = dynamic>(core::int* a, {core::String* b, self::C::m::T* c}) → self::C::m::T*
+  method m<T extends core::Object* = dynamic>(core::int* a, {core::String* b = null, self::C::m::T* c = null}) → self::C::m::T*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.outline.expect
index 7cd51f6..5e7e617 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class C extends core::Object {
   synthetic constructor •() → self::C*
     ;
-  method m<T extends core::Object* = dynamic>(core::int* a, [self::C::m::T* b]) → self::C::m::T*
+  method m<T extends core::Object* = dynamic>(core::int* a, [self::C::m::T* b = null]) → self::C::m::T*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.outline.expect
index bc24a94..0ed9a74 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class C extends core::Object {
   synthetic constructor •() → self::C*
     ;
-  method m<T extends core::Object* = dynamic>(core::int* a, [core::String* b, self::C::m::T* c]) → self::C::m::T*
+  method m<T extends core::Object* = dynamic>(core::int* a, [core::String* b = null, self::C::m::T* c = null]) → self::C::m::T*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.weak.outline.expect
index bacc059..a063f88 100644
--- a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.weak.outline.expect
@@ -38,9 +38,9 @@
   synthetic constructor •() → self::A*
     ;
   abstract method f(core::int* x, core::int* y) → core::int*;
-  abstract method g(core::int* x, [core::int* y]) → core::int*;
-  abstract method h(core::int* x, {core::int* y}) → core::int*;
-  abstract method i(core::int* x, {core::int* y}) → core::int*;
+  abstract method g(core::int* x, [core::int* y = null]) → core::int*;
+  abstract method h(core::int* x, {core::int* y = null}) → core::int*;
+  abstract method i(core::int* x, {core::int* y = null}) → core::int*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -58,7 +58,7 @@
   abstract method f(core::int* x) → core::int*;
   abstract method g(core::int* x) → core::int*;
   abstract method h(core::int* x) → core::int*;
-  abstract method i(core::int* x, {core::int* z}) → core::int*;
+  abstract method i(core::int* x, {core::int* z = null}) → core::int*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -74,9 +74,9 @@
   synthetic constructor •() → self::C*
     ;
   abstract method f(invalid-type x, invalid-type y) → invalid-type;
-  abstract method g(core::int* x, [core::int* y]) → core::int*;
-  abstract method h(core::int* x, {core::int* y}) → core::int*;
-  abstract method i(invalid-type x, {invalid-type y, invalid-type z}) → invalid-type;
+  abstract method g(core::int* x, [core::int* y = null]) → core::int*;
+  abstract method h(core::int* x, {core::int* y = null}) → core::int*;
+  abstract method i(invalid-type x, {invalid-type y = null, invalid-type z = null}) → invalid-type;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.outline.expect b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.outline.expect
index ab7f834..ad8cba6 100644
--- a/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 abstract class A<X extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::A<self::A::X*>*
     ;
-  abstract method foo({covariant-by-class core::Iterable<self::A::X*>* x}) → void;
+  abstract method foo({covariant-by-class core::Iterable<self::A::X*>* x = null}) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -20,7 +20,7 @@
 class B<Y extends core::Object* = dynamic> extends core::Object implements self::A<self::B::Y*> {
   synthetic constructor •() → self::B<self::B::Y*>*
     ;
-  method foo({covariant-by-class core::Iterable<self::B::Y*>* x}) → void
+  method foo({covariant-by-class core::Iterable<self::B::Y*>* x = null}) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.outline.expect
index 933cc07..0cf94f7 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.outline.expect
@@ -17,7 +17,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B<T extends core::num*, S extends core::List<self::B::T*>* = core::List<core::num*>*> extends self::A<self::B::T*> {
-  constructor •([self::B::T* x]) → self::B<self::B::T*, self::B::S*>*
+  constructor •([self::B::T* x = null]) → self::B<self::B::T*, self::B::S*>*
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.outline.expect b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.outline.expect
index 23ee911..74d3bdb 100644
--- a/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.outline.expect
@@ -4,13 +4,13 @@
 
 typedef B = self::A;
 class A extends core::Object {
-  constructor •(core::int x, core::int y, {required core::int z}) → self::A
+  constructor •(core::int x, core::int y, {required core::int z = null}) → self::A
     ;
   static factory foo(core::int x, core::int y, {required core::int z}) → self::A
     ;
   get property() → (core::int, core::int, {required z: core::int}) → void
     ;
-  method bar(core::int x, core::int y, {required core::int z}) → void
+  method bar(core::int x, core::int y, {required core::int z = null}) → void
     ;
 }
 class Test extends self::A {
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.weak.outline.expect b/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.weak.outline.expect
index ccf5a7c..48bc7c5 100644
--- a/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.weak.outline.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::bar]/*isLegacy*/;
-  constructor •(core::int x, core::bool y, {required core::String z}) → self::A
+  constructor •(core::int x, core::bool y, {required core::String z = null}) → self::A
     ;
   constructor foo() → self::A
     ;
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.weak.outline.expect b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.weak.outline.expect
index 5048b8e..ed37270 100644
--- a/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.weak.outline.expect
@@ -5,9 +5,9 @@
 class C extends core::Object {
   synthetic constructor •() → self::C
     ;
-  method instance1({dynamic z}) → void
+  method instance1({dynamic z = null}) → void
     ;
-  method instance2(dynamic a, {dynamic z}) → void
+  method instance2(dynamic a, {dynamic z = null}) → void
     ;
 }
 class Bad extends core::Object {
diff --git a/pkg/front_end/testcases/nnbd/combined_required.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/combined_required.dart.weak.outline.expect
index 1b3a496..a58937a 100644
--- a/pkg/front_end/testcases/nnbd/combined_required.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/combined_required.dart.weak.outline.expect
@@ -5,17 +5,17 @@
 class A extends core::Object {
   synthetic constructor •() → self::A
     ;
-  method method1({required core::int a}) → void
+  method method1({required core::int a = null}) → void
     ;
-  method method2({core::int? a, required core::int b}) → void
+  method method2({core::int? a = null, required core::int b = null}) → void
     ;
 }
 class B extends core::Object {
   synthetic constructor •() → self::B
     ;
-  method method1({required covariant-by-declaration core::int a}) → void
+  method method1({required covariant-by-declaration core::int a = null}) → void
     ;
-  method method2({covariant-by-declaration core::int? a, required core::int b}) → void
+  method method2({covariant-by-declaration core::int? a = null, required core::int b = null}) → void
     ;
 }
 class C extends self::A implements self::B {
@@ -29,9 +29,9 @@
 class D extends self::C {
   synthetic constructor •() → self::D
     ;
-  method method1({required covariant-by-declaration core::int a}) → void
+  method method1({required covariant-by-declaration core::int a = null}) → void
     ;
-  method method2({covariant-by-declaration core::int? a, required core::int b}) → void
+  method method2({covariant-by-declaration core::int? a = null, required core::int b = null}) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/nnbd/future_or_variables.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/future_or_variables.dart.weak.outline.expect
index 920efc0..4a18759 100644
--- a/pkg/front_end/testcases/nnbd/future_or_variables.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/future_or_variables.dart.weak.outline.expect
@@ -13,9 +13,9 @@
   static field FutureOr<FutureOr<dynamic>>staticField3;
   synthetic constructor •() → self::Class1
     ;
-  method instanceMethod1([FutureOr<dynamic>parameter1, FutureOr<core::int?>parameter2, FutureOr<FutureOr<dynamic>>parameter3]) → void
+  method instanceMethod1([FutureOr<dynamic>parameter1 = null, FutureOr<core::int?>parameter2 = null, FutureOr<FutureOr<dynamic>>parameter3 = null]) → void
     ;
-  method instanceMethod2({FutureOr<dynamic>parameter1, FutureOr<core::int?>parameter2, FutureOr<FutureOr<dynamic>>parameter3}) → void
+  method instanceMethod2({FutureOr<dynamic>parameter1 = null, FutureOr<core::int?>parameter2 = null, FutureOr<FutureOr<dynamic>>parameter3 = null}) → void
     ;
   static method staticMethod1([FutureOr<dynamic>parameter1, FutureOr<core::int?>parameter2, FutureOr<FutureOr<dynamic>>parameter3]) → void
     ;
diff --git a/pkg/front_end/testcases/nnbd/issue40600.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue40600.dart.weak.outline.expect
index 36bd369..d9e0522 100644
--- a/pkg/front_end/testcases/nnbd/issue40600.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue40600.dart.weak.outline.expect
@@ -14,7 +14,7 @@
   covariant-by-class final field self::B<self::A::X%> b;
   synthetic constructor •() → self::A<self::A::X%>
     ;
-  method foo([covariant-by-class FutureOr<self::A::X%>? x]) → dynamic
+  method foo([covariant-by-class FutureOr<self::A::X%>? x = null]) → dynamic
     ;
 }
 class C<T extends core::Object? = dynamic> extends core::Object {
diff --git a/pkg/front_end/testcases/nnbd/issue40954.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue40954.dart.weak.outline.expect
index 35e6233..2869359 100644
--- a/pkg/front_end/testcases/nnbd/issue40954.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue40954.dart.weak.outline.expect
@@ -52,9 +52,9 @@
     ;
   static method test2(dynamic v, {self::A a}) → void
     ;
-  method test11(dynamic v, [self::A a]) → void
+  method test11(dynamic v, [self::A a = null]) → void
     ;
-  method test22(dynamic v, {self::A a}) → void
+  method test22(dynamic v, {self::A a = null}) → void
     ;
 }
 static method test1(dynamic v, [self::A a]) → void
diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect
index 48dab81..1ca1edd 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect
@@ -88,23 +88,23 @@
 class A extends core::Object {
   final field core::int i;
   static final field dynamic _redirecting# = <dynamic>[self::A::factory3, self::A::factory4, self::A::factory5, self::A::factory6, self::A::factory7]/*isLegacy*/;
-  constructor constructor1([core::int i]) → self::A
+  constructor constructor1([core::int i = null]) → self::A
     ;
-  constructor constructor2({core::int i}) → self::A
+  constructor constructor2({core::int i = null}) → self::A
     ;
-  constructor constructor3([core::int i]) → self::A
+  constructor constructor3([core::int i = null]) → self::A
     ;
-  constructor constructor4({core::int i}) → self::A
+  constructor constructor4({core::int i = null}) → self::A
     ;
-  constructor constructor5([core::int? i]) → self::A
+  constructor constructor5([core::int? i = null]) → self::A
     ;
-  constructor constructor6({core::int? i}) → self::A
+  constructor constructor6({core::int? i = null}) → self::A
     ;
-  constructor constructor7({required core::int i}) → self::A
+  constructor constructor7({required core::int i = null}) → self::A
     ;
-  external constructor constructor8([core::int i]) → self::A
+  external constructor constructor8([core::int i = null]) → self::A
     ;
-  external constructor constructor9({core::int i}) → self::A
+  external constructor constructor9({core::int i = null}) → self::A
     ;
   static factory factory3([core::int i]) → self::A
     return new self::A::constructor3(i);
@@ -120,45 +120,45 @@
     ;
   static factory factory9({core::int i}) → self::A
     ;
-  method method3([core::int i]) → dynamic
+  method method3([core::int i = null]) → dynamic
     ;
-  method method4({core::int i}) → dynamic
+  method method4({core::int i = null}) → dynamic
     ;
-  method method5([core::int? i]) → dynamic
+  method method5([core::int? i = null]) → dynamic
     ;
-  method method6({core::int? i}) → dynamic
+  method method6({core::int? i = null}) → dynamic
     ;
-  method method7({required core::int i}) → dynamic
+  method method7({required core::int i = null}) → dynamic
     ;
-  external method method8([core::int i]) → dynamic;
-  external method method9({core::int i}) → dynamic;
+  external method method8([core::int i = null]) → dynamic;
+  external method method9({core::int i = null}) → dynamic;
 }
 abstract class B extends core::Object {
   field core::int i;
   synthetic constructor •() → self::B
     ;
-  abstract method method3([core::int i]) → dynamic;
-  abstract method method4({core::int i}) → dynamic;
-  abstract method method5([core::int? i]) → dynamic;
-  abstract method method6({core::int? i}) → dynamic;
-  abstract method method7({required core::int i}) → dynamic;
+  abstract method method3([core::int i = null]) → dynamic;
+  abstract method method4({core::int i = null}) → dynamic;
+  abstract method method5([core::int? i = null]) → dynamic;
+  abstract method method6({core::int? i = null}) → dynamic;
+  abstract method method7({required core::int i = null}) → dynamic;
 }
 class C extends core::Object implements self::B {
   field core::int i;
   static final field dynamic _redirecting# = <dynamic>[self::C::factory3, self::C::factory4, self::C::factory5, self::C::factory6, self::C::factory7]/*isLegacy*/;
-  constructor constructor1([core::int i]) → self::C
+  constructor constructor1([core::int i = null]) → self::C
     ;
-  constructor constructor2({core::int i}) → self::C
+  constructor constructor2({core::int i = null}) → self::C
     ;
-  constructor constructor3([core::int i]) → self::C
+  constructor constructor3([core::int i = null]) → self::C
     ;
-  constructor constructor4({core::int i}) → self::C
+  constructor constructor4({core::int i = null}) → self::C
     ;
-  constructor constructor5([core::int? i]) → self::C
+  constructor constructor5([core::int? i = null]) → self::C
     ;
-  constructor constructor6({core::int? i}) → self::C
+  constructor constructor6({core::int? i = null}) → self::C
     ;
-  constructor constructor7({required core::int i}) → self::C
+  constructor constructor7({required core::int i = null}) → self::C
     ;
   static factory factory3([core::int i]) → self::C
     return new self::C::constructor3(i);
@@ -174,15 +174,15 @@
     ;
   static factory factory9({core::int i}) → self::C
     ;
-  method method3([core::int i]) → dynamic
+  method method3([core::int i = null]) → dynamic
     ;
-  method method4({core::int i}) → dynamic
+  method method4({core::int i = null}) → dynamic
     ;
-  method method5([core::int? i]) → dynamic
+  method method5([core::int? i = null]) → dynamic
     ;
-  method method6({core::int? i}) → dynamic
+  method method6({core::int? i = null}) → dynamic
     ;
-  method method7({required core::int i}) → dynamic
+  method method7({required core::int i = null}) → dynamic
     ;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect
index 110f141..62b1633 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect
@@ -17,7 +17,7 @@
 
 class C extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
-  constructor gen({core::int i}) → self::C
+  constructor gen({core::int i = null}) → self::C
     ;
   static factory fact({core::int i}) → self::C
     ;
diff --git a/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.outline.expect
index e04c31a..b6d9901 100644
--- a/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.outline.expect
@@ -4,9 +4,9 @@
 
 class A extends core::Object {
   field ({required s: core::String}) → void f;
-  constructor •({required core::int x}) → self::A
+  constructor •({required core::int x = null}) → self::A
     ;
-  method foo({required core::int y}) → dynamic
+  method foo({required core::int y = null}) → dynamic
     ;
 }
 static field ({required s: core::String}) → void g;
diff --git a/pkg/front_end/testcases/nnbd/null_aware_chain.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/null_aware_chain.dart.weak.outline.expect
index 1570628..4e356a4 100644
--- a/pkg/front_end/testcases/nnbd/null_aware_chain.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/null_aware_chain.dart.weak.outline.expect
@@ -4,7 +4,7 @@
 
 class Class extends core::Object {
   field self::Class? field;
-  constructor •([self::Class? field]) → self::Class
+  constructor •([self::Class? field = null]) → self::Class
     ;
   get getter1() → self::Class
     ;
diff --git a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.outline.expect
index 3b7cf09..ede32af 100644
--- a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.outline.expect
@@ -20,7 +20,7 @@
     return super.{core::Object::noSuchMethod}(invocation);
   forwarding-stub forwarding-semi-stub operator /* signature-type: (self::Class) → core::bool */ ==(covariant-by-declaration core::Object o) → core::bool
     return super.{core::Object::==}(o);
-  abstract method toString({core::Object o}) → core::String;
+  abstract method toString({core::Object o = null}) → core::String;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/override_inference.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/override_inference.dart.weak.outline.expect
index 1dcea19..fcc5fcb 100644
--- a/pkg/front_end/testcases/nnbd/override_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/override_inference.dart.weak.outline.expect
@@ -155,9 +155,9 @@
   abstract method method4b<AT4b extends core::Object? = dynamic>(self::A::method4b::AT4b% x, covariant-by-class self::A::AT% y) → void;
   abstract method method5a(core::int x, core::num y) → void;
   abstract method method5b(core::int x, core::num y) → void;
-  abstract method method6a({core::int x, core::num y}) → void;
-  abstract method method6b({core::num y, core::int x}) → void;
-  method method7a(core::Object? o, {core::Object? named}) → core::Object?
+  abstract method method6a({core::int x = null, core::num y = null}) → void;
+  abstract method method6b({core::num y = null, core::int x = null}) → void;
+  method method7a(core::Object? o, {core::Object? named = null}) → core::Object?
     ;
   abstract get getter1a() → core::Object;
   abstract get getter1b() → core::String;
@@ -202,9 +202,9 @@
   abstract method method4b<BT4b extends core::Object? = dynamic>(self::B::method4b::BT4b% x, covariant-by-class self::B::BT% y) → void;
   abstract method method5a(core::num x, core::int y) → void;
   abstract method method5b(core::num x, core::int y) → void;
-  abstract method method6a({core::Object x, core::num y}) → void;
-  abstract method method6b({core::int x, core::Object y}) → void;
-  abstract method method7a(FutureOr<dynamic>o, {FutureOr<dynamic>named}) → FutureOr<dynamic>;
+  abstract method method6a({core::Object x = null, core::num y = null}) → void;
+  abstract method method6b({core::int x = null, core::Object y = null}) → void;
+  abstract method method7a(FutureOr<dynamic>o, {FutureOr<dynamic>named = null}) → FutureOr<dynamic>;
   abstract get getter1a() → core::String;
   abstract get getter1b() → core::Object;
   abstract get getter1c() → core::int;
@@ -254,14 +254,14 @@
   abstract method method2a(core::Object? x) → void;
   abstract method method2b(core::Object? x) → void;
   abstract method method3a<CT3a extends core::Object? = dynamic>(self::C::method3a::CT3a% x) → void;
-  abstract method method3b<CT3b extends core::Object? = dynamic>(self::C::method3b::CT3b% x, [dynamic y]) → void;
+  abstract method method3b<CT3b extends core::Object? = dynamic>(self::C::method3b::CT3b% x, [dynamic y = null]) → void;
   abstract method method4a<CT4a extends core::Object? = dynamic>(self::C::method4a::CT4a% x, covariant-by-class core::num y) → void;
-  abstract method method4b<CT4b extends core::Object? = dynamic>(self::C::method4b::CT4b% x, covariant-by-class core::num y, [dynamic z]) → void;
+  abstract method method4b<CT4b extends core::Object? = dynamic>(self::C::method4b::CT4b% x, covariant-by-class core::num y, [dynamic z = null]) → void;
   abstract method method5a(invalid-type x, invalid-type y) → void;
-  abstract method method5b(core::num x, core::num y, [invalid-type z]) → void;
-  abstract method method6a({core::Object x, core::num y}) → void;
-  abstract method method6b({core::int x, core::Object y, dynamic z}) → void;
-  abstract method method7a(core::Object? o, {core::Object? named}) → core::Object?;
+  abstract method method5b(core::num x, core::num y, [invalid-type z = null]) → void;
+  abstract method method6a({core::Object x = null, core::num y = null}) → void;
+  abstract method method6b({core::int x = null, core::Object y = null, dynamic z = null}) → void;
+  abstract method method7a(core::Object? o, {core::Object? named = null}) → core::Object?;
   abstract get getter1a() → core::String;
   abstract get getter1b() → core::String;
   abstract get getter1c() → invalid-type;
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.outline.expect
index 1a1e26d..ede4192 100644
--- a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.outline.expect
@@ -50,11 +50,11 @@
 class Class extends core::Object {
   synthetic constructor •() → self2::Class
     ;
-  method method([core::int i]) → void
+  method method([core::int i = null]) → void
     ;
   @_in::patch
-  external method patchedMethod([core::int i]) → void;
-  method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod([core::int i]) → void
+  external method patchedMethod([core::int i = null]) → void;
+  method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod([core::int i = null]) → void
     ;
 }
 static method method([core::int i]) → void
diff --git a/pkg/front_end/testcases/nnbd/required.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/required.dart.weak.outline.expect
index 91153eb..d2d1598 100644
--- a/pkg/front_end/testcases/nnbd/required.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/required.dart.weak.outline.expect
@@ -15,18 +15,18 @@
 class Class extends core::Object {
   synthetic constructor •() → self::Class
     ;
-  method method({core::int a = 42, required core::int b, required final core::int c, required covariant-by-declaration final core::int d}) → dynamic
+  method method({core::int a = 42, required core::int b = null, required final core::int c = null, required covariant-by-declaration final core::int d = null}) → dynamic
     ;
 }
 abstract class A extends core::Object {
   synthetic constructor •() → self::A
     ;
-  abstract method foo({core::int x}) → dynamic;
+  abstract method foo({core::int x = null}) → dynamic;
 }
 class B extends self::A {
   synthetic constructor •() → self::B
     ;
-  method foo({core::int x}) → dynamic
+  method foo({core::int x = null}) → dynamic
     ;
 }
 class C extends self::A {
diff --git a/pkg/front_end/testcases/nnbd/shorting_null_check.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/shorting_null_check.dart.weak.outline.expect
index 02e531b..245c869 100644
--- a/pkg/front_end/testcases/nnbd/shorting_null_check.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/shorting_null_check.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class A extends core::Object {
   field core::int zero;
   field core::int? zeroOrNull;
-  constructor •(core::int zero, [core::int? zeroOrNull]) → self::A
+  constructor •(core::int zero, [core::int? zeroOrNull = null]) → self::A
     ;
 }
 class Foo extends core::Object {
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.outline.expect
index cdeab6f..b48701e 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.outline.expect
@@ -149,7 +149,7 @@
 class Super extends core::Object {
   synthetic constructor •() → in_2::Super
     ;
-  method nullabilityMethod(core::int i, {required core::int j}) → core::int
+  method nullabilityMethod(core::int i, {required core::int j = #C1}) → core::int
     ;
   get nullabilityGetter() → core::int
     ;
@@ -161,13 +161,13 @@
 abstract class SuperExtra extends core::Object {
   synthetic constructor •() → in_2::SuperExtra
     ;
-  method optionalArgumentsMethod(core::int i, [core::int? j]) → core::int
+  method optionalArgumentsMethod(core::int i, [core::int? j = #C1]) → core::int
     ;
 }
 abstract class SuperQ extends core::Object {
   synthetic constructor •() → in_2::SuperQ
     ;
-  method nullabilityMethod(core::int? i, {core::int? j}) → core::int?
+  method nullabilityMethod(core::int? i, {core::int? j = #C1}) → core::int?
     ;
   get nullabilityGetter() → core::int?
     ;
@@ -224,7 +224,7 @@
   const synthetic constructor •() → in_::_LegacyMixedIn&Object&Super*
     : super core::Object::•()
     ;
-  method /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityMethod(core::int i, {required core::int j}) → core::int
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityMethod(core::int i, {required core::int j = #C1}) → core::int
     ;
   get /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityGetter() → core::int
     ;
@@ -252,7 +252,7 @@
   const synthetic constructor •() → in_::_LegacyMixedInQ&Object&SuperQ*
     : super core::Object::•()
     ;
-  method /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityMethod(core::int? i, {core::int? j}) → core::int?
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityMethod(core::int? i, {core::int? j = #C1}) → core::int?
     ;
   get /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityGetter() → core::int?
     ;
@@ -276,3 +276,7 @@
     ;
   abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
 }
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.modular.expect
index 1f01c40..b620e23 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.modular.expect
@@ -221,9 +221,9 @@
   synthetic constructor •() → in_::LegacyClass*
     : super in_2::Super::•()
     ;
-  abstract member-signature method nullabilityMethod(core::int* i, {core::int* j}) → core::int*; -> in_2::Super::nullabilityMethod
+  abstract member-signature method nullabilityMethod(core::int* i, {core::int* j = #C1}) → core::int*; -> in_2::Super::nullabilityMethod
   abstract member-signature get nullabilityGetter() → core::int*; -> in_2::Super::nullabilityGetter
-  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -240,9 +240,9 @@
   synthetic constructor •() → in_::LegacyClassQ*
     : super in_2::SuperQ::•()
     ;
-  abstract member-signature method nullabilityMethod(core::int* i, {core::int* j}) → core::int*; -> in_2::SuperQ::nullabilityMethod
+  abstract member-signature method nullabilityMethod(core::int* i, {core::int* j = #C1}) → core::int*; -> in_2::SuperQ::nullabilityMethod
   abstract member-signature get nullabilityGetter() → core::int*; -> in_2::SuperQ::nullabilityGetter
-  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -259,7 +259,7 @@
   const synthetic constructor •() → in_::_LegacyMixedIn&Object&Super*
     : super core::Object::•()
     ;
-  mixin-super-stub method nullabilityMethod(core::int* i, {core::int* j}) → core::int*
+  mixin-super-stub method nullabilityMethod(core::int* i, {core::int* j = #C1}) → core::int*
     return super.{in_2::Super::nullabilityMethod}(i, j: j);
   mixin-super-stub get nullabilityGetter() → core::int*
     return super.{in_2::Super::nullabilityGetter};
@@ -282,13 +282,13 @@
   synthetic constructor •() → in_::LegacyMixedIn*
     : super in_::_LegacyMixedIn&Object&Super::•()
     ;
-  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
 }
 abstract class _LegacyMixedInQ&Object&SuperQ = core::Object with in_2::SuperQ /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → in_::_LegacyMixedInQ&Object&SuperQ*
     : super core::Object::•()
     ;
-  mixin-super-stub method nullabilityMethod(core::int* i, {core::int* j}) → core::int*
+  mixin-super-stub method nullabilityMethod(core::int* i, {core::int* j = #C1}) → core::int*
     return super.{in_2::SuperQ::nullabilityMethod}(i, j: j);
   mixin-super-stub get nullabilityGetter() → core::int*
     return super.{in_2::SuperQ::nullabilityGetter};
@@ -311,5 +311,9 @@
   synthetic constructor •() → in_::LegacyMixedInQ*
     : super in_::_LegacyMixedInQ&Object&SuperQ::•()
     ;
-  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+}
+
+constants  {
+  #C1 = null
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.outline.expect
index 386b09f..fbbade0 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.outline.expect
@@ -230,7 +230,7 @@
 class Super extends core::Object {
   synthetic constructor •() → in_2::Super
     ;
-  method nullabilityMethod(core::int i, {required core::int j}) → core::int
+  method nullabilityMethod(core::int i, {required core::int j = #C1}) → core::int
     ;
   get nullabilityGetter() → core::int
     ;
@@ -242,13 +242,13 @@
 abstract class SuperExtra extends core::Object {
   synthetic constructor •() → in_2::SuperExtra
     ;
-  method optionalArgumentsMethod(core::int i, [core::int? j]) → core::int
+  method optionalArgumentsMethod(core::int i, [core::int? j = #C1]) → core::int
     ;
 }
 abstract class SuperQ extends core::Object {
   synthetic constructor •() → in_2::SuperQ
     ;
-  method nullabilityMethod(core::int? i, {core::int? j}) → core::int?
+  method nullabilityMethod(core::int? i, {core::int? j = #C1}) → core::int?
     ;
   get nullabilityGetter() → core::int?
     ;
@@ -257,3 +257,7 @@
   method optionalArgumentsMethod(core::int? i) → core::int?
     ;
 }
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.outline.expect
index 7e98c01..2ea0668 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.outline.expect
@@ -144,7 +144,7 @@
 abstract class SuperExtra extends core::Object {
   synthetic constructor •() → in_2::SuperExtra
     ;
-  method optionalArgumentsMethod(core::int i, [core::int? j]) → core::int
+  method optionalArgumentsMethod(core::int i, [core::int? j = null]) → core::int
     ;
 }
 abstract class SuperQ extends core::Object {
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.outline.expect
index 8ed2bcc..a036c93 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.outline.expect
@@ -46,7 +46,7 @@
   final field iss::Iterable::E% element;
   constructor •(iss::Iterable::E% element) → iss::Iterable<iss::Iterable::E%>
     ;
-  method singleWhere((iss::Iterable::E%) → core::bool test, {covariant-by-class () →? iss::Iterable::E% orElse}) → iss::Iterable::E%
+  method singleWhere((iss::Iterable::E%) → core::bool test, {covariant-by-class () →? iss::Iterable::E% orElse = null}) → iss::Iterable::E%
     ;
 }
 static method foo(() → iss::Map<core::String, core::String> f) → void
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.modular.expect
index 35340a8..dbabb6a 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.modular.expect
@@ -14,7 +14,7 @@
   synthetic constructor •() → self::_TestSchedulerBinding&BindingBase&SchedulerBinding*
     : super fou::BindingBase::•()
     ;
-  abstract member-signature method registerSignalServiceExtension({core::String* name, () →* asy::Future<Null>* callback}) → void; -> fou::BindingBase::registerSignalServiceExtension
+  abstract member-signature method registerSignalServiceExtension({core::String* name = #C1, () →* asy::Future<Null>* callback = #C1}) → void; -> fou::BindingBase::registerSignalServiceExtension
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -37,3 +37,7 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.outline.expect
index 135d07e..6bee12f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.outline.expect
@@ -54,7 +54,7 @@
 abstract class BindingBase extends core::Object {
   synthetic constructor •() → fou::BindingBase
     ;
-  method registerSignalServiceExtension({required core::String name, required () → asy::Future<Null> callback}) → void
+  method registerSignalServiceExtension({required core::String name = #C1, required () → asy::Future<Null> callback = #C1}) → void
     ;
 }
 
@@ -133,3 +133,8 @@
 additionalExports = (ser::ServicesBinding)
 
 export "org-dartlang-testcase:///services_binding_lib.dart";
+
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.modular.expect
index e31e167..25f2899 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.modular.expect
@@ -110,10 +110,11 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method method2([covariant-by-declaration core::String* a, core::num* b]) → dynamic;
+  abstract forwarding-stub method method2([covariant-by-declaration core::String* a = #C2, core::num* b = #C2]) → dynamic;
 }
 static method main() → dynamic {}
 
 constants  {
   #C1 = "hello"
+  #C2 = null
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.outline.expect
index 794d06d..7f95ece 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.outline.expect
@@ -147,7 +147,7 @@
 abstract class C2 extends core::Object {
   synthetic constructor •() → mai::C2
     ;
-  abstract method method2([core::String a]) → dynamic;
+  abstract method method2([core::String a = #C2]) → dynamic;
 }
 abstract class C3 extends core::Object implements mai::C1, mai::C2 {
   synthetic constructor •() → mai::C3
@@ -157,7 +157,7 @@
 abstract class C4 extends core::Object {
   synthetic constructor •() → mai::C4
     ;
-  abstract method method2([covariant-by-declaration core::String a]) → dynamic;
+  abstract method method2([covariant-by-declaration core::String a = #C2]) → dynamic;
 }
 abstract class C5 extends mai::C3 implements mai::C4 {
   synthetic constructor •() → mai::C5
@@ -167,9 +167,10 @@
 abstract class C7 extends core::Object {
   synthetic constructor •() → mai::C7
     ;
-  abstract method method2([core::String a, core::num b]) → dynamic;
+  abstract method method2([core::String a = #C2, core::num b = #C2]) → dynamic;
 }
 
 constants  {
   #C1 = "hello"
+  #C2 = null
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.outline.expect
index 4e1eec5..e07fd30 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.outline.expect
@@ -147,7 +147,7 @@
 abstract class C2 extends core::Object {
   synthetic constructor •() → mai::C2
     ;
-  abstract method method2([core::String a]) → dynamic;
+  abstract method method2([core::String a = null]) → dynamic;
 }
 abstract class C3 extends core::Object implements mai::C1, mai::C2 {
   synthetic constructor •() → mai::C3
@@ -157,7 +157,7 @@
 abstract class C4 extends core::Object {
   synthetic constructor •() → mai::C4
     ;
-  abstract method method2([covariant-by-declaration core::String a]) → dynamic;
+  abstract method method2([covariant-by-declaration core::String a = null]) → dynamic;
 }
 abstract class C5 extends mai::C3 implements mai::C4 {
   synthetic constructor •() → mai::C5
@@ -167,5 +167,5 @@
 abstract class C7 extends core::Object {
   synthetic constructor •() → mai::C7
     ;
-  abstract method method2([core::String a, core::num b]) → dynamic;
+  abstract method method2([core::String a = null, core::num b = null]) → dynamic;
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_in.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_in.dart.weak.outline.expect
index e706863..09e5ea1 100644
--- a/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_in.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_in.dart.weak.outline.expect
@@ -18,17 +18,17 @@
     ;
   method method6a(core::int* a, core::int* b) → core::int*
     ;
-  method method6b(core::int* a, [core::int* b]) → core::int*
+  method method6b(core::int* a, [core::int* b = null]) → core::int*
     ;
-  method method6c([core::int* a, core::int* b]) → core::int*
+  method method6c([core::int* a = null, core::int* b = null]) → core::int*
     ;
   method method8a(core::int* a, {core::int* b = 0}) → core::int*
     ;
-  method method8b({core::int* a, core::int* b = 0}) → core::int*
+  method method8b({core::int* a = null, core::int* b = 0}) → core::int*
     ;
-  method method10a(core::int* a, {core::int* b}) → core::int*
+  method method10a(core::int* a, {core::int* b = null}) → core::int*
     ;
-  method method10b({core::int* a, core::int* b}) → core::int*
+  method method10b({core::int* a = null, core::int* b = null}) → core::int*
     ;
   get getter3() → core::int*
     ;
@@ -101,19 +101,19 @@
   abstract method method3() → core::int;
   abstract method method4() → core::int?;
   abstract method method5a(core::int a, core::int? b) → core::int;
-  abstract method method5b(core::int a, [core::int? b]) → core::int;
-  abstract method method5c([core::int a = 0, core::int? b]) → core::int;
+  abstract method method5b(core::int a, [core::int? b = null]) → core::int;
+  abstract method method5c([core::int a = 0, core::int? b = null]) → core::int;
   abstract method method6a(core::int? a, core::int b) → core::int?;
   abstract method method6b(core::int? a, [core::int b = 0]) → core::int?;
-  abstract method method6c([core::int? a, core::int b = 0]) → core::int?;
-  abstract method method7a(core::int a, {core::int? b}) → core::int;
-  abstract method method7b({core::int a = 0, core::int? b}) → core::int;
+  abstract method method6c([core::int? a = null, core::int b = 0]) → core::int?;
+  abstract method method7a(core::int a, {core::int? b = null}) → core::int;
+  abstract method method7b({core::int a = 0, core::int? b = null}) → core::int;
   abstract method method8a(core::int? a, {core::int b = 0}) → core::int?;
-  abstract method method8b({core::int? a, core::int b = 0}) → core::int?;
-  abstract method method9a(core::int a, {required core::int? b}) → core::int;
-  abstract method method9b({required core::int a, required core::int? b}) → core::int;
-  abstract method method10a(core::int? a, {required core::int b}) → core::int?;
-  abstract method method10b({required core::int? a, required core::int b}) → core::int?;
+  abstract method method8b({core::int? a = null, core::int b = 0}) → core::int?;
+  abstract method method9a(core::int a, {required core::int? b = null}) → core::int;
+  abstract method method9b({required core::int a = null, required core::int? b = null}) → core::int;
+  abstract method method10a(core::int? a, {required core::int b = null}) → core::int?;
+  abstract method method10b({required core::int? a = null, required core::int b = null}) → core::int?;
   abstract get getter1() → core::int?;
   abstract get getter2() → core::int;
   abstract get getter3() → core::int;
@@ -152,17 +152,17 @@
     ;
   method method5a(core::int a, core::int? b) → core::int
     ;
-  method method5b(core::int a, [core::int? b]) → core::int
+  method method5b(core::int a, [core::int? b = null]) → core::int
     ;
-  method method5c([core::int a = 0, core::int? b]) → core::int
+  method method5c([core::int a = 0, core::int? b = null]) → core::int
     ;
-  method method7a(core::int a, {core::int? b}) → core::int
+  method method7a(core::int a, {core::int? b = null}) → core::int
     ;
-  method method7b({core::int a = 0, core::int? b}) → core::int
+  method method7b({core::int a = 0, core::int? b = null}) → core::int
     ;
-  method method9a(core::int a, {required core::int? b}) → core::int
+  method method9a(core::int a, {required core::int? b = null}) → core::int
     ;
-  method method9b({required core::int a, required core::int? b}) → core::int
+  method method9b({required core::int a = null, required core::int? b = null}) → core::int
     ;
   get getter1() → core::int
     ;
diff --git a/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_out.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_out.dart.weak.outline.expect
index 01c1893..9ef4cfb 100644
--- a/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_out.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_out.dart.weak.outline.expect
@@ -15,17 +15,17 @@
   abstract method method1() → core::int;
   abstract method method2() → core::int?;
   abstract method method3a(core::int a, core::int b) → core::int;
-  abstract method method3b(core::int a, [core::int b]) → core::int;
-  abstract method method3c([core::int a, core::int b]) → core::int;
+  abstract method method3b(core::int a, [core::int b = null]) → core::int;
+  abstract method method3c([core::int a = null, core::int b = null]) → core::int;
   abstract method method4a(core::int? a, core::int? b) → core::int?;
-  abstract method method4b(core::int? a, [core::int? b]) → core::int?;
-  abstract method method4c([core::int? a, core::int? b]) → core::int?;
+  abstract method method4b(core::int? a, [core::int? b = null]) → core::int?;
+  abstract method method4c([core::int? a = null, core::int? b = null]) → core::int?;
   abstract method method5a(core::int a, {core::int b = 0}) → core::int;
   abstract method method5b({core::int a = 0, core::int b = 0}) → core::int;
-  abstract method method5c({required core::int a, required core::int b}) → core::int;
-  abstract method method6a(core::int? a, {core::int? b}) → core::int?;
-  abstract method method6b({core::int? a, core::int? b}) → core::int?;
-  abstract method method6c({required core::int? a, required core::int? b}) → core::int?;
+  abstract method method5c({required core::int a = null, required core::int b = null}) → core::int;
+  abstract method method6a(core::int? a, {core::int? b = null}) → core::int?;
+  abstract method method6b({core::int? a = null, core::int? b = null}) → core::int?;
+  abstract method method6c({required core::int? a = null, required core::int? b = null}) → core::int?;
   abstract get getter1() → core::int;
   abstract get getter2() → core::int?;
   abstract set setter1(core::int value) → void;
@@ -107,21 +107,21 @@
     ;
   method method4a(core::int? a, core::int? b) → core::int?
     ;
-  method method4b(core::int? a, [core::int? b]) → core::int?
+  method method4b(core::int? a, [core::int? b = null]) → core::int?
     ;
-  method method4c([core::int? a, core::int? b]) → core::int?
+  method method4c([core::int? a = null, core::int? b = null]) → core::int?
     ;
   method method5a(core::int a, {core::int b = 0}) → core::int
     ;
   method method5b({core::int a = 0, core::int b = 0}) → core::int
     ;
-  method method5c({required core::int a, required core::int b}) → core::int
+  method method5c({required core::int a = null, required core::int b = null}) → core::int
     ;
-  method method6a(core::int? a, {core::int? b}) → core::int?
+  method method6a(core::int? a, {core::int? b = null}) → core::int?
     ;
-  method method6b({core::int? a, core::int? b}) → core::int?
+  method method6b({core::int? a = null, core::int? b = null}) → core::int?
     ;
-  method method6c({required core::int? a, required core::int? b}) → core::int?
+  method method6c({required core::int? a = null, required core::int? b = null}) → core::int?
     ;
   get getter1() → core::int
     ;
@@ -189,27 +189,27 @@
     ;
   method method3a(core::int* a, core::int* b) → core::int*
     ;
-  method method3b(core::int* a, [core::int* b]) → core::int*
+  method method3b(core::int* a, [core::int* b = null]) → core::int*
     ;
-  method method3c([core::int* a, core::int* b]) → core::int*
+  method method3c([core::int* a = null, core::int* b = null]) → core::int*
     ;
   method method4a(core::int* a, core::int* b) → core::int*
     ;
-  method method4b(core::int* a, [core::int* b]) → core::int*
+  method method4b(core::int* a, [core::int* b = null]) → core::int*
     ;
-  method method4c([core::int* a, core::int* b]) → core::int*
+  method method4c([core::int* a = null, core::int* b = null]) → core::int*
     ;
-  method method5a(core::int* a, {core::int* b}) → core::int*
+  method method5a(core::int* a, {core::int* b = null}) → core::int*
     ;
-  method method5b({core::int* a, core::int* b}) → core::int*
+  method method5b({core::int* a = null, core::int* b = null}) → core::int*
     ;
-  method method5c({core::int* a, core::int* b}) → core::int*
+  method method5c({core::int* a = null, core::int* b = null}) → core::int*
     ;
-  method method6a(core::int* a, {core::int* b}) → core::int*
+  method method6a(core::int* a, {core::int* b = null}) → core::int*
     ;
-  method method6b({core::int* a, core::int* b}) → core::int*
+  method method6b({core::int* a = null, core::int* b = null}) → core::int*
     ;
-  method method6c({core::int* a, core::int* b}) → core::int*
+  method method6c({core::int* a = null, core::int* b = null}) → core::int*
     ;
   get getter1() → core::int*
     ;
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.modular.expect
index f168a4e..e52566f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.modular.expect
@@ -11,7 +11,7 @@
   synthetic constructor •() → self::_RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin
     : super mai::RenderProxyBox::•()
     ;
-  mixin-super-stub method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position}) → core::bool
+  mixin-super-stub method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position = #C1}) → core::bool
     return super.{mai::RenderProxyBoxMixin::hitTestChildren}(result, position: position);
 }
 abstract class _RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin&RenderAnimatedOpacityMixin = self::_RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin with self::RenderAnimatedOpacityMixin<mai::RenderBox> /*isAnonymousMixin*/  {
@@ -27,3 +27,7 @@
 static method main() → dynamic {
   new self::RenderAnimatedOpacity::•();
 }
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.outline.expect
index c282428..1d90524 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.outline.expect
@@ -64,9 +64,9 @@
 abstract class RenderBox extends mai::RenderObject {
   synthetic constructor •() → mai::RenderBox
     ;
-  method hitTest(mai::BoxHitTestResult result, {required mai::Offset position}) → core::bool
+  method hitTest(mai::BoxHitTestResult result, {required mai::Offset position = #C1}) → core::bool
     ;
-  method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position}) → core::bool
+  method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position = #C1}) → core::bool
     ;
 }
 abstract class RenderObjectWithChildMixin<ChildType extends mai::RenderObject> extends mai::RenderObject /*isMixinDeclaration*/  {
@@ -79,8 +79,8 @@
     ;
 }
 abstract class RenderProxyBoxMixin<T extends mai::RenderBox> extends mai::_RenderProxyBoxMixin&RenderBox&RenderObjectWithChildMixin<mai::RenderProxyBoxMixin::T> /*isMixinDeclaration*/  {
-  @#C1
-  method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position}) → core::bool
+  @#C2
+  method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position = #C1}) → core::bool
     ;
 }
 abstract class _RenderProxyBox&RenderBox&RenderObjectWithChildMixin extends mai::RenderBox implements mai::RenderObjectWithChildMixin<mai::RenderBox> /*isAnonymousMixin,isEliminatedMixin*/  {
@@ -95,8 +95,8 @@
   synthetic constructor •() → mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin
     : super mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin::•()
     ;
-  @#C1
-  method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position}) → core::bool
+  @#C2
+  method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position = #C1}) → core::bool
     ;
 }
 class RenderProxyBox extends mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin {
@@ -105,5 +105,6 @@
 }
 
 constants  {
-  #C1 = core::_Override {}
+  #C1 = null
+  #C2 = core::_Override {}
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.outline.expect
index d463ddf..a0aeef1 100644
--- a/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.outline.expect
@@ -48,7 +48,7 @@
 abstract class C2 extends core::Object {
   synthetic constructor •() → self::C2*
     ;
-  abstract method method(core::int* i, {dynamic optional}) → core::int*;
+  abstract method method(core::int* i, {dynamic optional = null}) → core::int*;
   abstract method genericMethod1<T extends core::Object* = dynamic>(self::C2::genericMethod1::T* t) → self::C2::genericMethod1::T*;
   abstract method genericMethod2<T extends core::Object*>(self::C2::genericMethod2::T* t) → self::C2::genericMethod2::T*;
   abstract method genericMethod3<T extends core::Object*>(self::C2::genericMethod3::T* t) → self::C2::genericMethod3::T*;
@@ -93,7 +93,7 @@
 abstract class C1 extends core::Object {
   synthetic constructor •() → nsm::C1
     ;
-  abstract method method(core::int? i, {dynamic optional}) → core::int;
+  abstract method method(core::int? i, {dynamic optional = null}) → core::int;
   abstract method genericMethod1<T extends core::Object? = dynamic>(nsm::C1::genericMethod1::T% t) → nsm::C1::genericMethod1::T%;
   abstract method genericMethod2<T extends core::Object?>(nsm::C1::genericMethod2::T% t) → nsm::C1::genericMethod2::T%;
   abstract method genericMethod3<T extends core::Object>(nsm::C1::genericMethod3::T t) → nsm::C1::genericMethod3::T;
diff --git a/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.outline.expect
index 0817c84..327d98f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.outline.expect
@@ -25,7 +25,7 @@
 class B extends core::Object {
   synthetic constructor •() → self::B
     ;
-  method test_default({core::int? i}) → void
+  method test_default({core::int? i = null}) → void
     ;
   method test_nondefault({core::int? i = 1}) → void
     ;
@@ -33,11 +33,11 @@
 class A extends self::B implements req::C {
   synthetic constructor •() → self::A
     ;
-  method test_default({required core::int? i}) → void
+  method test_default({required core::int? i = null}) → void
     ;
-  method test_nondefault({required core::int? i}) → void
+  method test_nondefault({required core::int? i = null}) → void
     ;
-  method test_legacy({required core::int? i}) → void
+  method test_legacy({required core::int? i = null}) → void
     ;
   abstract member-signature operator /*isLegacy*/ ==(dynamic other) → core::bool*; -> core::Object::==
 }
@@ -51,7 +51,7 @@
 class C extends core::Object {
   synthetic constructor •() → req::C*
     ;
-  method test_legacy({core::int* i}) → void
+  method test_legacy({core::int* i = null}) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.outline.expect
index 1e8de64..a448ffc 100644
--- a/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.outline.expect
@@ -8,7 +8,7 @@
 class Super extends core::Object {
   synthetic constructor •() → self::Super
     ;
-  method method({required covariant-by-declaration core::int named}) → void
+  method method({required covariant-by-declaration core::int named = null}) → void
     ;
 }
 abstract class _Class&Super&Mixin = self::Super with req::Mixin /*isAnonymousMixin*/  {
@@ -26,7 +26,7 @@
 class SubClass extends self::Class {
   synthetic constructor •() → self::SubClass
     ;
-  method method({required covariant-by-declaration core::int named}) → void
+  method method({required covariant-by-declaration core::int named = null}) → void
     ;
 }
 static method main() → dynamic
@@ -37,7 +37,7 @@
 import "dart:core" as core;
 
 abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
-  method method({core::int* named}) → void
+  method method({core::int* named = null}) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.outline.expect
index d7affcd..344c08e 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.outline.expect
@@ -43,7 +43,7 @@
 class MockCat3 extends self::MockCat2 implements self::Cat {
   synthetic constructor •() → self::MockCat3*
     ;
-  no-such-method-forwarder method eatFood(core::String* food, {core::double* amount}) → core::bool*
+  no-such-method-forwarder method eatFood(core::String* food, {core::double* amount = null}) → core::bool*
     return this.{self::MockCat2::noSuchMethod}(new core::_InvocationMirror::_withType(#eatFood, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[food]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#amount: amount}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
 }
 class MockCat4 extends self::MockCat2 implements self::HungryCat {
@@ -55,7 +55,7 @@
 abstract class HungryCat extends core::Object {
   synthetic constructor •() → self::HungryCat*
     ;
-  abstract method eatFood(core::String* food, {core::double* amount, core::double* yetAnother}) → core::bool*;
+  abstract method eatFood(core::String* food, {core::double* amount = null, core::double* yetAnother = null}) → core::bool*;
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.outline.expect
index 595f2f9..8be6aa2 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.outline.expect
@@ -10,7 +10,7 @@
     ;
   abstract set foo(core::int* value) → void;
   abstract get bar() → core::int*;
-  abstract method baz(core::int* x, {core::String* y, core::double* z}) → void;
+  abstract method baz(core::int* x, {core::String* y = null, core::double* z = null}) → void;
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_32660.dart.weak.outline.expect
index d282494..d6cfde1 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.weak.outline.expect
@@ -44,7 +44,7 @@
 class B extends core::Object {
   synthetic constructor •() → self::B*
     ;
-  method foo(core::int* x, {core::int* y}) → dynamic
+  method foo(core::int* x, {core::int* y = null}) → dynamic
     ;
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -83,7 +83,7 @@
 class E extends self::D {
   synthetic constructor •() → self::E*
     ;
-  abstract method foo(core::int* x, {core::int* y}) → dynamic;
+  abstract method foo(core::int* x, {core::int* y = null}) → dynamic;
   method noSuchMethod(core::Invocation* i) → dynamic
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.outline.expect
index d5ecfdf..f427dbb 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.outline.expect
@@ -23,7 +23,7 @@
     ;
   method f1(covariant-by-class core::int* x) → void
     ;
-  method f2(covariant-by-class core::int* x, [covariant-by-class self::C::U* y]) → void
+  method f2(covariant-by-class core::int* x, [covariant-by-class self::C::U* y = null]) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -41,7 +41,7 @@
     ;
   method f1(covariant-by-class core::int* x) → void
     ;
-  method f2(covariant-by-class core::int* x, [covariant-by-class self::D::U* y]) → void
+  method f2(covariant-by-class core::int* x, [covariant-by-class self::D::U* y = null]) → void
     ;
 }
 static method g1(self::C<core::num*>* c) → void
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.outline.expect
index 2528b84..232826f 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.outline.expect
@@ -26,8 +26,8 @@
 abstract class I<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::I<self::I::T*>*
     ;
-  abstract method f([covariant-by-class self::I::T* x]) → void;
-  abstract method g({covariant-by-class self::I::T* x}) → void;
+  abstract method f([covariant-by-class self::I::T* x = null]) → void;
+  abstract method g({covariant-by-class self::I::T* x = null}) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.outline.expect
index 06e1b40..3139116 100644
--- a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.outline.expect
@@ -7,7 +7,7 @@
     ;
   method f(covariant-by-class self::B::T* x) → void
     ;
-  method g({covariant-by-class self::B::T* x}) → void
+  method g({covariant-by-class self::B::T* x = null}) → void
     ;
   method h<covariant-by-class U extends self::B::T*>() → void
     ;
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/default_values.dart.weak.outline.expect
index fd3f672..e490058 100644
--- a/pkg/front_end/testcases/super_parameters/default_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart.weak.outline.expect
@@ -67,7 +67,7 @@
     ;
 }
 class C5 extends self::S5 {
-  constructor •([core::int x]) → self::C5
+  constructor •([core::int x = null]) → self::C5
     ;
 }
 class S6 extends core::Object {
@@ -77,11 +77,11 @@
 }
 class C6 extends self::S6 {
   field core::int? b;
-  constructor •([core::int? x]) → self::C6
+  constructor •([core::int? x = null]) → self::C6
     ;
 }
 class D6 extends self::C6 {
-  constructor •([core::int x]) → self::D6
+  constructor •([core::int x = null]) → self::D6
     ;
 }
 class S7 extends core::Object {
@@ -134,7 +134,7 @@
     ;
 }
 class Bp extends self::Ap {
-  constructor •([core::int x]) → self::Bp
+  constructor •([core::int x = null]) → self::Bp
     ;
   constructor req(core::int x) → self::Bp
     ;
@@ -144,9 +144,9 @@
     ;
 }
 class Bn extends self::An {
-  constructor •({core::int x}) → self::Bn
+  constructor •({core::int x = null}) → self::Bn
     ;
-  constructor req({required core::int x}) → self::Bn
+  constructor req({required core::int x = null}) → self::Bn
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/super_parameters/issue48142.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/issue48142.dart.weak.outline.expect
index 00d1860..c9f3c12 100644
--- a/pkg/front_end/testcases/super_parameters/issue48142.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/super_parameters/issue48142.dart.weak.outline.expect
@@ -20,15 +20,15 @@
     ;
 }
 class C21 extends self::S2 {
-  constructor •({dynamic foo, core::String one = "1", dynamic bar, dynamic baz, core::int three = 3, core::num five = 3.14}) → self::C21
+  constructor •({dynamic foo = null, core::String one = "1", dynamic bar = null, dynamic baz = null, core::int three = 3, core::num five = 3.14}) → self::C21
     ;
 }
 class C22 extends self::S2 {
-  constructor •({dynamic foo, core::List<core::String> six = const <core::String>["six"], dynamic bar, dynamic baz, core::double four = 4.0, core::bool two = false}) → self::C22
+  constructor •({dynamic foo = null, core::List<core::String> six = const <core::String>["six"], dynamic bar = null, dynamic baz = null, core::double four = 4.0, core::bool two = false}) → self::C22
     ;
 }
 class C23 extends self::S2 {
-  constructor •({core::int three = 3, dynamic foo, core::String one = "1", core::double four = 4.0, dynamic bar, core::bool two = false, dynamic baz}) → self::C23
+  constructor •({core::int three = 3, dynamic foo = null, core::String one = "1", core::double four = 4.0, dynamic bar = null, core::bool two = false, dynamic baz = null}) → self::C23
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/super_parameters/issue48642.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/issue48642.dart.weak.outline.expect
index 0c84a13..e395e95 100644
--- a/pkg/front_end/testcases/super_parameters/issue48642.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/super_parameters/issue48642.dart.weak.outline.expect
@@ -51,17 +51,17 @@
     ;
 }
 class A1 extends core::Object {
-  constructor •({dynamic x, dynamic y}) → self::A1
+  constructor •({dynamic x = null, dynamic y = null}) → self::A1
     ;
 }
 class B1 extends self::A1 {
-  constructor foo({dynamic x}) → self::B1
+  constructor foo({dynamic x = null}) → self::B1
     ;
-  constructor bar({dynamic x}) → self::B1
+  constructor bar({dynamic x = null}) → self::B1
     ;
 }
 class A2 extends core::Object {
-  constructor •(dynamic x, {dynamic y}) → self::A2
+  constructor •(dynamic x, {dynamic y = null}) → self::A2
     ;
 }
 class B2 extends self::A2 {
@@ -71,28 +71,28 @@
     ;
 }
 class A3 extends core::Object {
-  constructor •(dynamic x, {dynamic y}) → self::A3
+  constructor •(dynamic x, {dynamic y = null}) → self::A3
     ;
 }
 class B3 extends self::A3 {
-  constructor foo({dynamic y}) → self::B3
+  constructor foo({dynamic y = null}) → self::B3
     ;
-  constructor bar({dynamic y}) → self::B3
+  constructor bar({dynamic y = null}) → self::B3
     ;
 }
 class A4 extends core::Object /*hasConstConstructor*/  {
-  const constructor •({dynamic x, dynamic y}) → self::A4
+  const constructor •({dynamic x = null, dynamic y = null}) → self::A4
     : super core::Object::•()
     ;
 }
 class B4 extends self::A4 {
-  constructor foo({dynamic x}) → self::B4
+  constructor foo({dynamic x = null}) → self::B4
     ;
-  constructor bar({dynamic x}) → self::B4
+  constructor bar({dynamic x = null}) → self::B4
     ;
 }
 class A5 extends core::Object /*hasConstConstructor*/  {
-  const constructor •(dynamic x, {dynamic y}) → self::A5
+  const constructor •(dynamic x, {dynamic y = null}) → self::A5
     : super core::Object::•()
     ;
 }
@@ -103,26 +103,26 @@
     ;
 }
 class A6 extends core::Object /*hasConstConstructor*/  {
-  const constructor •(dynamic x, {dynamic y}) → self::A6
+  const constructor •(dynamic x, {dynamic y = null}) → self::A6
     : super core::Object::•()
     ;
 }
 class B6 extends self::A6 {
-  constructor foo({dynamic y}) → self::B6
+  constructor foo({dynamic y = null}) → self::B6
     ;
-  constructor bar({dynamic y}) → self::B6
+  constructor bar({dynamic y = null}) → self::B6
     ;
 }
 class A7 extends core::Object /*hasConstConstructor*/  {
-  const constructor •({dynamic x, dynamic y}) → self::A7
+  const constructor •({dynamic x = null, dynamic y = null}) → self::A7
     : super core::Object::•()
     ;
 }
 class B7 extends self::A7 /*hasConstConstructor*/  {
-  const constructor foo({dynamic x}) → self::B7
+  const constructor foo({dynamic x = null}) → self::B7
     : super self::A7::•(y: new self::Test::foo(), x: x)
     ;
-  const constructor bar({dynamic x}) → self::B7
+  const constructor bar({dynamic x = null}) → self::B7
     : super self::A7::•(y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:70:42: Error: Cannot invoke a non-'const' factory where a const expression is expected.
 Try using a constructor or factory that is 'const'.
   const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
@@ -130,7 +130,7 @@
     ;
 }
 class A8 extends core::Object /*hasConstConstructor*/  {
-  const constructor •(dynamic x, {dynamic y}) → self::A8
+  const constructor •(dynamic x, {dynamic y = null}) → self::A8
     : super core::Object::•()
     ;
 }
@@ -146,15 +146,15 @@
     ;
 }
 class A9 extends core::Object /*hasConstConstructor*/  {
-  const constructor •(dynamic x, {dynamic y}) → self::A9
+  const constructor •(dynamic x, {dynamic y = null}) → self::A9
     : super core::Object::•()
     ;
 }
 class B9 extends self::A9 /*hasConstConstructor*/  {
-  const constructor foo({dynamic y}) → self::B9
+  const constructor foo({dynamic y = null}) → self::B9
     : super self::A9::•(new self::Test::foo(), y: y)
     ;
-  const constructor bar({dynamic y}) → self::B9
+  const constructor bar({dynamic y = null}) → self::B9
     : super self::A9::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:88:39: Error: Cannot invoke a non-'const' factory where a const expression is expected.
 Try using a constructor or factory that is 'const'.
   const B9.bar({super.y}) : super(new Test.bar()); // Error.
diff --git a/pkg/front_end/testcases/super_parameters/issue48708.dart.strong.expect b/pkg/front_end/testcases/super_parameters/issue48708.dart.strong.expect
index bbbaeed..05ade25 100644
--- a/pkg/front_end/testcases/super_parameters/issue48708.dart.strong.expect
+++ b/pkg/front_end/testcases/super_parameters/issue48708.dart.strong.expect
@@ -19,7 +19,7 @@
     ;
 }
 abstract class _C&B&Mixin = self::B<self::A> with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •({self::A field}) → self::_C&B&Mixin
+  synthetic constructor •({self::A field = #C1}) → self::_C&B&Mixin
     : super self::B::•(field: field)
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/issue48708.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/issue48708.dart.strong.transformed.expect
index 1acdeb6..f71d862 100644
--- a/pkg/front_end/testcases/super_parameters/issue48708.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/super_parameters/issue48708.dart.strong.transformed.expect
@@ -19,7 +19,7 @@
     ;
 }
 abstract class _C&B&Mixin extends self::B<self::A> implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •({self::A field}) → self::_C&B&Mixin
+  synthetic constructor •({self::A field = #C1}) → self::_C&B&Mixin
     : super self::B::•(field: field)
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.expect b/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.expect
index bbbaeed..05ade25 100644
--- a/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.expect
+++ b/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.expect
@@ -19,7 +19,7 @@
     ;
 }
 abstract class _C&B&Mixin = self::B<self::A> with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •({self::A field}) → self::_C&B&Mixin
+  synthetic constructor •({self::A field = #C1}) → self::_C&B&Mixin
     : super self::B::•(field: field)
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.modular.expect
index bbbaeed..05ade25 100644
--- a/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.modular.expect
@@ -19,7 +19,7 @@
     ;
 }
 abstract class _C&B&Mixin = self::B<self::A> with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •({self::A field}) → self::_C&B&Mixin
+  synthetic constructor •({self::A field = #C1}) → self::_C&B&Mixin
     : super self::B::•(field: field)
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.outline.expect
index 4a28ead1..3450f1e 100644
--- a/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.outline.expect
@@ -12,16 +12,16 @@
 }
 abstract class B<D extends core::Object? = dynamic> extends core::Object {
   final field self::B::D% field;
-  constructor •({required self::B::D% field}) → self::B<self::B::D%>
+  constructor •({required self::B::D% field = null}) → self::B<self::B::D%>
     ;
 }
 abstract class _C&B&Mixin = self::B<self::A> with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •({self::A field}) → self::_C&B&Mixin
+  synthetic constructor •({self::A field = null}) → self::_C&B&Mixin
     : super self::B::•(field: field)
     ;
 }
 class C extends self::_C&B&Mixin {
-  constructor •({required self::A field}) → self::C
+  constructor •({required self::A field = null}) → self::C
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.transformed.expect
index 1acdeb6..f71d862 100644
--- a/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.transformed.expect
@@ -19,7 +19,7 @@
     ;
 }
 abstract class _C&B&Mixin extends self::B<self::A> implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •({self::A field}) → self::_C&B&Mixin
+  synthetic constructor •({self::A field = #C1}) → self::_C&B&Mixin
     : super self::B::•(field: field)
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/no_coercions.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/no_coercions.dart.weak.outline.expect
index 7a8c89a..2882ba7 100644
--- a/pkg/front_end/testcases/super_parameters/no_coercions.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/super_parameters/no_coercions.dart.weak.outline.expect
@@ -13,13 +13,13 @@
     ;
 }
 class A2 extends core::Object {
-  constructor •({required core::String x}) → self::A2
+  constructor •({required core::String x = null}) → self::A2
     ;
 }
 class B2 extends self::A2 {
-  constructor one({required dynamic x}) → self::B2
+  constructor one({required dynamic x = null}) → self::B2
     ;
-  constructor two({required dynamic x}) → self::B2
+  constructor two({required dynamic x = null}) → self::B2
     ;
 }
 class A3 extends core::Object {
@@ -33,13 +33,13 @@
     ;
 }
 class A4 extends core::Object {
-  constructor •({required (core::double) → core::num f}) → self::A4
+  constructor •({required (core::double) → core::num f = null}) → self::A4
     ;
 }
 class B4 extends self::A4 {
-  constructor one({required <X extends core::Object? = dynamic>(core::double) → X% f}) → self::B4
+  constructor one({required <X extends core::Object? = dynamic>(core::double) → X% f = null}) → self::B4
     ;
-  constructor two({required <X extends core::Object? = dynamic>(core::double) → X% f}) → self::B4
+  constructor two({required <X extends core::Object? = dynamic>(core::double) → X% f = null}) → self::B4
     ;
 }
 abstract class C5 extends core::Object {
@@ -58,21 +58,21 @@
     ;
 }
 class A6 extends core::Object {
-  constructor •({required (core::int, core::num) → core::String f}) → self::A6
+  constructor •({required (core::int, core::num) → core::String f = null}) → self::A6
     ;
 }
 class B6 extends self::A6 {
-  constructor one({required self::C5 f}) → self::B6
+  constructor one({required self::C5 f = null}) → self::B6
     ;
-  constructor two({required self::C5 f}) → self::B6
+  constructor two({required self::C5 f = null}) → self::B6
     ;
 }
 class A7 extends core::Object {
-  constructor •({required core::int x1, required core::int x2, required (core::Object) → core::bool f1, required (core::Object) → core::bool f2, required (dynamic) → void g1, required (dynamic) → void g2}) → self::A7
+  constructor •({required core::int x1 = null, required core::int x2 = null, required (core::Object) → core::bool f1 = null, required (core::Object) → core::bool f2 = null, required (dynamic) → void g1 = null, required (dynamic) → void g2 = null}) → self::A7
     ;
 }
 class B7 extends self::A7 {
-  constructor •({required dynamic x1, required dynamic x2, required <X extends core::Object? = dynamic>(core::Object) → X% f1, required <X extends core::Object? = dynamic>(core::Object) → X% f2, required <X extends core::Object? = dynamic>(X%) → void g1, required <X extends core::Object? = dynamic>(X%) → void g2}) → self::B7
+  constructor •({required dynamic x1 = null, required dynamic x2 = null, required <X extends core::Object? = dynamic>(core::Object) → X% f1 = null, required <X extends core::Object? = dynamic>(core::Object) → X% f2 = null, required <X extends core::Object? = dynamic>(X%) → void g1 = null, required <X extends core::Object? = dynamic>(X%) → void g2 = null}) → self::B7
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.outline.expect
index 3d11aa3..407250c 100644
--- a/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.outline.expect
@@ -10,7 +10,7 @@
     ;
   constructor named2(core::int foo) → self::A1
     ;
-  constructor named3({required core::int foo}) → self::A1
+  constructor named3({required core::int foo = null}) → self::A1
     ;
 }
 class B1 extends self::A1 {
@@ -20,17 +20,17 @@
     ;
   constructor named2(core::int foo) → self::B1
     ;
-  constructor named3({required core::int foo}) → self::B1
+  constructor named3({required core::int foo = null}) → self::B1
     ;
 }
 class A2 extends core::Object {
   final field core::int foo;
   final field core::String bar;
-  constructor •({required core::int foo, required core::String bar}) → self::A2
+  constructor •({required core::int foo = null, required core::String bar = null}) → self::A2
     ;
 }
 class B2 extends self::A2 {
-  constructor •({required core::String bar, required core::int foo}) → self::B2
+  constructor •({required core::String bar = null, required core::int foo = null}) → self::B2
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.weak.outline.expect
index 99e1ef3..e8c6dc4 100644
--- a/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.weak.outline.expect
@@ -4,21 +4,21 @@
 
 class A1 extends core::Object {
   final field core::int foo;
-  constructor •({required core::int foo}) → self::A1
+  constructor •({required core::int foo = null}) → self::A1
     ;
 }
 class B1 extends self::A1 {
-  constructor •({required core::int foo}) → self::B1
+  constructor •({required core::int foo = null}) → self::B1
     ;
 }
 class C1 extends self::A1 {
-  constructor •({required core::int foo}) → self::C1
+  constructor •({required core::int foo = null}) → self::C1
     ;
 }
 class A2 extends core::Object {
   final field core::int foo;
   final field core::String bar;
-  constructor •({required core::int foo, required core::String bar}) → self::A2
+  constructor •({required core::int foo = null, required core::String bar = null}) → self::A2
     ;
 }
 class B2 extends self::A2 {
@@ -26,9 +26,9 @@
     ;
 }
 class C2 extends self::A2 {
-  constructor •({required core::int foo}) → self::C2
+  constructor •({required core::int foo = null}) → self::C2
     ;
-  constructor other({required core::int foo}) → self::C2
+  constructor other({required core::int foo = null}) → self::C2
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.outline.expect
index 76d37eb..5b4efe7 100644
--- a/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 import "org-dartlang-testcase:///main_lib.dart";
 
 class GalleryApp extends mai::StatefulWidget /*hasConstConstructor*/  {
-  const constructor •({mai::Key? key}) → self::GalleryApp
+  const constructor •({mai::Key? key = #C1}) → self::GalleryApp
     : super mai::StatefulWidget::•(key: key)
     ;
 }
@@ -22,7 +22,11 @@
 }
 class StatefulWidget extends core::Object /*hasConstConstructor*/  {
   final field mai::Key? key;
-  const constructor •({mai::Key? key}) → mai::StatefulWidget
+  const constructor •({mai::Key? key = #C1}) → mai::StatefulWidget
     : mai::StatefulWidget::key = key, super core::Object::•()
     ;
 }
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.strong.expect b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.strong.expect
index c1a5b49..1d3e740 100644
--- a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.strong.expect
+++ b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.strong.expect
@@ -161,7 +161,7 @@
     ;
 }
 class C9 = syn::A9 with self::B9 {
-  synthetic constructor •([core::int? a]) → self::C9
+  synthetic constructor •([core::int? a = #C3]) → self::C9
     : super syn::A9::•(a)
     ;
 }
@@ -210,7 +210,7 @@
     ;
 }
 class C8 = syn::A8 with syn::B8 {
-  synthetic constructor •({core::int? a}) → syn::C8
+  synthetic constructor •({core::int? a = #C3}) → syn::C8
     : super syn::A8::•(a: a)
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.strong.transformed.expect
index 782b4ee..8995764 100644
--- a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.strong.transformed.expect
@@ -161,7 +161,7 @@
     ;
 }
 class C9 extends syn::A9 implements self::B9 /*isEliminatedMixin*/  {
-  synthetic constructor •([core::int? a]) → self::C9
+  synthetic constructor •([core::int? a = #C3]) → self::C9
     : super syn::A9::•(a)
     ;
 }
@@ -210,7 +210,7 @@
     ;
 }
 class C8 extends syn::A8 implements syn::B8 /*isEliminatedMixin*/  {
-  synthetic constructor •({core::int? a}) → syn::C8
+  synthetic constructor •({core::int? a = #C3}) → syn::C8
     : super syn::A8::•(a: a)
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.expect b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.expect
index c1a5b49..1d3e740 100644
--- a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.expect
+++ b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.expect
@@ -161,7 +161,7 @@
     ;
 }
 class C9 = syn::A9 with self::B9 {
-  synthetic constructor •([core::int? a]) → self::C9
+  synthetic constructor •([core::int? a = #C3]) → self::C9
     : super syn::A9::•(a)
     ;
 }
@@ -210,7 +210,7 @@
     ;
 }
 class C8 = syn::A8 with syn::B8 {
-  synthetic constructor •({core::int? a}) → syn::C8
+  synthetic constructor •({core::int? a = #C3}) → syn::C8
     : super syn::A8::•(a: a)
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.modular.expect
index c1a5b49..1d3e740 100644
--- a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.modular.expect
@@ -161,7 +161,7 @@
     ;
 }
 class C9 = syn::A9 with self::B9 {
-  synthetic constructor •([core::int? a]) → self::C9
+  synthetic constructor •([core::int? a = #C3]) → self::C9
     : super syn::A9::•(a)
     ;
 }
@@ -210,7 +210,7 @@
     ;
 }
 class C8 = syn::A8 with syn::B8 {
-  synthetic constructor •({core::int? a}) → syn::C8
+  synthetic constructor •({core::int? a = #C3}) → syn::C8
     : super syn::A8::•(a: a)
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.outline.expect
index 8e802f7..8752d3d 100644
--- a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.outline.expect
@@ -131,7 +131,7 @@
     ;
 }
 class D8 extends syn::C8 {
-  constructor •({core::int? a}) → self::D8
+  constructor •({core::int? a = null}) → self::D8
     ;
 }
 class B9 extends core::Object {
@@ -139,12 +139,12 @@
     ;
 }
 class C9 = syn::A9 with self::B9 {
-  synthetic constructor •([core::int? a]) → self::C9
+  synthetic constructor •([core::int? a = null]) → self::C9
     : super syn::A9::•(a)
     ;
 }
 class D9 extends self::C9 {
-  constructor •([core::int? a]) → self::D9
+  constructor •([core::int? a = null]) → self::D9
     ;
 }
 static method main() → dynamic
@@ -175,7 +175,7 @@
 }
 class A8 extends core::Object {
   final field core::int? a;
-  constructor •({core::int? a}) → syn::A8
+  constructor •({core::int? a = null}) → syn::A8
     ;
 }
 class B8 extends core::Object {
@@ -183,12 +183,12 @@
     ;
 }
 class C8 = syn::A8 with syn::B8 {
-  synthetic constructor •({core::int? a}) → syn::C8
+  synthetic constructor •({core::int? a = null}) → syn::C8
     : super syn::A8::•(a: a)
     ;
 }
 class A9 extends core::Object {
   final field core::int? a;
-  constructor •([core::int? a]) → syn::A9
+  constructor •([core::int? a = null]) → syn::A9
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.transformed.expect
index 782b4ee..8995764 100644
--- a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.transformed.expect
@@ -161,7 +161,7 @@
     ;
 }
 class C9 extends syn::A9 implements self::B9 /*isEliminatedMixin*/  {
-  synthetic constructor •([core::int? a]) → self::C9
+  synthetic constructor •([core::int? a = #C3]) → self::C9
     : super syn::A9::•(a)
     ;
 }
@@ -210,7 +210,7 @@
     ;
 }
 class C8 extends syn::A8 implements syn::B8 /*isEliminatedMixin*/  {
-  synthetic constructor •({core::int? a}) → syn::C8
+  synthetic constructor •({core::int? a = #C3}) → syn::C8
     : super syn::A8::•(a: a)
     ;
 }
diff --git a/pkg/front_end/testcases/triple_shift/invalid_operator.dart.weak.outline.expect b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.weak.outline.expect
index 34eccb8..dbf9eec 100644
--- a/pkg/front_end/testcases/triple_shift/invalid_operator.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.weak.outline.expect
@@ -49,25 +49,25 @@
 class Operators3 extends core::Object {
   synthetic constructor •() → self::Operators3
     ;
-  operator >>>([dynamic a]) → dynamic
+  operator >>>([dynamic a = null]) → dynamic
     ;
 }
 class Operators4 extends core::Object {
   synthetic constructor •() → self::Operators4
     ;
-  operator >>>({dynamic a}) → dynamic
+  operator >>>({dynamic a = null}) → dynamic
     ;
 }
 class Operators5 extends core::Object {
   synthetic constructor •() → self::Operators5
     ;
-  operator >>>(dynamic a, [dynamic b]) → dynamic
+  operator >>>(dynamic a, [dynamic b = null]) → dynamic
     ;
 }
 class Operators6 extends core::Object {
   synthetic constructor •() → self::Operators6
     ;
-  operator >>>(dynamic a, {dynamic b}) → dynamic
+  operator >>>(dynamic a, {dynamic b = null}) → dynamic
     ;
 }
 class Operators7 extends core::Object {
diff --git a/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.outline.expect b/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.outline.expect
index f6aa033..71cd6f2 100644
--- a/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.outline.expect
@@ -20,7 +20,7 @@
 
 class Animal extends core::Object {
   final field core::int? numberOfLegs;
-  constructor •({required core::int? numberOfLegs}) → self::Animal
+  constructor •({required core::int? numberOfLegs = null}) → self::Animal
     ;
 }
 @val::valueClass
@@ -32,9 +32,9 @@
 class Foo extends core::Object {
   field core::int? bar;
   field core::int? bar2;
-  constructor •({core::int? bar, core::int? bar2}) → self::Foo
+  constructor •({core::int? bar = null, core::int? bar2 = null}) → self::Foo
     ;
-  method copyWith({core::int bar, core::int bar2}) → self::Foo
+  method copyWith({core::int bar = null, core::int bar2 = null}) → self::Foo
     ;
 }
 @val::valueClass
diff --git a/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.outline.expect b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.outline.expect
index 6b5a117..6584a35 100644
--- a/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.outline.expect
@@ -7,7 +7,7 @@
 
 class Animal extends core::Object {
   final field core::int numberOfLegs;
-  constructor •({required core::int numberOfLegs}) → self::Animal
+  constructor •({required core::int numberOfLegs = null}) → self::Animal
     ;
 }
 @val::valueClass
diff --git a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.outline.expect b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.outline.expect
index cd364ee..ce7effd 100644
--- a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.outline.expect
@@ -18,7 +18,7 @@
     ;
   method method(self::A::T% t, (self::A::U%) → void u, covariant-by-class self::A::V% v) → void
     ;
-  method method2(self::A::T% x, [self::A::T? y]) → void
+  method method2(self::A::T% x, [self::A::T? y = null]) → void
     ;
   set x(self::A::T% t) → void
     ;
@@ -44,7 +44,7 @@
   final field (self::C::T%) →? void field;
   synthetic constructor •() → self::C<self::C::T%>
     ;
-  method method(self::C::T% x, [self::C::T? y]) → void
+  method method(self::C::T% x, [self::C::T? y = null]) → void
     ;
   set x(self::C::T% t) → void
     ;
diff --git a/pkg/kernel/lib/canonical_name.dart b/pkg/kernel/lib/canonical_name.dart
index 651c2d6..0549ea4 100644
--- a/pkg/kernel/lib/canonical_name.dart
+++ b/pkg/kernel/lib/canonical_name.dart
@@ -5,6 +5,7 @@
 library kernel.canonical_name;
 
 import 'ast.dart';
+import 'src/printer.dart' show AstPrinter, AstTextStrategy;
 
 /// A string sequence that identifies a library, class, or member.
 ///
@@ -284,6 +285,16 @@
     return "${parent!.toStringInternal()}::$name";
   }
 
+  String toText(AstTextStrategy strategy) {
+    AstPrinter printer = new AstPrinter(strategy);
+    toTextInternal(printer);
+    return printer.getText();
+  }
+
+  void toTextInternal(AstPrinter printer) {
+    printer.writeQualifiedCanonicalNameToString(this);
+  }
+
   Reference get reference {
     return _reference ??= (new Reference()..canonicalName = this);
   }
@@ -462,6 +473,21 @@
     return "Reference to ${toStringInternal()}";
   }
 
+  String toText(AstTextStrategy strategy) {
+    AstPrinter printer = new AstPrinter(strategy);
+    toTextInternal(printer);
+    return printer.getText();
+  }
+
+  void toTextInternal(AstPrinter printer) {
+    if (node != null) {
+      return node!.toTextInternal(printer);
+    }
+    if (canonicalName != null) {
+      return canonicalName!.toTextInternal(printer);
+    }
+  }
+
   String toStringInternal() {
     if (canonicalName != null) {
       return '${canonicalName!.toStringInternal()}';
diff --git a/pkg/kernel/lib/src/printer.dart b/pkg/kernel/lib/src/printer.dart
index fc81e9c..89f763c 100644
--- a/pkg/kernel/lib/src/printer.dart
+++ b/pkg/kernel/lib/src/printer.dart
@@ -112,6 +112,12 @@
         includeLibraryName: _strategy.includeLibraryNamesInMembers));
   }
 
+  void writeQualifiedCanonicalNameToString(CanonicalName canonicalName) {
+    _sb.write(qualifiedCanonicalNameToString(canonicalName,
+        includeLibraryName: _strategy.includeLibraryNamesInMembers,
+        includeLibraryNamesInTypes: _strategy.includeLibraryNamesInTypes));
+  }
+
   void writeMemberName(Reference? reference) {
     _sb.write(qualifiedMemberNameToStringByReference(reference,
         includeLibraryName: _strategy.includeLibraryNamesInMembers));
diff --git a/pkg/kernel/lib/src/text_util.dart b/pkg/kernel/lib/src/text_util.dart
index ac95aac..fdc2a10 100644
--- a/pkg/kernel/lib/src/text_util.dart
+++ b/pkg/kernel/lib/src/text_util.dart
@@ -42,22 +42,50 @@
 }
 
 String qualifiedCanonicalNameToString(CanonicalName canonicalName,
-    {bool includeLibraryName: false}) {
+    {bool includeLibraryName: false, bool includeLibraryNamesInTypes: false}) {
   if (canonicalName.isRoot) {
     return '<root>';
   } else if (canonicalName.parent!.isRoot) {
-    return canonicalName.name;
+    // Library.
+    return 'library ${canonicalName.name}';
   } else if (canonicalName.parent!.parent!.isRoot) {
+    // Class or extension.
     if (!includeLibraryName) {
       return canonicalName.name;
     }
     String parentName = qualifiedCanonicalNameToString(canonicalName.parent!,
-        includeLibraryName: includeLibraryName);
+        includeLibraryName: includeLibraryName,
+        includeLibraryNamesInTypes: includeLibraryNamesInTypes);
     return '$parentName::${canonicalName.name}';
   } else {
-    String parentName = qualifiedCanonicalNameToString(canonicalName.parent!,
-        includeLibraryName: includeLibraryName);
-    return '$parentName.${canonicalName.name}';
+    // Constructor, field, procedure (factory, getter, setter etc), typedef;
+    // but we could technically be anywhere in the "hierarchy" --- at the
+    // @typedef for instance, or at the uri of a library for a private name.
+    CanonicalName parentNotPrivateUri = canonicalName.parent!;
+    if (canonicalName.name.startsWith("_")) {
+      parentNotPrivateUri = parentNotPrivateUri.parent!;
+    }
+    if (parentNotPrivateUri.name == CanonicalName.typedefsName) {
+      includeLibraryName = includeLibraryNamesInTypes;
+    }
+    if (parentNotPrivateUri.parent!.parent!.parent?.isRoot == true) {
+      // Parent is class (or extension).
+      String parentName = qualifiedCanonicalNameToString(
+          parentNotPrivateUri.parent!,
+          includeLibraryName: includeLibraryName,
+          includeLibraryNamesInTypes: includeLibraryNamesInTypes);
+      return "$parentName.${canonicalName.name}";
+    } else {
+      // Parent is library.
+      if (!includeLibraryName) {
+        return canonicalName.name;
+      }
+      String parentName = qualifiedCanonicalNameToString(
+          parentNotPrivateUri.parent!,
+          includeLibraryName: includeLibraryName,
+          includeLibraryNamesInTypes: includeLibraryNamesInTypes);
+      return '$parentName::${canonicalName.name}';
+    }
   }
 }
 
diff --git a/pkg/kernel/test/text_util_test.dart b/pkg/kernel/test/text_util_test.dart
new file mode 100644
index 0000000..3ec48d2
--- /dev/null
+++ b/pkg/kernel/test/text_util_test.dart
@@ -0,0 +1,62 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:kernel/ast.dart';
+import 'package:kernel/src/printer.dart';
+
+import "reference_name_test.dart" show createComponent;
+
+void main() {
+  testQualifiedCanonicalNameToString();
+}
+
+void testQualifiedCanonicalNameToString() {
+  Component component = createComponent();
+  component.computeCanonicalNames();
+  NamedNodeCollector namedNodeCollector = new NamedNodeCollector();
+  component.accept(namedNodeCollector);
+
+  bool foundMismatch = false;
+
+  for (NamedNode namedNode in namedNodeCollector.namedNodes) {
+    for (AstTextStrategy strategy in [
+      const AstTextStrategy(
+          includeLibraryNamesInMembers: false,
+          includeLibraryNamesInTypes: false),
+      const AstTextStrategy(includeLibraryNamesInMembers: true),
+      const AstTextStrategy(includeLibraryNamesInTypes: true),
+      const AstTextStrategy(
+          includeLibraryNamesInMembers: true, includeLibraryNamesInTypes: true),
+    ]) {
+      String throughNode = namedNode.toText(strategy);
+      String throughReference = namedNode.reference.toText(strategy);
+      String throughCanonicalName =
+          namedNode.reference.canonicalName!.toText(strategy);
+      if (throughNode == throughReference &&
+          throughReference == throughCanonicalName) continue;
+      print("${namedNode.runtimeType} "
+          "(${strategy.includeLibraryNamesInMembers},"
+          "${strategy.includeLibraryNamesInTypes}): "
+          "$throughNode <--> $throughReference <--> $throughCanonicalName");
+      foundMismatch = true;
+    }
+  }
+
+  if (foundMismatch) throw "Found mismatch.";
+}
+
+class NamedNodeCollector extends RecursiveVisitor {
+  List<NamedNode> namedNodes = [];
+  @override
+  void defaultNode(Node node) {
+    if (node is NamedNode) {
+      namedNodes.add(node);
+    }
+    if (node is Extension) return;
+    if (node is Typedef) return;
+    if (node is Member) return;
+
+    super.defaultNode(node);
+  }
+}
diff --git a/tools/VERSION b/tools/VERSION
index 342e544..2648abd 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 55
+PRERELEASE 56
 PRERELEASE_PATCH 0
\ No newline at end of file
