Skip to content

Commit 4217306

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Stop storing V1 ExecutableElementOrMember in InheritanceManager3.
Change-Id: I78cbf2497118364f792b58f7efb9d1c5ce68a6d3 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/436361 Reviewed-by: Paul Berry <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent c27ad09 commit 4217306

File tree

9 files changed

+74
-126
lines changed

9 files changed

+74
-126
lines changed

pkg/analyzer/lib/src/dart/element/element.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5199,7 +5199,7 @@ abstract class InterfaceElementImpl extends InstanceElementImpl
51995199
Map<Name, ExecutableElement> get interfaceMembers =>
52005200
(session as AnalysisSessionImpl).inheritanceManager
52015201
.getInterface(this)
5202-
.map2;
5202+
.map;
52035203

52045204
@override
52055205
List<InterfaceTypeImpl> get interfaces {
@@ -5276,7 +5276,7 @@ abstract class InterfaceElementImpl extends InstanceElementImpl
52765276

52775277
@override
52785278
List<ExecutableElement>? getOverridden(Name name) =>
5279-
(session as AnalysisSessionImpl).inheritanceManager.getOverridden4(
5279+
(session as AnalysisSessionImpl).inheritanceManager.getOverridden(
52805280
this,
52815281
name,
52825282
);

pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart

Lines changed: 52 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import 'package:analyzer/src/dart/element/type_algebra.dart';
1313
import 'package:analyzer/src/dart/element/type_system.dart';
1414
import 'package:analyzer/src/fine/requirements.dart';
1515
import 'package:analyzer/src/utilities/extensions/collection.dart';
16-
import 'package:analyzer/src/utilities/extensions/element.dart';
1716
import 'package:meta/meta.dart';
1817

1918
/// Failure because of there is no most specific signature in [candidates].
@@ -149,8 +148,7 @@ class InheritanceManager3 {
149148
return const {};
150149
}
151150

152-
var map = interface.superImplemented.last;
153-
return map.mapValue((e) => e.asElement2);
151+
return interface.superImplemented.last;
154152
}
155153

156154
/// Returns the mapping from names to most specific signatures of members
@@ -166,15 +164,15 @@ class InheritanceManager3 {
166164
element as InterfaceElementImpl; // TODO(scheglov): remove cast
167165

168166
var interface = getInterface(element);
169-
var inheritedMap = interface.inheritedMap2;
167+
var inheritedMap = interface.inheritedMap;
170168
if (inheritedMap == null) {
171-
inheritedMap = interface.inheritedMap2 = {};
169+
inheritedMap = interface.inheritedMap = {};
172170
_findMostSpecificFromNamedCandidates(
173171
element,
174172
inheritedMap,
175173
element is ExtensionTypeElementImpl
176-
? interface.redeclared2
177-
: interface.overridden2,
174+
? interface.redeclared
175+
: interface.overridden,
178176
);
179177
}
180178
return inheritedMap;
@@ -216,7 +214,7 @@ class InheritanceManager3 {
216214
if (element is ExtensionTypeFragmentImpl) {
217215
return null;
218216
}
219-
var superImplemented = interface.superImplemented2;
217+
var superImplemented = interface.superImplemented;
220218
if (forMixinIndex >= 0) {
221219
return superImplemented[forMixinIndex][name];
222220
}
@@ -228,10 +226,10 @@ class InheritanceManager3 {
228226
}
229227
}
230228
if (concrete) {
231-
return interface.implemented2[name];
229+
return interface.implemented[name];
232230
}
233231

234-
var result = interface.map2[name];
232+
var result = interface.map[name];
235233
globalResultRequirements?.record_interface_getMember(
236234
element: element,
237235
nameObj: name,
@@ -267,13 +265,20 @@ class InheritanceManager3 {
267265
/// Return all members of mixins, superclasses, and interfaces that a member
268266
/// with the given [name], defined in the [element], would override; or `null`
269267
/// if no members would be overridden.
270-
List<ExecutableElement2OrMember>? getOverridden4(
268+
List<ExecutableElement2OrMember>? getOverridden(
271269
InterfaceElement element,
272270
Name name,
273271
) {
274272
var interface = getInterface(element);
275-
var fragments = interface.overridden[name];
276-
return fragments?.map((fragment) => fragment.asElement2).toList();
273+
return interface.overridden[name];
274+
}
275+
276+
@Deprecated('Use getOverridden() instead')
277+
List<ExecutableElement2OrMember>? getOverridden4(
278+
InterfaceElement element,
279+
Name name,
280+
) {
281+
return getOverridden(element, name);
277282
}
278283

279284
/// Remove interfaces for classes defined in specified libraries.
@@ -288,7 +293,7 @@ class InheritanceManager3 {
288293
required MapSubstitution substitution,
289294
required Interface interface,
290295
}) {
291-
var map = interface.map2;
296+
var map = interface.map;
292297
for (var entry in map.entries) {
293298
var name = entry.key;
294299
var candidate = entry.value;
@@ -331,7 +336,7 @@ class InheritanceManager3 {
331336
required MapSubstitution substitution,
332337
required Interface mixin,
333338
}) {
334-
for (var entry in mixin.implemented2.entries) {
339+
for (var entry in mixin.implemented.entries) {
335340
var executable = entry.value;
336341
if (executable.isAbstract) {
337342
continue;
@@ -503,7 +508,7 @@ class InheritanceManager3 {
503508
interface: superTypeInterface,
504509
);
505510

506-
for (var entry in superTypeInterface.implemented2.entries) {
511+
for (var entry in superTypeInterface.implemented.entries) {
507512
var executable = entry.value;
508513
executable = ExecutableMember.from(executable, substitution);
509514
implemented[entry.key] = executable;
@@ -536,7 +541,7 @@ class InheritanceManager3 {
536541
var candidatesFromSuperAndMixin =
537542
<Name, List<ExecutableElement2OrMember>>{};
538543
var mixinConflicts = <Conflict>[];
539-
for (var entry in mixinInterface.map2.entries) {
544+
for (var entry in mixinInterface.map.entries) {
540545
var name = entry.key;
541546
var candidate = ExecutableMember.from(entry.value, substitution);
542547

@@ -654,22 +659,13 @@ class InheritanceManager3 {
654659
});
655660

656661
return Interface._(
657-
map2: interface,
658-
declared: declared.mapValue((e) => e.asElement),
659-
implemented: implemented.mapValue((e) => e.asElement),
660-
implemented2: implemented,
662+
map: interface,
663+
declared: declared,
664+
implemented: implemented,
661665
noSuchMethodForwarders: noSuchMethodForwarders,
662-
overridden: namedCandidates.mapValue(
663-
(elements) => elements.map((e) => e.asElement).toList(),
664-
),
665-
overridden2: namedCandidates,
666+
overridden: namedCandidates,
666667
redeclared: const {},
667-
redeclared2: const {},
668-
superImplemented:
669-
superImplemented
670-
.map((map) => map.mapValue((e) => e.asElement))
671-
.toList(),
672-
superImplemented2: superImplemented,
668+
superImplemented: superImplemented,
673669
conflicts: conflicts.toFixedList(),
674670
combinedSignatures: _combinedSignatures.remove(fragment.element) ?? {},
675671
);
@@ -711,7 +707,7 @@ class InheritanceManager3 {
711707
var notExtensionCandidates = <Name, _ExtensionTypeCandidates>{};
712708
for (var interface in element.interfaces) {
713709
var substitution = Substitution.fromInterfaceType(interface);
714-
for (var entry in getInterface(interface.element3).map2.entries) {
710+
for (var entry in getInterface(interface.element3).map.entries) {
715711
var name = entry.key;
716712
var executable = ExecutableMember.from(entry.value, substitution);
717713
if (executable.isExtensionTypeMember) {
@@ -781,7 +777,7 @@ class InheritanceManager3 {
781777
conflicts.add(
782778
NotUniqueExtensionMemberConflict(
783779
name: name,
784-
candidates2: notPrecluded,
780+
candidates: notPrecluded,
785781
),
786782
);
787783
continue;
@@ -843,19 +839,13 @@ class InheritanceManager3 {
843839
}
844840

845841
return Interface._(
846-
map2: implemented,
847-
declared: declared.mapValue((e) => e.asElement),
848-
implemented: implemented.mapValue((e) => e.asElement),
849-
implemented2: implemented,
842+
map: implemented,
843+
declared: declared,
844+
implemented: implemented,
850845
noSuchMethodForwarders: const {},
851846
overridden: const {},
852-
overridden2: const {},
853-
redeclared: uniqueRedeclared.mapValue(
854-
(elements) => elements.map((e) => e.asElement).toList(),
855-
),
856-
redeclared2: uniqueRedeclared,
847+
redeclared: uniqueRedeclared,
857848
superImplemented: const [],
858-
superImplemented2: const [],
859849
conflicts: conflicts.toFixedList(),
860850
combinedSignatures: _combinedSignatures.remove(fragment.element) ?? {},
861851
);
@@ -906,19 +896,13 @@ class InheritanceManager3 {
906896
_addImplemented(implemented, element);
907897

908898
return Interface._(
909-
map2: interface,
910-
declared: declared.mapValue((e) => e.asElement),
911-
implemented: implemented.mapValue((e) => e.asElement),
912-
implemented2: implemented,
899+
map: interface,
900+
declared: declared,
901+
implemented: implemented,
913902
noSuchMethodForwarders: {},
914-
overridden: interfaceCandidates.mapValue(
915-
(elements) => elements.map((e) => e.asElement).toList(),
916-
),
917-
overridden2: interfaceCandidates,
903+
overridden: interfaceCandidates,
918904
redeclared: const {},
919-
redeclared2: const {},
920-
superImplemented: [superInterface.mapValue((e) => e.asElement)],
921-
superImplemented2: [superInterface],
905+
superImplemented: [superInterface],
922906
conflicts:
923907
<Conflict>[...superConflicts, ...interfaceConflicts].toFixedList(),
924908
combinedSignatures: _combinedSignatures.remove(fragment.element) ?? {},
@@ -1250,73 +1234,42 @@ class InheritanceManager3 {
12501234
/// The instance interface of an [InterfaceType].
12511235
class Interface {
12521236
static final _empty = Interface._(
1253-
map2: const {},
1237+
map: const {},
12541238
declared: const {},
12551239
implemented: const {},
1256-
implemented2: const {},
12571240
noSuchMethodForwarders: <Name>{},
12581241
overridden: const {},
1259-
overridden2: const {},
12601242
redeclared: const {},
1261-
redeclared2: const {},
12621243
superImplemented: const [{}],
1263-
superImplemented2: const [{}],
12641244
conflicts: const [],
12651245
combinedSignatures: const {},
12661246
);
12671247

12681248
/// The map of names to their signature in the interface.
1269-
late final Map<Name, ExecutableElementOrMember> map = map2.mapValue(
1270-
(element) => element.asElement,
1271-
);
1272-
1273-
/// The map of names to their signature in the interface.
1274-
final Map<Name, ExecutableElement2OrMember> map2;
1275-
1276-
/// The map of declared names to their signatures.
1277-
final Map<Name, ExecutableElementOrMember> declared;
1249+
final Map<Name, ExecutableElement2OrMember> map;
12781250

12791251
/// The map of declared names to their signatures.
1280-
late final Map<Name, ExecutableElement> declared2 = declared.mapValue(
1281-
(element) => element.asElement2,
1282-
);
1283-
1284-
/// The map of names to their concrete implementations.
1285-
final Map<Name, ExecutableElementOrMember> implemented;
1252+
final Map<Name, ExecutableElement2OrMember> declared;
12861253

12871254
/// The map of names to their concrete implementations.
1288-
final Map<Name, ExecutableElement2OrMember> implemented2;
1255+
final Map<Name, ExecutableElement2OrMember> implemented;
12891256

12901257
/// The set of names that are `noSuchMethod` forwarders in [implemented].
12911258
final Set<Name> noSuchMethodForwarders;
12921259

12931260
/// The map of names to their signatures from the mixins, superclasses,
12941261
/// or interfaces.
1295-
final Map<Name, List<ExecutableElementOrMember>> overridden;
1296-
1297-
/// The map of names to their signatures from the mixins, superclasses,
1298-
/// or interfaces.
1299-
final Map<Name, List<ExecutableElement2OrMember>> overridden2;
1300-
1301-
/// The map of names to the signatures from superinterfaces that a member
1302-
/// declaration in this extension type redeclares.
1303-
final Map<Name, List<ExecutableElementOrMember>> redeclared;
1262+
final Map<Name, List<ExecutableElement2OrMember>> overridden;
13041263

13051264
/// The map of names to the signatures from superinterfaces that a member
13061265
/// declaration in this extension type redeclares.
1307-
final Map<Name, List<ExecutableElement2OrMember>> redeclared2;
1266+
final Map<Name, List<ExecutableElement2OrMember>> redeclared;
13081267

13091268
/// Each item of this list maps names to their concrete implementations.
13101269
/// The first item of the list is the nominal superclass, next the nominal
13111270
/// superclass plus the first mixin, etc. So, for the class like
13121271
/// `class C extends S with M1, M2`, we get `[S, S&M1, S&M1&M2]`.
1313-
final List<Map<Name, ExecutableElementOrMember>> superImplemented;
1314-
1315-
/// Each item of this list maps names to their concrete implementations.
1316-
/// The first item of the list is the nominal superclass, next the nominal
1317-
/// superclass plus the first mixin, etc. So, for the class like
1318-
/// `class C extends S with M1, M2`, we get `[S, S&M1, S&M1&M2]`.
1319-
final List<Map<Name, ExecutableElement2OrMember>> superImplemented2;
1272+
final List<Map<Name, ExecutableElement2OrMember>> superImplemented;
13201273

13211274
/// The list of conflicts between superinterfaces - the nominal superclass,
13221275
/// mixins, and interfaces. Does not include conflicts with the declared
@@ -1329,28 +1282,23 @@ class Interface {
13291282

13301283
/// The map of names to the most specific signatures from the mixins,
13311284
/// superclasses, or interfaces.
1332-
Map<Name, ExecutableElementOrMember>? inheritedMap;
1333-
1334-
/// The map of names to the most specific signatures from the mixins,
1335-
/// superclasses, or interfaces.
1336-
Map<Name, ExecutableElement2OrMember>? inheritedMap2;
1285+
Map<Name, ExecutableElement2OrMember>? inheritedMap;
13371286

13381287
Interface._({
1339-
required this.map2,
1288+
required this.map,
13401289
required this.declared,
13411290
required this.implemented,
1342-
required this.implemented2,
13431291
required this.noSuchMethodForwarders,
13441292
required this.overridden,
1345-
required this.overridden2,
13461293
required this.redeclared,
1347-
required this.redeclared2,
13481294
required this.superImplemented,
1349-
required this.superImplemented2,
13501295
required this.conflicts,
13511296
required this.combinedSignatures,
13521297
});
13531298

1299+
@Deprecated('Use map instead')
1300+
Map<Name, ExecutableElement2OrMember> get map2 => map;
1301+
13541302
/// Return `true` if the [name] is implemented in the supertype.
13551303
bool isSuperImplemented(Name name) {
13561304
return superImplemented.last.containsKey(name);
@@ -1444,11 +1392,11 @@ class Name {
14441392

14451393
/// Failure because of not unique extension type member.
14461394
class NotUniqueExtensionMemberConflict extends Conflict {
1447-
final List<ExecutableElement2OrMember> candidates2;
1395+
final List<ExecutableElement2OrMember> candidates;
14481396

14491397
NotUniqueExtensionMemberConflict({
14501398
required super.name,
1451-
required this.candidates2,
1399+
required this.candidates,
14521400
});
14531401
}
14541402

pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class GetterSetterTypesVerifier {
5858

5959
var libraryUri = element.library2.uri;
6060

61-
var interfaceMap = interface.map2;
61+
var interfaceMap = interface.map;
6262
for (var entry in interfaceMap.entries) {
6363
var getterName = entry.key;
6464
if (!getterName.isAccessibleFor(libraryUri)) continue;

pkg/analyzer/lib/src/error/inheritance_override.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,8 +306,8 @@ class _ClassVerifier {
306306
continue;
307307
}
308308

309-
var interfaceElement = interface.map[name]!.asElement2;
310-
var concreteElement = interface.implemented2[name];
309+
var interfaceElement = interface.map[name]!;
310+
var concreteElement = interface.implemented[name];
311311

312312
// No concrete implementation of the name.
313313
if (concreteElement == null) {

pkg/analyzer/lib/src/fine/library_manifest.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -834,7 +834,7 @@ class LibraryManifestBuilder {
834834
item.interface.beforeUpdating();
835835

836836
var interface = element.inheritanceManager.getInterface(element);
837-
for (var entry in interface.map2.entries) {
837+
for (var entry in interface.map.entries) {
838838
var executable = entry.value.baseElement;
839839

840840
var lookupName = executable.lookupName?.asLookupName;

pkg/analyzer/lib/src/generated/error_verifier.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3406,7 +3406,7 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
34063406
...conflict.extension,
34073407
]);
34083408
case NotUniqueExtensionMemberConflict _:
3409-
report(conflict.name.name, conflict.candidates2);
3409+
report(conflict.name.name, conflict.candidates);
34103410
}
34113411
}
34123412
}

0 commit comments

Comments
 (0)