Elements. Stop storing V1 ExecutableElementOrMember in InheritanceManager3.

Change-Id: I78cbf2497118364f792b58f7efb9d1c5ce68a6d3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/436361
Reviewed-by: Paul Berry <paulberry@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 e03cb43..9fa779c 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -5199,7 +5199,7 @@
   Map<Name, ExecutableElement> get interfaceMembers =>
       (session as AnalysisSessionImpl).inheritanceManager
           .getInterface(this)
-          .map2;
+          .map;
 
   @override
   List<InterfaceTypeImpl> get interfaces {
@@ -5276,7 +5276,7 @@
 
   @override
   List<ExecutableElement>? getOverridden(Name name) =>
-      (session as AnalysisSessionImpl).inheritanceManager.getOverridden4(
+      (session as AnalysisSessionImpl).inheritanceManager.getOverridden(
         this,
         name,
       );
diff --git a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
index 92a8017..ec814bc 100644
--- a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
+++ b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
@@ -13,7 +13,6 @@
 import 'package:analyzer/src/dart/element/type_system.dart';
 import 'package:analyzer/src/fine/requirements.dart';
 import 'package:analyzer/src/utilities/extensions/collection.dart';
-import 'package:analyzer/src/utilities/extensions/element.dart';
 import 'package:meta/meta.dart';
 
 /// Failure because of there is no most specific signature in [candidates].
@@ -149,8 +148,7 @@
       return const {};
     }
 
-    var map = interface.superImplemented.last;
-    return map.mapValue((e) => e.asElement2);
+    return interface.superImplemented.last;
   }
 
   /// Returns the mapping from names to most specific signatures of members
@@ -166,15 +164,15 @@
     element as InterfaceElementImpl; // TODO(scheglov): remove cast
 
     var interface = getInterface(element);
-    var inheritedMap = interface.inheritedMap2;
+    var inheritedMap = interface.inheritedMap;
     if (inheritedMap == null) {
-      inheritedMap = interface.inheritedMap2 = {};
+      inheritedMap = interface.inheritedMap = {};
       _findMostSpecificFromNamedCandidates(
         element,
         inheritedMap,
         element is ExtensionTypeElementImpl
-            ? interface.redeclared2
-            : interface.overridden2,
+            ? interface.redeclared
+            : interface.overridden,
       );
     }
     return inheritedMap;
@@ -216,7 +214,7 @@
       if (element is ExtensionTypeFragmentImpl) {
         return null;
       }
-      var superImplemented = interface.superImplemented2;
+      var superImplemented = interface.superImplemented;
       if (forMixinIndex >= 0) {
         return superImplemented[forMixinIndex][name];
       }
@@ -228,10 +226,10 @@
       }
     }
     if (concrete) {
-      return interface.implemented2[name];
+      return interface.implemented[name];
     }
 
