Issue 52144. Required super formal parameters don't inherit default values.

Bug: https://github.com/dart-lang/sdk/issues/52144
Change-Id: I6f41ed4a8d36e6a7df26cc7cebf7fedcaf355d3c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/364880
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 4dad802..4758ce1 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -1339,6 +1339,10 @@
 
   @override
   String? get defaultValueCode {
+    if (isRequired) {
+      return null;
+    }
+
     final constantInitializer = this.constantInitializer;
     if (constantInitializer != null) {
       return constantInitializer.toSource();
diff --git a/pkg/analyzer/test/src/diagnostics/missing_default_value_for_parameter_test.dart b/pkg/analyzer/test/src/diagnostics/missing_default_value_for_parameter_test.dart
index 715d89f..85ce51e 100644
--- a/pkg/analyzer/test/src/diagnostics/missing_default_value_for_parameter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/missing_default_value_for_parameter_test.dart
@@ -252,6 +252,42 @@
 ''');
   }
 
+  test_constructor_generative_super_nonNullable_named_optional_noDefault() async {
+    await assertErrorsInCode('''
+class A {
+  final int a;
+  A({this.a = 0});
+}
+
+class B extends A {
+  B({required super.a});
+}
+
+class C extends B {
+  C({super.a});
+}
+''', [
+      error(CompileTimeErrorCode.MISSING_DEFAULT_VALUE_FOR_PARAMETER, 126, 1),
+    ]);
+  }
+
+  test_constructor_generative_super_nullable_named_optional_noDefault() async {
+    await assertNoErrorsInCode('''
+class A {
+  final int? a;
+  A({this.a});
+}
+
+class B extends A {
+  B({required super.a});
+}
+
+class C extends B {
+  C({super.a});
+}
+''');
+  }
+
   test_constructor_redirectingFactory_nonNullable_named_optional() async {
     await assertNoErrorsInCode('''
 class A {
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index 1e32f5c..f6ede25 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -1142,6 +1142,7 @@
       if (e is FieldFormalParameterElement) {
         _sink.write('this.');
       } else if (e is SuperFormalParameterElement) {
+        _sink.writeIf(e.hasDefaultValue, 'hasDefaultValue ');
         _sink.write('super.');
       }
 
diff --git a/pkg/analyzer/test/src/summary/elements_test.dart b/pkg/analyzer/test/src/summary/elements_test.dart
index 50f6271..81f8264 100644
--- a/pkg/analyzer/test/src/summary/elements_test.dart
+++ b/pkg/analyzer/test/src/summary/elements_test.dart
@@ -7249,6 +7249,43 @@
 ''');
   }
 
+  test_class_constructor_parameters_super_optionalNamed_defaultValue() async {
+    var library = await buildLibrary('''
+class A {
+  A({int a = 0});
+}
+
+class B extends A {
+  B({super.a});
+}
+''');
+
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          @12
+            parameters
+              optionalNamed default a @19
+                type: int
+                constantInitializer
+                  IntegerLiteral
+                    literal: 0 @23
+                    staticType: int
+      class B @37
+        supertype: A
+        constructors
+          @53
+            parameters
+              optionalNamed default final hasDefaultValue super.a @62
+                type: int
+                superConstructorParameter: self::@class::A::@constructor::new::@parameter::a
+            superConstructor: self::@class::A::@constructor::new
+''');
+  }
+
   test_class_constructor_parameters_super_optionalNamed_unresolved() async {
     var library = await buildLibrary('''
 class A {
@@ -7400,6 +7437,43 @@
 ''');
   }
 
+  test_class_constructor_parameters_super_requiredNamed_defaultValue() async {
+    var library = await buildLibrary('''
+class A {
+  A({int a = 0});
+}
+
+class B extends A {
+  B({required super.a});
+}
+''');
+
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          @12
+            parameters
+              optionalNamed default a @19
+                type: int
+                constantInitializer
+                  IntegerLiteral
+                    literal: 0 @23
+                    staticType: int
+      class B @37
+        supertype: A
+        constructors
+          @53
+            parameters
+              requiredNamed default final super.a @71
+                type: int
+                superConstructorParameter: self::@class::A::@constructor::new::@parameter::a
+            superConstructor: self::@class::A::@constructor::new
+''');
+  }
+
   test_class_constructor_parameters_super_requiredPositional() async {
     var library = await buildLibrary('''
 class A {