@@ -745,6 +745,7 @@ class InheritanceManager3 {
745
745
noSuchMethodForwarders: noSuchMethodForwarders,
746
746
overridden: namedCandidates,
747
747
redeclared: const {},
748
+ redeclared2: const {},
748
749
superImplemented: superImplemented,
749
750
conflicts: conflicts.toFixedList (),
750
751
);
@@ -918,13 +919,30 @@ class InheritanceManager3 {
918
919
}
919
920
}
920
921
922
+ var uniqueRedeclared2 = < Name , List <ExecutableElement2 >> {};
923
+ for (var entry in redeclared.entries) {
924
+ var name = entry.key;
925
+ var fragments =
926
+ entry.value.map ((fragment) => fragment.asExecutableElement2);
927
+ if (fragments.length == 1 ) {
928
+ uniqueRedeclared2[name] = fragments.toFixedList ();
929
+ } else {
930
+ var uniqueElements = < ExecutableElement2 > {};
931
+ for (var fragment in fragments) {
932
+ uniqueElements.add (fragment);
933
+ }
934
+ uniqueRedeclared2[name] = uniqueElements.toFixedList ();
935
+ }
936
+ }
937
+
921
938
return Interface ._(
922
939
map: implemented,
923
940
declared: declared,
924
941
implemented: implemented,
925
942
noSuchMethodForwarders: const {},
926
943
overridden: const {},
927
944
redeclared: uniqueRedeclared,
945
+ redeclared2: uniqueRedeclared2,
928
946
superImplemented: const [],
929
947
conflicts: conflicts.toFixedList (),
930
948
);
@@ -983,6 +1001,7 @@ class InheritanceManager3 {
983
1001
noSuchMethodForwarders: {},
984
1002
overridden: interfaceCandidates,
985
1003
redeclared: const {},
1004
+ redeclared2: const {},
986
1005
superImplemented: [superInterface],
987
1006
conflicts: < Conflict > [
988
1007
...superConflicts,
@@ -1201,6 +1220,7 @@ class Interface {
1201
1220
noSuchMethodForwarders: < Name > {},
1202
1221
overridden: const {},
1203
1222
redeclared: const {},
1223
+ redeclared2: const {},
1204
1224
superImplemented: const [{}],
1205
1225
conflicts: const [],
1206
1226
);
@@ -1225,6 +1245,10 @@ class Interface {
1225
1245
/// declaration in this extension type redeclares.
1226
1246
final Map <Name , List <ExecutableElement >> redeclared;
1227
1247
1248
+ /// The map of names to the signatures from superinterfaces that a member
1249
+ /// declaration in this extension type redeclares.
1250
+ final Map <Name , List <ExecutableElement2 >> redeclared2;
1251
+
1228
1252
/// Each item of this list maps names to their concrete implementations.
1229
1253
/// The first item of the list is the nominal superclass, next the nominal
1230
1254
/// superclass plus the first mixin, etc. So, for the class like
@@ -1247,6 +1271,7 @@ class Interface {
1247
1271
required this .noSuchMethodForwarders,
1248
1272
required this .overridden,
1249
1273
required this .redeclared,
1274
+ required this .redeclared2,
1250
1275
required this .superImplemented,
1251
1276
required this .conflicts,
1252
1277
});
@@ -1412,3 +1437,11 @@ class _ParameterDesc {
1412
1437
other.name == name;
1413
1438
}
1414
1439
}
1440
+
1441
+ extension on ExecutableElement {
1442
+ ExecutableElement2 get asExecutableElement2 => switch (this ) {
1443
+ ExecutableFragment (: var element) => element,
1444
+ ExecutableMember member => member,
1445
+ _ => throw UnsupportedError ('Unsupported type: $runtimeType ' ),
1446
+ };
1447
+ }
0 commit comments