Extension type. Issue 54802. Use extensionTypeErasure to decide if use super default value.

Bug: https://github.com/dart-lang/sdk/issues/54802
Change-Id: I01984f6db0ff61d5b24a1363feeb4185e64d31ab
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/350160
Reviewed-by: Phil Quitslund <pquitslund@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 844040f..40a0e4f1 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -1349,11 +1349,22 @@
 
   DartObject? get _superConstructorParameterDefaultValue {
     var superDefault = superConstructorParameter?.computeConstantValue();
-    var superDefaultType = superDefault?.type;
-    var libraryElement = library;
-    if (superDefaultType != null &&
-        libraryElement != null &&
-        libraryElement.typeSystem.isSubtypeOf(superDefaultType, type)) {
+    if (superDefault == null) {
+      return null;
+    }
+
+    var superDefaultType = superDefault.type;
+    if (superDefaultType == null) {
+      return null;
+    }
+
+    var typeSystem = library?.typeSystem;
+    if (typeSystem == null) {
+      return null;
+    }
+
+    var requiredType = type.extensionTypeErasure;
+    if (typeSystem.isSubtypeOf(superDefaultType, requiredType)) {
       return superDefault;
     }
 
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 af22783..715d89f 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
@@ -134,6 +134,20 @@
 ''');
   }
 
+  test_constructor_generative_nonNullable_named_optional_super_hasDefault_fromSuper_extensionType() async {
+    await assertNoErrorsInCode('''
+extension type const E(int it) {}
+
+class A {
+  A({E a = const E(0)});
+}
+
+class B extends A {
+  B({super.a});
+}
+''');
+  }
+
   test_constructor_generative_nonNullable_named_optional_super_noDefault() async {
     await assertErrorsInCode('''
 class A {