Skip to content

Commit f5baa7c

Browse files
authored
Remove all references to MultiplyInheritedExecutableElement (#3914)
1 parent 2e64c2b commit f5baa7c

File tree

4 files changed

+2
-82
lines changed

4 files changed

+2
-82
lines changed

lib/src/model/inheriting_container.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -604,7 +604,7 @@ abstract class InheritingContainer extends Container {
604604
var getter = containerAccessorFrom(getterElement);
605605
var setter = containerAccessorFrom(setterElement);
606606
// Rebind [getterElement], [setterElement] as [ModelElement.from] can
607-
// resolve [MultiplyInheritedExecutableElement]s or resolve [Member]s.
607+
// resolve [Member]s.
608608
getterElement = getter?.element;
609609
setterElement = setter?.element;
610610
assert(getter != null || setter != null);

lib/src/model/model_element.dart

+1-30
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,6 @@ abstract class ModelElement
197197
_cacheNewModelElement(e, newModelElement, library,
198198
enclosingContainer: enclosingContainer);
199199

200-
assert(newModelElement.element is! MultiplyInheritedExecutableElement);
201200
return newModelElement;
202201
}
203202

@@ -255,7 +254,6 @@ abstract class ModelElement
255254
_cacheNewModelElement(e, newModelElement, library,
256255
enclosingContainer: enclosingContainer);
257256

258-
assert(newModelElement.element is! MultiplyInheritedExecutableElement);
259257
return newModelElement;
260258
}
261259

@@ -288,8 +286,6 @@ abstract class ModelElement
288286
Member? originalMember,
289287
}) {
290288
return switch (e) {
291-
MultiplyInheritedExecutableElement() => e.resolveMultiplyInheritedElement(
292-
library, packageGraph, enclosingContainer as Class),
293289
LibraryElement() => packageGraph.findButDoNotCreateLibraryFor(e)!,
294290
PrefixElement() => Prefix(e, library, packageGraph),
295291
EnumElement() => Enum(e, library, packageGraph),
@@ -349,8 +345,7 @@ abstract class ModelElement
349345
}) {
350346
// Accessors can be part of a [Container], or a part of a [Library].
351347
if (e.enclosingElement3 is ExtensionElement ||
352-
e.enclosingElement3 is InterfaceElement ||
353-
e is MultiplyInheritedExecutableElement) {
348+
e.enclosingElement3 is InterfaceElement) {
354349
if (enclosingContainer == null || enclosingContainer is Extension) {
355350
return ContainerAccessor(e, library, packageGraph, enclosingContainer);
356351
}
@@ -796,27 +791,3 @@ abstract class ModelElement
796791

797792
String get linkedObjectType => _packageGraph.dartCoreObject;
798793
}
799-
800-
extension on MultiplyInheritedExecutableElement {
801-
/// Resolves this very rare case incorrectly by picking the closest element in
802-
/// the inheritance and interface chains from the analyzer.
803-
// TODO(jcollins-g): Implement resolution per ECMA-408 4th edition, page 39
804-
// #22.
805-
ModelElement resolveMultiplyInheritedElement(
806-
Library library, PackageGraph packageGraph, Class enclosingClass) {
807-
var inheritables = inheritedElements
808-
.map((e) => ModelElement.forElement(e, packageGraph) as Inheritable);
809-
late Inheritable foundInheritable;
810-
var lowIndex = enclosingClass.inheritanceChain.length;
811-
for (var inheritable in inheritables) {
812-
var index = enclosingClass.inheritanceChain
813-
.indexOf(inheritable.enclosingElement as InheritingContainer);
814-
if (index < lowIndex) {
815-
foundInheritable = inheritable;
816-
lowIndex = index;
817-
}
818-
}
819-
return ModelElement.for_(foundInheritable.element, library, packageGraph,
820-
enclosingContainer: enclosingClass);
821-
}
822-
}

test/end2end/model_test.dart

-33
Original file line numberDiff line numberDiff line change
@@ -1068,39 +1068,6 @@ void main() async {
10681068
});
10691069
});
10701070

1071-
group('MultiplyInheritedExecutableElement handling', () {
1072-
late final Class BaseThingy, BaseThingy2, ImplementingThingy2;
1073-
late final Method aImplementingThingyMethod;
1074-
late final Field aImplementingThingyField;
1075-
late final Field aImplementingThingy;
1076-
late final Accessor aImplementingThingyAccessor;
1077-
1078-
setUpAll(() {
1079-
BaseThingy = fakeLibrary.classes.named('BaseThingy');
1080-
BaseThingy2 = fakeLibrary.classes.named('BaseThingy2');
1081-
ImplementingThingy2 = fakeLibrary.classes.named('ImplementingThingy2');
1082-
1083-
aImplementingThingy =
1084-
ImplementingThingy2.instanceFields.named('aImplementingThingy');
1085-
aImplementingThingyMethod = ImplementingThingy2.instanceMethods
1086-
.named('aImplementingThingyMethod');
1087-
aImplementingThingyField =
1088-
ImplementingThingy2.instanceFields.named('aImplementingThingyField');
1089-
aImplementingThingyAccessor = aImplementingThingyField.getter!;
1090-
});
1091-
1092-
test('Verify behavior of imperfect resolver', () {
1093-
expect(aImplementingThingy.element.enclosingElement3,
1094-
equals(BaseThingy2.element));
1095-
expect(aImplementingThingyMethod.element.enclosingElement3,
1096-
equals(BaseThingy.element));
1097-
expect(aImplementingThingyField.element.enclosingElement3,
1098-
equals(BaseThingy.element));
1099-
expect(aImplementingThingyAccessor.element.enclosingElement3,
1100-
equals(BaseThingy.element));
1101-
});
1102-
});
1103-
11041071
group('Docs as HTML', () {
11051072
late final Class Apple, B, superAwesomeClass, foo2;
11061073
late final TopLevelVariable incorrectDocReferenceFromEx;

testing/test_package/lib/fake.dart

-18
Original file line numberDiff line numberDiff line change
@@ -83,24 +83,6 @@ export 'src/reexport_this.dart';
8383
/// Does not render with emoji 3ffe:2a00:100:7031::1
8484
const int hasMarkdownInDoc = 1;
8585

86-
abstract class ImplementingThingy implements BaseThingy {}
87-
88-
abstract class BaseThingy {
89-
// ignore: public_member_api_docs
90-
ImplementingThingy get aImplementingThingy;
91-
ImplementingThingy? aImplementingThingyField;
92-
void aImplementingThingyMethod(ImplementingThingy parameter);
93-
}
94-
95-
abstract class ImplementingThingy2 implements BaseThingy2, ImplementingThingy {}
96-
97-
/// Test for MultiplyInheritedExecutableElement handling.
98-
abstract class BaseThingy2 implements BaseThingy {
99-
/// BaseThingy2's doc for aImplementingThingy.
100-
@override
101-
ImplementingThingy2 get aImplementingThingy;
102-
}
103-
10486
/// This function has a link to a renamed library class member.
10587
///
10688
/// Link to library: [renamedLib]

0 commit comments

Comments
 (0)