diff --git a/lib/src/model/inheriting_container.dart b/lib/src/model/inheriting_container.dart index e769d682d2..42104927b9 100644 --- a/lib/src/model/inheriting_container.dart +++ b/lib/src/model/inheriting_container.dart @@ -604,7 +604,7 @@ abstract class InheritingContainer extends Container { var getter = containerAccessorFrom(getterElement); var setter = containerAccessorFrom(setterElement); // Rebind [getterElement], [setterElement] as [ModelElement.from] can - // resolve [MultiplyInheritedExecutableElement]s or resolve [Member]s. + // resolve [Member]s. getterElement = getter?.element; setterElement = setter?.element; assert(getter != null || setter != null); diff --git a/lib/src/model/model_element.dart b/lib/src/model/model_element.dart index 86da73271e..57bc5d514d 100644 --- a/lib/src/model/model_element.dart +++ b/lib/src/model/model_element.dart @@ -197,7 +197,6 @@ abstract class ModelElement _cacheNewModelElement(e, newModelElement, library, enclosingContainer: enclosingContainer); - assert(newModelElement.element is! MultiplyInheritedExecutableElement); return newModelElement; } @@ -255,7 +254,6 @@ abstract class ModelElement _cacheNewModelElement(e, newModelElement, library, enclosingContainer: enclosingContainer); - assert(newModelElement.element is! MultiplyInheritedExecutableElement); return newModelElement; } @@ -288,8 +286,6 @@ abstract class ModelElement Member? originalMember, }) { return switch (e) { - MultiplyInheritedExecutableElement() => e.resolveMultiplyInheritedElement( - library, packageGraph, enclosingContainer as Class), LibraryElement() => packageGraph.findButDoNotCreateLibraryFor(e)!, PrefixElement() => Prefix(e, library, packageGraph), EnumElement() => Enum(e, library, packageGraph), @@ -349,8 +345,7 @@ abstract class ModelElement }) { // Accessors can be part of a [Container], or a part of a [Library]. if (e.enclosingElement3 is ExtensionElement || - e.enclosingElement3 is InterfaceElement || - e is MultiplyInheritedExecutableElement) { + e.enclosingElement3 is InterfaceElement) { if (enclosingContainer == null || enclosingContainer is Extension) { return ContainerAccessor(e, library, packageGraph, enclosingContainer); } @@ -796,27 +791,3 @@ abstract class ModelElement String get linkedObjectType => _packageGraph.dartCoreObject; } - -extension on MultiplyInheritedExecutableElement { - /// Resolves this very rare case incorrectly by picking the closest element in - /// the inheritance and interface chains from the analyzer. - // TODO(jcollins-g): Implement resolution per ECMA-408 4th edition, page 39 - // #22. - ModelElement resolveMultiplyInheritedElement( - Library library, PackageGraph packageGraph, Class enclosingClass) { - var inheritables = inheritedElements - .map((e) => ModelElement.forElement(e, packageGraph) as Inheritable); - late Inheritable foundInheritable; - var lowIndex = enclosingClass.inheritanceChain.length; - for (var inheritable in inheritables) { - var index = enclosingClass.inheritanceChain - .indexOf(inheritable.enclosingElement as InheritingContainer); - if (index < lowIndex) { - foundInheritable = inheritable; - lowIndex = index; - } - } - return ModelElement.for_(foundInheritable.element, library, packageGraph, - enclosingContainer: enclosingClass); - } -} diff --git a/test/end2end/model_test.dart b/test/end2end/model_test.dart index 4eac91abe8..e3fe255f2f 100644 --- a/test/end2end/model_test.dart +++ b/test/end2end/model_test.dart @@ -1068,39 +1068,6 @@ void main() async { }); }); - group('MultiplyInheritedExecutableElement handling', () { - late final Class BaseThingy, BaseThingy2, ImplementingThingy2; - late final Method aImplementingThingyMethod; - late final Field aImplementingThingyField; - late final Field aImplementingThingy; - late final Accessor aImplementingThingyAccessor; - - setUpAll(() { - BaseThingy = fakeLibrary.classes.named('BaseThingy'); - BaseThingy2 = fakeLibrary.classes.named('BaseThingy2'); - ImplementingThingy2 = fakeLibrary.classes.named('ImplementingThingy2'); - - aImplementingThingy = - ImplementingThingy2.instanceFields.named('aImplementingThingy'); - aImplementingThingyMethod = ImplementingThingy2.instanceMethods - .named('aImplementingThingyMethod'); - aImplementingThingyField = - ImplementingThingy2.instanceFields.named('aImplementingThingyField'); - aImplementingThingyAccessor = aImplementingThingyField.getter!; - }); - - test('Verify behavior of imperfect resolver', () { - expect(aImplementingThingy.element.enclosingElement3, - equals(BaseThingy2.element)); - expect(aImplementingThingyMethod.element.enclosingElement3, - equals(BaseThingy.element)); - expect(aImplementingThingyField.element.enclosingElement3, - equals(BaseThingy.element)); - expect(aImplementingThingyAccessor.element.enclosingElement3, - equals(BaseThingy.element)); - }); - }); - group('Docs as HTML', () { late final Class Apple, B, superAwesomeClass, foo2; late final TopLevelVariable incorrectDocReferenceFromEx; diff --git a/testing/test_package/lib/fake.dart b/testing/test_package/lib/fake.dart index adae5d7082..7cfaf1c0e2 100644 --- a/testing/test_package/lib/fake.dart +++ b/testing/test_package/lib/fake.dart @@ -83,24 +83,6 @@ export 'src/reexport_this.dart'; /// Does not render with emoji 3ffe:2a00:100:7031::1 const int hasMarkdownInDoc = 1; -abstract class ImplementingThingy implements BaseThingy {} - -abstract class BaseThingy { - // ignore: public_member_api_docs - ImplementingThingy get aImplementingThingy; - ImplementingThingy? aImplementingThingyField; - void aImplementingThingyMethod(ImplementingThingy parameter); -} - -abstract class ImplementingThingy2 implements BaseThingy2, ImplementingThingy {} - -/// Test for MultiplyInheritedExecutableElement handling. -abstract class BaseThingy2 implements BaseThingy { - /// BaseThingy2's doc for aImplementingThingy. - @override - ImplementingThingy2 get aImplementingThingy; -} - /// This function has a link to a renamed library class member. /// /// Link to library: [renamedLib]