-    var result = interface.map2[name];
+    var result = interface.map[name];
     globalResultRequirements?.record_interface_getMember(
       element: element,
       nameObj: name,
@@ -267,13 +265,20 @@
   /// Return all members of mixins, superclasses, and interfaces that a member
   /// with the given [name], defined in the [element], would override; or `null`
   /// if no members would be overridden.
-  List<ExecutableElement2OrMember>? getOverridden4(
+  List<ExecutableElement2OrMember>? getOverridden(
     InterfaceElement element,
     Name name,
   ) {
     var interface = getInterface(element);
-    var fragments = interface.overridden[name];
-    return fragments?.map((fragment) => fragment.asElement2).toList();
+    return interface.overridden[name];
+  }
+
+  @Deprecated('Use getOverridden() instead')
+  List<ExecutableElement2OrMember>? getOverridden4(
+    InterfaceElement element,
+    Name name,
+  ) {
+    return getOverridden(element, name);
   }
 
   /// Remove interfaces for classes defined in specified libraries.
@@ -288,7 +293,7 @@
     required MapSubstitution substitution,
     required Interface interface,
   }) {
-    var map = interface.map2;
+    var map = interface.map;
     for (var entry in map.entries) {
       var name = entry.key;
       var candidate = entry.value;
@@ -331,7 +336,7 @@
     required MapSubstitution substitution,
     required Interface mixin,
   }) {
-    for (var entry in mixin.implemented2.entries) {
+    for (var entry in mixin.implemented.entries) {
       var executable = entry.value;
       if (executable.isAbstract) {
         continue;
@@ -503,7 +508,7 @@
         interface: superTypeInterface,
       );
 
-      for (var entry in superTypeInterface.implemented2.entries) {
+      for (var entry in superTypeInterface.implemented.entries) {
         var executable = entry.value;
         executable = ExecutableMember.from(executable, substitution);
         implemented[entry.key] = executable;
@@ -536,7 +541,7 @@
       var candidatesFromSuperAndMixin =
           <Name, List<ExecutableElement2OrMember>>{};
       var mixinConflicts = <Conflict>[];
-      for (var entry in mixinInterface.map2.entries) {
+      for (var entry in mixinInterface.map.entries) {
         var name = entry.key;
         var candidate = ExecutableMember.from(entry.value, substitution);
 
@@ -654,22 +659,13 @@
     });
 
     return Interface._(
-      map2: interface,
-      declared: declared.mapValue((e) => e.asElement),
-      implemented: implemented.mapValue((e) => e.asElement),
-      implemented2: implemented,
+      map: interface,
+      declared: declared,
+      implemented: implemented,
       noSuchMethodForwarders: noSuchMethodForwarders,
-      overridden: namedCandidates.mapValue(
-        (elements) => elements.map((e) => e.asElement).toList(),
-      ),
-      overridden2: namedCandidates,
+      overridden: namedCandidates,
       redeclared: const {},
-      redeclared2: const {},
-      superImplemented:
-          superImplemented
-              .map((map) => map.mapValue((e) => e.asElement))
-              .toList(),
-      superImplemented2: superImplemented,
+      superImplemented: superImplemented,
       conflicts: conflicts.toFixedList(),
       combinedSignatures: _combinedSignatures.remove(fragment.element) ?? {},
     );
@@ -711,7 +707,7 @@
     var notExtensionCandidates = <Name, _ExtensionTypeCandidates>{};
     for (var interface in element.interfaces) {
       var substitution = Substitution.fromInterfaceType(interface);
-      for (var entry in getInterface(interface.element3).map2.entries) {
+      for (var entry in getInterface(interface.element3).map.entries) {
         var name = entry.key;
         var executable = ExecutableMember.from(entry.value, substitution);
         if (executable.isExtensionTypeMember) {
@@ -781,7 +777,7 @@
         conflicts.add(
           NotUniqueExtensionMemberConflict(
             name: name,
-            candidates2: notPrecluded,
+            candidates: notPrecluded,
           ),
         );
         continue;
@@ -843,19 +839,13 @@
     }
 
     return Interface._(
-      map2: implemented,
-      declared: declared.mapValue((e) => e.asElement),
-      implemented: implemented.mapValue((e) => e.asElement),
-      implemented2: implemented,
+      map: implemented,
+      declared: declared,
+      implemented: implemented,
       noSuchMethodForwarders: const {},
       overridden: const {},
-      overridden2: const {},
-      redeclared: uniqueRedeclared.mapValue(
-        (elements) => elements.map((e) => e.asElement).toList(),
-      ),
-      redeclared2: uniqueRedeclared,
+      redeclared: uniqueRedeclared,
       superImplemented: const [],
-      superImplemented2: const [],
       conflicts: conflicts.toFixedList(),
       combinedSignatures: _combinedSignatures.remove(fragment.element) ?? {},
     );
@@ -906,19 +896,13 @@
     _addImplemented(implemented, element);
 
     return Interface._(
-      map2: interface,
-      declared: declared.mapValue((e) => e.asElement),
-      implemented: implemented.mapValue((e) => e.asElement),
-      implemented2: implemented,
+      map: interface,
+      declared: declared,
+      implemented: implemented,
       noSuchMethodForwarders: {},
-      overridden: interfaceCandidates.mapValue(
-        (elements) => elements.map((e) => e.asElement).toList(),
-      ),
-      overridden2: interfaceCandidates,
+      overridden: interfaceCandidates,
       redeclared: const {},
-      redeclared2: const {},
-      superImplemented: [superInterface.mapValue((e) => e.asElement)],
-      superImplemented2: [superInterface],
+      superImplemented: [superInterface],
       conflicts:
           <Conflict>[...superConflicts, ...interfaceConflicts].toFixedList(),
       combinedSignatures: _combinedSignatures.remove(fragment.element) ?? {},
@@ -1250,73 +1234,42 @@
 /// The instance interface of an [InterfaceType].
 class Interface {
   static final _empty = Interface._(
-    map2: const {},
+    map: const {},
     declared: const {},
     implemented: const {},
-    implemented2: const {},
     noSuchMethodForwarders: <Name>{},
     overridden: const {},
-    overridden2: const {},
     redeclared: const {},
-    redeclared2: const {},
     superImplemented: const [{}],
-    superImplemented2: const [{}],
     conflicts: const [],
     combinedSignatures: const {},
   );
 
   /// The map of names to their signature in the interface.
-  late final Map<Name, ExecutableElementOrMember> map = map2.mapValue(
-    (element) => element.asElement,
-  );
-
-  /// The map of names to their signature in the interface.
-  final Map<Name, ExecutableElement2OrMember> map2;
+  final Map<Name, ExecutableElement2OrMember> map;
 
   /// The map of declared names to their signatures.
-  final Map<Name, ExecutableElementOrMember> declared;
-
-  /// The map of declared names to their signatures.
-  late final Map<Name, ExecutableElement> declared2 = declared.mapValue(
-    (element) => element.asElement2,
-  );
+  final Map<Name, ExecutableElement2OrMember> declared;
 
   /// The map of names to their concrete implementations.
-  final Map<Name, ExecutableElementOrMember> implemented;
-
-  /// The map of names to their concrete implementations.
-  final Map<Name, ExecutableElement2OrMember> implemented2;
+  final Map<Name, ExecutableElement2OrMember> implemented;
 
   /// The set of names that are `noSuchMethod` forwarders in [implemented].
   final Set<Name> noSuchMethodForwarders;
 
   /// The map of names to their signatures from the mixins, superclasses,
   /// or interfaces.
-  final Map<Name, List<ExecutableElementOrMember>> overridden;
-
-  /// The map of names to their signatures from the mixins, superclasses,
-  /// or interfaces.
-  final Map<Name, List<ExecutableElement2OrMember>> overridden2;
+  final Map<Name, List<ExecutableElement2OrMember>> overridden;
 
   /// The map of names to the signatures from superinterfaces that a member
   /// declaration in this extension type redeclares.
-  final Map<Name, List<ExecutableElementOrMember>> redeclared;
-
-  /// The map of names to the signatures from superinterfaces that a member
-  /// declaration in this extension type redeclares.
-  final Map<Name, List<ExecutableElement2OrMember>> redeclared2;
+  final Map<Name, List<ExecutableElement2OrMember>> redeclared;
 
   /// Each item of this list maps names to their concrete implementations.
   /// The first item of the list is the nominal superclass, next the nominal
   /// superclass plus the first mixin, etc. So, for the class like
   /// `class C extends S with M1, M2`, we get `[S, S&M1, S&M1&M2]`.
-  final List<Map<Name, ExecutableElementOrMember>> superImplemented;
-
-  /// Each item of this list maps names to their concrete implementations.
-  /// The first item of the list is the nominal superclass, next the nominal
-  /// superclass plus the first mixin, etc. So, for the class like
-  /// `class C extends S with M1, M2`, we get `[S, S&M1, S&M1&M2]`.
-  final List<Map<Name, ExecutableElement2OrMember>> superImplemented2;
+  final List<Map<Name, ExecutableElement2OrMember>> superImplemented;
 
   /// The list of conflicts between superinterfaces - the nominal superclass,
   /// mixins, and interfaces.  Does not include conflicts with the declared
@@ -1329,28 +1282,23 @@
 
   /// The map of names to the most specific signatures from the mixins,
   /// superclasses, or interfaces.
-  Map<Name, ExecutableElementOrMember>? inheritedMap;
-
-  /// The map of names to the most specific signatures from the mixins,
-  /// superclasses, or interfaces.
-  Map<Name, ExecutableElement2OrMember>? inheritedMap2;
+  Map<Name, ExecutableElement2OrMember>? inheritedMap;
 
   Interface._({
-    required this.map2,
+    required this.map,
     required this.declared,
     required this.implemented,
-    required this.implemented2,
     required this.noSuchMethodForwarders,
     required this.overridden,
-    required this.overridden2,
     required this.redeclared,
-    required this.redeclared2,
     required this.superImplemented,
-    required this.superImplemented2,
     required this.conflicts,
     required this.combinedSignatures,
   });
 
+  @Deprecated('Use map instead')
+  Map<Name, ExecutableElement2OrMember> get map2 => map;
+
   /// Return `true` if the [name] is implemented in the supertype.
   bool isSuperImplemented(Name name) {
     return superImplemented.last.containsKey(name);
@@ -1444,11 +1392,11 @@
 
 /// Failure because of not unique extension type member.
 class NotUniqueExtensionMemberConflict extends Conflict {
-  final List<ExecutableElement2OrMember> candidates2;
+  final List<ExecutableElement2OrMember> candidates;
 
   NotUniqueExtensionMemberConflict({
     required super.name,
-    required this.candidates2,
+    required this.candidates,
   });
 }
 
diff --git a/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart b/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
index 17d8ced..d537c57 100644
--- a/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
+++ b/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
@@ -58,7 +58,7 @@
 
     var libraryUri = element.library2.uri;
 
-    var interfaceMap = interface.map2;
+    var interfaceMap = interface.map;
     for (var entry in interfaceMap.entries) {
       var getterName = entry.key;
       if (!getterName.isAccessibleFor(libraryUri)) continue;
diff --git a/pkg/analyzer/lib/src/error/inheritance_override.dart b/pkg/analyzer/lib/src/error/inheritance_override.dart
index 41d05eb..eb34eda 100644
--- a/pkg/analyzer/lib/src/error/inheritance_override.dart
+++ b/pkg/analyzer/lib/src/error/inheritance_override.dart
@@ -306,8 +306,8 @@
           continue;
         }
 
-        var interfaceElement = interface.map[name]!.asElement2;
-        var concreteElement = interface.implemented2[name];
+        var interfaceElement = interface.map[name]!;
+        var concreteElement = interface.implemented[name];
 
         // No concrete implementation of the name.
         if (concreteElement == null) {
diff --git a/pkg/analyzer/lib/src/fine/library_manifest.dart b/pkg/analyzer/lib/src/fine/library_manifest.dart
index b55b019..5129997 100644
--- a/pkg/analyzer/lib/src/fine/library_manifest.dart
+++ b/pkg/analyzer/lib/src/fine/library_manifest.dart
@@ -834,7 +834,7 @@
     item.interface.beforeUpdating();
 
     var interface = element.inheritanceManager.getInterface(element);
-    for (var entry in interface.map2.entries) {
+    for (var entry in interface.map.entries) {
       var executable = entry.value.baseElement;
 
       var lookupName = executable.lookupName?.asLookupName;
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 732c478..712c3cf 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -3406,7 +3406,7 @@
             ...conflict.extension,
           ]);
         case NotUniqueExtensionMemberConflict _:
-          report(conflict.name.name, conflict.candidates2);
+          report(conflict.name.name, conflict.candidates);
       }
     }
   }
diff --git a/pkg/analyzer/lib/src/summary2/instance_member_inferrer.dart b/pkg/analyzer/lib/src/summary2/instance_member_inferrer.dart
index fa90046..fdd63fe 100644
--- a/pkg/analyzer/lib/src/summary2/instance_member_inferrer.dart
+++ b/pkg/analyzer/lib/src/summary2/instance_member_inferrer.dart
@@ -117,7 +117,7 @@
     }
 
     var getterName = Name(elementLibraryUri, elementName);
-    var overriddenGetters = inheritance.getOverridden4(
+    var overriddenGetters = inheritance.getOverridden(
       currentInterfaceElement.element,
       getterName,
     );
@@ -129,7 +129,7 @@
     }
 
     var setterName = Name(elementLibraryUri, '$elementName=');
-    var overriddenSetters = inheritance.getOverridden4(
+    var overriddenSetters = inheritance.getOverridden(
       currentInterfaceElement.element,
       setterName,
     );
@@ -413,7 +413,7 @@
     }
 
     var name = Name(element.library.source.uri, element.name2 ?? '');
-    var overriddenElements = inheritance.getOverridden4(
+    var overriddenElements = inheritance.getOverridden(
       currentInterfaceElement.element,
       name,
     );
diff --git a/pkg/analyzer/test/id_tests/inheritance_test.dart b/pkg/analyzer/test/id_tests/inheritance_test.dart
index d323691..978568e 100644
--- a/pkg/analyzer/test/id_tests/inheritance_test.dart
+++ b/pkg/analyzer/test/id_tests/inheritance_test.dart
@@ -107,8 +107,8 @@
       }
 
       var interface = inheritance.getInterface(element);
-      for (var name in interface.map2.keys) {
-        var executable = interface.map2[name]!;
+      for (var name in interface.map.keys) {
+        var executable = interface.map[name]!;
 
         var enclosingClass = executable.enclosingElement as InterfaceElement;
         if (enclosingClass is ClassElement && enclosingClass.isDartCoreObject) {
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 48822bd..f13b6ff 100644
--- a/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
+++ b/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
@@ -3012,7 +3012,7 @@
     required String name,
     String? expected,
   }) {
-    var members = manager.getOverridden4(
+    var members = manager.getOverridden(
       findElement2.classOrMixin(className),
       Name(null, name),
     );
@@ -3121,19 +3121,19 @@
        _configuration = configuration;
 
   void write(Interface interface) {
-    _writeNameToMap('map', interface.map2);
-    _writeNameToMap('declared', interface.declared2);
+    _writeNameToMap('map', interface.map);
+    _writeNameToMap('declared', interface.declared);
 
     if (_configuration.withoutIdenticalImplemented) {
-      expect(interface.implemented2, same(interface.map2));
+      expect(interface.implemented, same(interface.map));
     } else {
-      _writeNameToMap('implemented', interface.implemented2);
+      _writeNameToMap('implemented', interface.implemented);
     }
 
-    _writeNameToListMap('overridden', interface.overridden2);
-    _writeNameToListMap('redeclared', interface.redeclared2);
-    _writeListOfMaps('superImplemented', interface.superImplemented2);
-    _writeNameToMap('inheritedMap', interface.inheritedMap2 ?? {});
+    _writeNameToListMap('overridden', interface.overridden);
+    _writeNameToListMap('redeclared', interface.redeclared);
+    _writeListOfMaps('superImplemented', interface.superImplemented);
+    _writeNameToMap('inheritedMap', interface.inheritedMap ?? {});
     _writeConflicts(interface.conflicts);
   }
 
@@ -3190,7 +3190,7 @@
           case NotUniqueExtensionMemberConflict _:
             _elementPrinter.writeElementList2(
               'NotUniqueExtensionMemberConflict',
-              conflict.candidates2,
+              conflict.candidates,
             );
           default:
             fail('Not implemented: ${conflict.runtimeType}');