Extension type. Issue 54454. If no explicit interfaces, use implcit 'Object?' during UP.

Bug: https://github.com/dart-lang/sdk/issues/54454
Change-Id: Ib3229abf0229d2422047f22db05bcba605e5ad61
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/343641
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/dart/element/least_upper_bound.dart b/pkg/analyzer/lib/src/dart/element/least_upper_bound.dart
index a18ac66..6195a60 100644
--- a/pkg/analyzer/lib/src/dart/element/least_upper_bound.dart
+++ b/pkg/analyzer/lib/src/dart/element/least_upper_bound.dart
@@ -227,6 +227,14 @@
         return type.nullabilitySuffix == NullabilitySuffix.none ? 1 : 0;
       }
     }
+
+    // Extension type without interfaces, implicit `Object?`
+    if (element is ExtensionTypeElement) {
+      if (element.interfaces.isEmpty) {
+        return 1;
+      }
+    }
+
     int longestPath = 0;
     try {
       visitedElements.add(element);
diff --git a/pkg/analyzer/test/src/dart/element/upper_lower_bound_test.dart b/pkg/analyzer/test/src/dart/element/upper_lower_bound_test.dart
index 4b38968..298cf12 100644
--- a/pkg/analyzer/test/src/dart/element/upper_lower_bound_test.dart
+++ b/pkg/analyzer/test/src/dart/element/upper_lower_bound_test.dart
@@ -2861,6 +2861,38 @@
     );
   }
 
+  void test_extensionType_implementExtensionType_implicitObjectQuestion() {
+    // extension type A(Object?) {}
+    // extension type B(Object?) implements A {}
+    // extension type C(Object?) implements A {}
+
+    final A_none = interfaceTypeNone(
+      extensionType(
+        'A',
+        representationType: objectQuestion,
+        interfaces: [],
+      ),
+    );
+
+    _checkLeastUpperBound(
+      interfaceTypeNone(
+        extensionType(
+          'B',
+          representationType: objectQuestion,
+          interfaces: [A_none],
+        ),
+      ),
+      interfaceTypeNone(
+        extensionType(
+          'C',
+          representationType: objectQuestion,
+          interfaces: [A_none],
+        ),
+      ),
+      A_none,
+    );
+  }
+
   void test_extensionType_noTypeParameters_interfaces() {
     // extension type A(int) implements int {}
     // extension type B(double) implements double {}