diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor.dart
index 27a7915..7238af4 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor.dart
@@ -89,7 +89,7 @@
   /// The [resolveIdentifier] argument should return the import uri to be used
   /// for that identifier.
   String buildAugmentationLibrary(Iterable<MacroExecutionResult> macroResults,
-      Uri Function(Identifier) resolveIdentifier);
+      ResolvedIdentifier Function(Identifier) resolveIdentifier);
 
   /// Tell the executor to shut down and clean up any resources it may have
   /// allocated.
@@ -220,6 +220,41 @@
   }
 }
 
+/// A resolved [Identifier], this is used when creating augmentation libraries
+/// to qualify identifiers where needed.
+class ResolvedIdentifier extends Identifier {
+  /// The import URI for the library that defines the member that is referenced
+  /// by this identifier.
+  final Uri uri;
+
+  /// Type type of identifier this is (instance, static, top level).
+  final IdentifierKind kind;
+
+  /// The unqualified name of this identifier.
+  @override
+  final String name;
+
+  /// If this is a static member, then the name of the fully qualified scope
+  /// surrounding this member. Should not contain a trailing `.`.
+  ///
+  /// Typically this would just be the name of a type.
+  final String? staticScope;
+
+  ResolvedIdentifier({
+    required this.kind,
+    required this.name,
+    required this.staticScope,
+    required this.uri,
+  });
+}
+
+/// The types of identifiers.
+enum IdentifierKind {
+  instanceMember,
+  staticInstanceMember,
+  topLevelMember,
+}
+
 /// An opaque identifier for a macro class, retrieved by
 /// [MacroExecutor.loadMacro].
 ///
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/augmentation_library.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/augmentation_library.dart
index cd0e198..56e4fb7a 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/augmentation_library.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/augmentation_library.dart
@@ -10,26 +10,44 @@
 mixin AugmentationLibraryBuilder on MacroExecutor {
   @override
   String buildAugmentationLibrary(Iterable<MacroExecutionResult> macroResults,
-      Uri Function(Identifier) resolveIdentifier) {
+      ResolvedIdentifier Function(Identifier) resolveIdentifier) {
     StringBuffer importsBuffer = new StringBuffer();
     StringBuffer directivesBuffer = new StringBuffer();
     Map<Uri, String> importPrefixes = {};
     int nextPrefix = 0;
 
+    // Keeps track of the last part written in `lastDirectivePart`.
+    String lastDirectivePart = '';
+    void writeDirectivePart(String part) {
+      lastDirectivePart = part;
+      directivesBuffer.write(part);
+    }
+
     void buildCode(Code code) {
       for (Object part in code.parts) {
         if (part is String) {
-          directivesBuffer.write(part);
+          writeDirectivePart(part);
         } else if (part is Code) {
           buildCode(part);
         } else if (part is Identifier) {
-          Uri uri = resolveIdentifier(part);
-          String prefix = importPrefixes.putIfAbsent(uri, () {
+          ResolvedIdentifier resolved = resolveIdentifier(part);
+          String prefix = importPrefixes.putIfAbsent(resolved.uri, () {
             String prefix = 'i${nextPrefix++}';
-            importsBuffer.writeln("import '$uri' as $prefix;");
+            importsBuffer.writeln("import '${resolved.uri}' as $prefix;");
             return prefix;
           });
-          directivesBuffer.write('$prefix.${part.name}');
+          if (resolved.kind == IdentifierKind.instanceMember) {
+            // Qualify with `this.` if we don't have a receiver.
+            if (!lastDirectivePart.trimRight().endsWith('.')) {
+              writeDirectivePart('this.');
+            }
+          } else {
+            writeDirectivePart('${prefix}.');
+          }
+          if (resolved.kind == IdentifierKind.staticInstanceMember) {
+            writeDirectivePart('${resolved.staticScope!}.');
+          }
+          writeDirectivePart('${part.name}');
         } else {
           throw new ArgumentError(
               'Code objects only support String, Identifier, and Code '
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/isolated_executor/isolated_executor.dart b/pkg/_fe_analyzer_shared/lib/src/macros/isolated_executor/isolated_executor.dart
index 7713aa3..6902870 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/isolated_executor/isolated_executor.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/isolated_executor/isolated_executor.dart
@@ -366,7 +366,7 @@
   /// These calls are handled by the higher level executor.
   @override
   String buildAugmentationLibrary(Iterable<MacroExecutionResult> macroResults,
-          Uri Function(Identifier) resolveIdentifier) =>
+          ResolvedIdentifier Function(Identifier) resolveIdentifier) =>
       throw new StateError('Unreachable');
 
   @override
diff --git a/pkg/_fe_analyzer_shared/test/macros/executor_shared/augmentation_library_test.dart b/pkg/_fe_analyzer_shared/test/macros/executor_shared/augmentation_library_test.dart
index f3a5cbd..704898a 100644
--- a/pkg/_fe_analyzer_shared/test/macros/executor_shared/augmentation_library_test.dart
+++ b/pkg/_fe_analyzer_shared/test/macros/executor_shared/augmentation_library_test.dart
@@ -35,7 +35,7 @@
           ]),
       ];
       var library = _TestExecutor().buildAugmentationLibrary(
-          results, (Identifier i) => (i as TestIdentifier).libraryImportUri);
+          results, (Identifier i) => (i as TestIdentifier).resolved);
       expect(library, equalsIgnoringWhitespace('''
         augment class Foo00 {
           int get i => 0;
@@ -68,15 +68,33 @@
       var fooIdentifier = TestIdentifier(
           id: RemoteInstance.uniqueId,
           name: 'Foo',
-          libraryImportUri: Uri.parse('package:foo/foo.dart'));
+          kind: IdentifierKind.topLevelMember,
+          staticScope: null,
+          uri: Uri.parse('package:foo/foo.dart'));
       var barIdentifier = TestIdentifier(
           id: RemoteInstance.uniqueId,
           name: 'Bar',
-          libraryImportUri: Uri.parse('package:bar/bar.dart'));
+          kind: IdentifierKind.topLevelMember,
+          staticScope: null,
+          uri: Uri.parse('package:bar/bar.dart'));
       var builderIdentifier = TestIdentifier(
           id: RemoteInstance.uniqueId,
           name: 'Builder',
-          libraryImportUri: Uri.parse('package:builder/builder.dart'));
+          kind: IdentifierKind.topLevelMember,
+          staticScope: null,
+          uri: Uri.parse('package:builder/builder.dart'));
+      var barInstanceMember = TestIdentifier(
+          id: RemoteInstance.uniqueId,
+          name: 'baz',
+          kind: IdentifierKind.instanceMember,
+          staticScope: null,
+          uri: Uri.parse('package:bar/bar.dart'));
+      var barStaticMember = TestIdentifier(
+          id: RemoteInstance.uniqueId,
+          name: 'zap',
+          kind: IdentifierKind.staticInstanceMember,
+          staticScope: 'Bar',
+          uri: Uri.parse('package:bar/bar.dart'));
       var results = [
         MacroExecutionResultImpl(augmentations: [
           DeclarationCode.fromParts([
@@ -87,24 +105,32 @@
             '<',
             barIdentifier,
             '<T>> {\n',
+            'late int ${barInstanceMember.name};\n',
             barIdentifier,
             '<T> build() => new ',
             barIdentifier,
-            '();\n}',
+            '()..',
+            barInstanceMember,
+            ' = ',
+            barStaticMember,
+            ';',
+            '\n}',
           ]),
         ], newTypeNames: [
           'FooBuilder',
         ])
       ];
       var library = _TestExecutor().buildAugmentationLibrary(
-          results, (Identifier i) => (i as TestIdentifier).libraryImportUri);
+          results, (Identifier i) => (i as TestIdentifier).resolved);
       expect(library, equalsIgnoringWhitespace('''
         import 'package:foo/foo.dart' as i0;
         import 'package:builder/builder.dart' as i1;
         import 'package:bar/bar.dart' as i2;
 
         class FooBuilder<T extends i0.Foo> implements i1.Builder<i2.Bar<T>> {
-          i2.Bar<T> build() => new i2.Bar();
+          late int baz;
+
+          i2.Bar<T> build() => new i2.Bar()..baz = i2.Bar.zap;
         }
       '''));
     });
diff --git a/pkg/_fe_analyzer_shared/test/macros/util.dart b/pkg/_fe_analyzer_shared/test/macros/util.dart
index 34625b2..725b3fd 100644
--- a/pkg/_fe_analyzer_shared/test/macros/util.dart
+++ b/pkg/_fe_analyzer_shared/test/macros/util.dart
@@ -5,6 +5,7 @@
 import 'dart:mirrors';
 
 import 'package:_fe_analyzer_shared/src/macros/api.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor.dart';
 import 'package:_fe_analyzer_shared/src/macros/executor_shared/introspection_impls.dart';
 import 'package:_fe_analyzer_shared/src/macros/executor_shared/remote_instance.dart';
 
@@ -108,13 +109,22 @@
       (library == other.library && identifier.name == other.identifier.name);
 }
 
-/// An identifier that knows what URI should be used to import it.
+/// An identifier that knows the resolved version of itself.
 class TestIdentifier extends IdentifierImpl {
-  final Uri libraryImportUri;
+  final ResolvedIdentifier resolved;
 
-  TestIdentifier(
-      {required int id, required String name, required this.libraryImportUri})
-      : super(id: id, name: name);
+  TestIdentifier({
+    required int id,
+    required String name,
+    required IdentifierKind kind,
+    required Uri uri,
+    required String? staticScope,
+  })  : resolved = ResolvedIdentifier(
+            kind: kind, name: name, staticScope: staticScope, uri: uri),
+        super(
+          id: id,
+          name: name,
+        );
 }
 
 extension DebugCodeString on Code {
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index e04f3aa..422afdf 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -1622,7 +1622,8 @@
     return fakeReturn.expression!;
   }
 
-  void parseInitializers(Token token, {bool doFinishConstructor = true}) {
+  List<Initializer>? parseInitializers(Token token,
+      {bool doFinishConstructor = true}) {
     Parser parser = new Parser(this,
         useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
     if (!token.isEof) {
@@ -1635,6 +1636,7 @@
       finishConstructor(
           member as DeclaredSourceConstructorBuilder, AsyncMarker.Sync, null);
     }
+    return _initializers;
   }
 
   Expression parseFieldInitializer(Token token) {
diff --git a/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart b/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
index 27e2e0e..2cf43f9 100644
--- a/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
@@ -238,22 +238,24 @@
       }
 
       if (_hasSuperInitializingFormals) {
+        List<Initializer>? initializers;
         if (beginInitializers != null) {
           BodyBuilder bodyBuilder = library.loader
               .createBodyBuilderForOutlineExpression(
                   library, classBuilder, this, classBuilder.scope, fileUri);
           bodyBuilder.constantContext = ConstantContext.required;
-          bodyBuilder.parseInitializers(beginInitializers!,
+          initializers = bodyBuilder.parseInitializers(beginInitializers!,
               doFinishConstructor: false);
         }
         finalizeSuperInitializingFormals(
-            classHierarchy, _superParameterDefaultValueCloners);
+            classHierarchy, _superParameterDefaultValueCloners, initializers);
       }
     }
     _hasFormalsInferred = true;
   }
 
-  ConstructorBuilder? _computeSuperTargetBuilder() {
+  ConstructorBuilder? _computeSuperTargetBuilder(
+      List<Initializer>? initializers) {
     Constructor superTarget;
     ClassBuilder superclassBuilder;
 
@@ -279,9 +281,10 @@
       return null;
     }
 
-    if (constructor.initializers.isNotEmpty &&
-        constructor.initializers.last is SuperInitializer) {
-      superTarget = (constructor.initializers.last as SuperInitializer).target;
+    if (initializers != null &&
+        initializers.isNotEmpty &&
+        initializers.last is SuperInitializer) {
+      superTarget = (initializers.last as SuperInitializer).target;
     } else {
       MemberBuilder? memberBuilder = superclassBuilder.constructors
           .lookup("", charOffset, library.fileUri);
@@ -299,8 +302,10 @@
     return constructorBuilder is ConstructorBuilder ? constructorBuilder : null;
   }
 
-  void finalizeSuperInitializingFormals(ClassHierarchy classHierarchy,
-      List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
+  void finalizeSuperInitializingFormals(
+      ClassHierarchy classHierarchy,
+      List<SynthesizedFunctionNode> synthesizedFunctionNodes,
+      List<Initializer>? initializers) {
     if (formals == null) return;
     if (!_hasSuperInitializingFormals) return;
 
@@ -312,7 +317,8 @@
       }
     }
 
-    ConstructorBuilder? superTargetBuilder = _computeSuperTargetBuilder();
+    ConstructorBuilder? superTargetBuilder =
+        _computeSuperTargetBuilder(initializers);
     Constructor superTarget;
     List<FormalParameterBuilder>? superFormals;
     if (superTargetBuilder is DeclaredSourceConstructorBuilder) {
@@ -468,7 +474,8 @@
 
   void addSuperParameterDefaultValueCloners(
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
-    ConstructorBuilder? superTargetBuilder = _computeSuperTargetBuilder();
+    ConstructorBuilder? superTargetBuilder =
+        _computeSuperTargetBuilder(constructor.initializers);
     if (superTargetBuilder is DeclaredSourceConstructorBuilder) {
       superTargetBuilder
           .addSuperParameterDefaultValueCloners(synthesizedFunctionNodes);
diff --git a/pkg/front_end/test/macros/macro_test.dart b/pkg/front_end/test/macros/macro_test.dart
index ce03989..910c3e1 100644
--- a/pkg/front_end/test/macros/macro_test.dart
+++ b/pkg/front_end/test/macros/macro_test.dart
@@ -282,7 +282,7 @@
 
   @override
   String buildAugmentationLibrary(Iterable<MacroExecutionResult> macroResults,
-      Uri Function(Identifier) resolveIdentifier) {
+      ResolvedIdentifier Function(Identifier) resolveIdentifier) {
     // TODO: implement buildAugmentationLibrary
     throw UnimplementedError();
   }
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index 3423497..10299a1 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -943,6 +943,7 @@
 qi
 qm
 quad
+qualify
 quantified
 queries
 quick
@@ -1369,6 +1370,7 @@
 unpaired
 unparsed
 unpleasant
+unqualified
 unreachable
 unseen
 unset
diff --git a/pkg/front_end/testcases/super_parameters/issue48286.dart b/pkg/front_end/testcases/super_parameters/issue48286.dart
new file mode 100644
index 0000000..042a998
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48286.dart
@@ -0,0 +1,18 @@
+// 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.
+
+class S<T> {
+  num n;
+  T t;
+  S(this.n, this.t);
+  S.named(this.t, this.n);
+}
+
+class C<T> extends S<T> {
+  C.constr1(super.n, String s, super.t);
+  C.constr2(int i, super.n, String s, super.t) : super();
+  C.constr3(int i, super.t, String s, super.n) : super.named();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48286.dart.strong.expect b/pkg/front_end/testcases/super_parameters/issue48286.dart.strong.expect
new file mode 100644
index 0000000..5409077
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48286.dart.strong.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class S<T extends core::Object? = dynamic> extends core::Object {
+  field core::num n;
+  covariant-by-class field self::S::T% t;
+  constructor •(core::num n, self::S::T% t) → self::S<self::S::T%>
+    : self::S::n = n, self::S::t = t, super core::Object::•()
+    ;
+  constructor named(self::S::T% t, core::num n) → self::S<self::S::T%>
+    : self::S::t = t, self::S::n = n, super core::Object::•()
+    ;
+}
+class C<T extends core::Object? = dynamic> extends self::S<self::C::T%> {
+  constructor constr1(core::num n, core::String s, self::C::T% t) → self::C<self::C::T%>
+    : super self::S::•(n, t)
+    ;
+  constructor constr2(core::int i, core::num n, core::String s, self::C::T% t) → self::C<self::C::T%>
+    : super self::S::•(n, t)
+    ;
+  constructor constr3(core::int i, self::C::T% t, core::String s, core::num n) → self::C<self::C::T%>
+    : super self::S::named(t, n)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48286.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/issue48286.dart.strong.transformed.expect
new file mode 100644
index 0000000..5409077
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48286.dart.strong.transformed.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class S<T extends core::Object? = dynamic> extends core::Object {
+  field core::num n;
+  covariant-by-class field self::S::T% t;
+  constructor •(core::num n, self::S::T% t) → self::S<self::S::T%>
+    : self::S::n = n, self::S::t = t, super core::Object::•()
+    ;
+  constructor named(self::S::T% t, core::num n) → self::S<self::S::T%>
+    : self::S::t = t, self::S::n = n, super core::Object::•()
+    ;
+}
+class C<T extends core::Object? = dynamic> extends self::S<self::C::T%> {
+  constructor constr1(core::num n, core::String s, self::C::T% t) → self::C<self::C::T%>
+    : super self::S::•(n, t)
+    ;
+  constructor constr2(core::int i, core::num n, core::String s, self::C::T% t) → self::C<self::C::T%>
+    : super self::S::•(n, t)
+    ;
+  constructor constr3(core::int i, self::C::T% t, core::String s, core::num n) → self::C<self::C::T%>
+    : super self::S::named(t, n)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48286.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/issue48286.dart.textual_outline.expect
new file mode 100644
index 0000000..9eae54a
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48286.dart.textual_outline.expect
@@ -0,0 +1,12 @@
+class S<T> {
+  num n;
+  T t;
+  S(this.n, this.t);
+  S.named(this.t, this.n);
+}
+class C<T> extends S<T> {
+  C.constr1(super.n, String s, super.t);
+  C.constr2(int i, super.n, String s, super.t) : super();
+  C.constr3(int i, super.t, String s, super.n) : super.named();
+}
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48286.dart.weak.expect b/pkg/front_end/testcases/super_parameters/issue48286.dart.weak.expect
new file mode 100644
index 0000000..5409077
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48286.dart.weak.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class S<T extends core::Object? = dynamic> extends core::Object {
+  field core::num n;
+  covariant-by-class field self::S::T% t;
+  constructor •(core::num n, self::S::T% t) → self::S<self::S::T%>
+    : self::S::n = n, self::S::t = t, super core::Object::•()
+    ;
+  constructor named(self::S::T% t, core::num n) → self::S<self::S::T%>
+    : self::S::t = t, self::S::n = n, super core::Object::•()
+    ;
+}
+class C<T extends core::Object? = dynamic> extends self::S<self::C::T%> {
+  constructor constr1(core::num n, core::String s, self::C::T% t) → self::C<self::C::T%>
+    : super self::S::•(n, t)
+    ;
+  constructor constr2(core::int i, core::num n, core::String s, self::C::T% t) → self::C<self::C::T%>
+    : super self::S::•(n, t)
+    ;
+  constructor constr3(core::int i, self::C::T% t, core::String s, core::num n) → self::C<self::C::T%>
+    : super self::S::named(t, n)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48286.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/issue48286.dart.weak.modular.expect
new file mode 100644
index 0000000..5409077
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48286.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class S<T extends core::Object? = dynamic> extends core::Object {
+  field core::num n;
+  covariant-by-class field self::S::T% t;
+  constructor •(core::num n, self::S::T% t) → self::S<self::S::T%>
+    : self::S::n = n, self::S::t = t, super core::Object::•()
+    ;
+  constructor named(self::S::T% t, core::num n) → self::S<self::S::T%>
+    : self::S::t = t, self::S::n = n, super core::Object::•()
+    ;
+}
+class C<T extends core::Object? = dynamic> extends self::S<self::C::T%> {
+  constructor constr1(core::num n, core::String s, self::C::T% t) → self::C<self::C::T%>
+    : super self::S::•(n, t)
+    ;
+  constructor constr2(core::int i, core::num n, core::String s, self::C::T% t) → self::C<self::C::T%>
+    : super self::S::•(n, t)
+    ;
+  constructor constr3(core::int i, self::C::T% t, core::String s, core::num n) → self::C<self::C::T%>
+    : super self::S::named(t, n)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48286.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/issue48286.dart.weak.outline.expect
new file mode 100644
index 0000000..35398a6
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48286.dart.weak.outline.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class S<T extends core::Object? = dynamic> extends core::Object {
+  field core::num n;
+  covariant-by-class field self::S::T% t;
+  constructor •(core::num n, self::S::T% t) → self::S<self::S::T%>
+    ;
+  constructor named(self::S::T% t, core::num n) → self::S<self::S::T%>
+    ;
+}
+class C<T extends core::Object? = dynamic> extends self::S<self::C::T%> {
+  constructor constr1(core::num n, core::String s, self::C::T% t) → self::C<self::C::T%>
+    ;
+  constructor constr2(core::int i, core::num n, core::String s, self::C::T% t) → self::C<self::C::T%>
+    ;
+  constructor constr3(core::int i, self::C::T% t, core::String s, core::num n) → self::C<self::C::T%>
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/super_parameters/issue48286.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/issue48286.dart.weak.transformed.expect
new file mode 100644
index 0000000..5409077
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48286.dart.weak.transformed.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class S<T extends core::Object? = dynamic> extends core::Object {
+  field core::num n;
+  covariant-by-class field self::S::T% t;
+  constructor •(core::num n, self::S::T% t) → self::S<self::S::T%>
+    : self::S::n = n, self::S::t = t, super core::Object::•()
+    ;
+  constructor named(self::S::T% t, core::num n) → self::S<self::S::T%>
+    : self::S::t = t, self::S::n = n, super core::Object::•()
+    ;
+}
+class C<T extends core::Object? = dynamic> extends self::S<self::C::T%> {
+  constructor constr1(core::num n, core::String s, self::C::T% t) → self::C<self::C::T%>
+    : super self::S::•(n, t)
+    ;
+  constructor constr2(core::int i, core::num n, core::String s, self::C::T% t) → self::C<self::C::T%>
+    : super self::S::•(n, t)
+    ;
+  constructor constr3(core::int i, self::C::T% t, core::String s, core::num n) → self::C<self::C::T%>
+    : super self::S::named(t, n)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_inference.dart.strong.expect b/pkg/front_end/testcases/super_parameters/simple_inference.dart.strong.expect
index 2422e10..8e3046a 100644
--- a/pkg/front_end/testcases/super_parameters/simple_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_inference.dart.strong.expect
@@ -27,8 +27,8 @@
   constructor named2(core::int foo) → self::B1
     : super self::A1::named2(foo)
     ;
-  constructor named3({required dynamic foo = #C1}) → self::B1
-    : super self::A1::named3(foo: foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+  constructor named3({required core::int foo = #C1}) → self::B1
+    : super self::A1::named3(foo: foo)
     ;
 }
 class A2 extends core::Object {
diff --git a/pkg/front_end/testcases/super_parameters/simple_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/simple_inference.dart.strong.transformed.expect
index 2422e10..8e3046a 100644
--- a/pkg/front_end/testcases/super_parameters/simple_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_inference.dart.strong.transformed.expect
@@ -27,8 +27,8 @@
   constructor named2(core::int foo) → self::B1
     : super self::A1::named2(foo)
     ;
-  constructor named3({required dynamic foo = #C1}) → self::B1
-    : super self::A1::named3(foo: foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+  constructor named3({required core::int foo = #C1}) → self::B1
+    : super self::A1::named3(foo: foo)
     ;
 }
 class A2 extends core::Object {
diff --git a/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.expect b/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.expect
index 2422e10..8e3046a 100644
--- a/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.expect
@@ -27,8 +27,8 @@
   constructor named2(core::int foo) → self::B1
     : super self::A1::named2(foo)
     ;
-  constructor named3({required dynamic foo = #C1}) → self::B1
-    : super self::A1::named3(foo: foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+  constructor named3({required core::int foo = #C1}) → self::B1
+    : super self::A1::named3(foo: foo)
     ;
 }
 class A2 extends core::Object {
diff --git a/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.modular.expect
index 2422e10..8e3046a 100644
--- a/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.modular.expect
@@ -27,8 +27,8 @@
   constructor named2(core::int foo) → self::B1
     : super self::A1::named2(foo)
     ;
-  constructor named3({required dynamic foo = #C1}) → self::B1
-    : super self::A1::named3(foo: foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+  constructor named3({required core::int foo = #C1}) → self::B1
+    : super self::A1::named3(foo: foo)
     ;
 }
 class A2 extends core::Object {
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 c7b816c..3d11aa3 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
@@ -20,7 +20,7 @@
     ;
   constructor named2(core::int foo) → self::B1
     ;
-  constructor named3({required dynamic foo}) → self::B1
+  constructor named3({required core::int foo}) → self::B1
     ;
 }
 class A2 extends core::Object {
diff --git a/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.transformed.expect
index 2422e10..8e3046a 100644
--- a/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.transformed.expect
@@ -27,8 +27,8 @@
   constructor named2(core::int foo) → self::B1
     : super self::A1::named2(foo)
     ;
-  constructor named3({required dynamic foo = #C1}) → self::B1
-    : super self::A1::named3(foo: foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+  constructor named3({required core::int foo = #C1}) → self::B1
+    : super self::A1::named3(foo: foo)
     ;
 }
 class A2 extends core::Object {
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index 8c015e4..bb12aa2 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -219,6 +219,7 @@
 super_parameters/circular_dependency_inference: FormatterCrash
 super_parameters/default_values: FormatterCrash
 super_parameters/issue48142: FormatterCrash
+super_parameters/issue48286: FormatterCrash
 super_parameters/simple: FormatterCrash
 super_parameters/simple_inference: FormatterCrash
 super_parameters/simple_named_super_parameters: FormatterCrash
diff --git a/tools/VERSION b/tools/VERSION
index 37044ab..19760f9 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 95
+PRERELEASE 96
 PRERELEASE_PATCH 0
\ No newline at end of file
