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}');