Extension type. Issue 53638. Don't crash on getInheritedConcreteMap2 invocation.

Bug: https://github.com/dart-lang/sdk/issues/53638
Change-Id: I49bc912a56fab85f206a997a84261b964a27d370
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/329782
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
index 6e1f25c..6d65127 100644
--- a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
+++ b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
@@ -174,6 +174,10 @@
   /// from the superclasses and mixins.
   Map<Name, ExecutableElement> getInheritedConcreteMap2(
       InterfaceElement element) {
+    if (element is ExtensionTypeElement) {
+      return const {};
+    }
+
     var interface = getInterface(element);
     return interface.superImplemented.last;
   }
diff --git a/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart b/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
index 7df19da..38d41bf4 100644
--- a/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
+++ b/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
@@ -513,6 +513,9 @@
     self::@class::A::@method::foo
   it
     self::@extensionType::B::@getter::it
+inheritedMap
+  foo: self::@extensionType::B::@method::foo
+  it: self::@extensionType::B::@getter::it
 ''');
   }
 
@@ -596,6 +599,8 @@
 redeclared
   foo
     self::@class::A::@method::foo
+inheritedMap
+  foo: self::@class::A::@method::foo
 ''');
   }
 
@@ -625,6 +630,8 @@
 redeclared
   foo
     self::@class::A::@getter::foo
+inheritedMap
+  foo: self::@class::A::@getter::foo
 ''');
   }
 
@@ -658,6 +665,9 @@
   it
     self::@extensionType::A1::@getter::it
     self::@extensionType::A2::@getter::it
+inheritedMap
+  foo: self::@extensionType::A1::@method::foo
+  it: self::@extensionType::A1::@getter::it
 ''');
   }
 
@@ -685,6 +695,9 @@
     self::@extensionType::A::@method::foo
   it
     self::@extensionType::A::@getter::it
+inheritedMap
+  foo: self::@extensionType::A::@method::foo
+  it: self::@extensionType::A::@getter::it
 ''');
   }
 
@@ -712,6 +725,9 @@
     self::@extensionType::A::@getter::foo
   it
     self::@extensionType::A::@getter::it
+inheritedMap
+  foo: self::@extensionType::A::@getter::foo
+  it: self::@extensionType::A::@getter::it
 ''');
   }
 
@@ -790,6 +806,10 @@
     MethodMember
       base: self::@class::A::@method::foo
       substitution: {T: int}
+inheritedMap
+  foo: MethodMember
+    base: self::@class::A::@method::foo
+    substitution: {T: int}
 ''');
   }
 
@@ -818,6 +838,9 @@
     self::@class::A::@method::foo
   it
     self::@extensionType::B::@getter::it
+inheritedMap
+  foo: self::@extensionType::B::@method::foo
+  it: self::@extensionType::B::@getter::it
 conflicts
   HasExtensionAndNotExtensionMemberConflict
     nonExtension
@@ -848,6 +871,8 @@
 redeclared
   foo
     self::@class::A::@method::foo
+inheritedMap
+  foo: self::@class::A::@method::foo
 ''');
   }
 
@@ -905,6 +930,8 @@
   foo
     self::@class::A::@method::foo
     self::@class::B::@method::foo
+inheritedMap
+  foo: self::@class::A::@method::foo
 ''');
   }
 
@@ -933,6 +960,8 @@
 redeclared
   foo
     self::@class::A::@method::foo
+inheritedMap
+  foo: self::@class::A::@method::foo
 ''');
   }
 
@@ -957,6 +986,8 @@
 redeclared
   foo=
     self::@class::A::@setter::foo
+inheritedMap
+  foo=: self::@class::A::@setter::foo
 ''');
   }
 
@@ -987,6 +1018,13 @@
     PropertyAccessorMember
       base: self::@extensionType::A::@getter::it
       substitution: {T: int}
+inheritedMap
+  foo: MethodMember
+    base: self::@extensionType::A::@method::foo
+    substitution: {T: int}
+  it: PropertyAccessorMember
+    base: self::@extensionType::A::@getter::it
+    substitution: {T: int}
 ''');
   }
 
@@ -1011,6 +1049,9 @@
     self::@extensionType::A::@method::foo
   it
     self::@extensionType::A::@getter::it
+inheritedMap
+  foo: self::@extensionType::A::@method::foo
+  it: self::@extensionType::A::@getter::it
 ''');
   }
 
@@ -1040,6 +1081,9 @@
   it
     self::@extensionType::A1::@getter::it
     self::@extensionType::A2::@getter::it
+inheritedMap
+  foo: self::@extensionType::A1::@method::foo
+  it: self::@extensionType::A1::@getter::it
 conflicts
   NotUniqueExtensionMemberConflict
     self::@extensionType::A1::@method::foo
@@ -1073,6 +1117,9 @@
   it
     self::@extensionType::B1::@getter::it
     self::@extensionType::B2::@getter::it
+inheritedMap
+  foo: self::@extensionType::A::@method::foo
+  it: self::@extensionType::B1::@getter::it
 ''');
   }
 
@@ -1104,6 +1151,12 @@
     dart:core::@class::Object::@getter::runtimeType
   toString
     dart:core::@class::Object::@method::toString
+inheritedMap
+  ==: dart:core::@class::Object::@method::==
+  hashCode: dart:core::@class::Object::@getter::hashCode
+  noSuchMethod: dart:core::@class::Object::@method::noSuchMethod
+  runtimeType: dart:core::@class::Object::@getter::runtimeType
+  toString: dart:core::@class::Object::@method::toString
 ''');
   }
 
@@ -1112,6 +1165,12 @@
     final inheritance = library.session.inheritanceManager;
     final interface = inheritance.getInterface(element);
 
+    // Should not throw.
+    inheritance.getInheritedConcreteMap2(element);
+
+    // Ensure that `inheritedMap` field is initialized.
+    inheritance.getInheritedMap2(element);
+
     final buffer = StringBuffer();
     final sink = TreeStringSink(
       sink: buffer,