From effc8df185fc15571571b230bd1369447d12f705 Mon Sep 17 00:00:00 2001 From: Sam Rawlins Date: Thu, 29 Feb 2024 20:54:04 -0800 Subject: [PATCH] Rewrite Library.allOriginalModelElementNames. * This method was public, but only used privately. :( * This method returned a List, but only one method is ever called on the List: `contains`. So, change to a Set. * This method used `allModelElements`, but that collection contains way too many things; it contains things like methods of classes, but in this case we are only concerned with direct library members. --- .../templates.runtime_renderers.dart | 12 --- lib/src/model/library.dart | 73 +++++++++++-------- 2 files changed, 43 insertions(+), 42 deletions(-) diff --git a/lib/src/generator/templates.runtime_renderers.dart b/lib/src/generator/templates.runtime_renderers.dart index 1f7763935a..27b5344da4 100644 --- a/lib/src/generator/templates.runtime_renderers.dart +++ b/lib/src/generator/templates.runtime_renderers.dart @@ -8241,18 +8241,6 @@ class _Renderer_Library extends RendererBase { parent: r)); }, ), - 'allOriginalModelElementNames': Property( - getValue: (CT_ c) => c.allOriginalModelElementNames, - renderVariable: (CT_ c, Property self, - List remainingNames) => - self.renderSimpleVariable( - c, remainingNames, 'List'), - renderIterable: (CT_ c, RendererBase r, - List ast, StringSink sink) { - return c.allOriginalModelElementNames.map((e) => - _render_String(e, ast, r.template, sink, parent: r)); - }, - ), 'belowSidebarPath': Property( getValue: (CT_ c) => c.belowSidebarPath, renderVariable: diff --git a/lib/src/model/library.dart b/lib/src/model/library.dart index 7f3d18a0dc..492f758b81 100644 --- a/lib/src/model/library.dart +++ b/lib/src/model/library.dart @@ -96,35 +96,6 @@ class Library extends ModelElement bool get isInSdk => element.isInSdk; - /// [allModelElements] resolved to their original names. - /// - /// A collection of [ModelElement.fullyQualifiedName]s for [ModelElement]s - /// documented with this library, but these ModelElements and names correspond - /// to the defining library where each originally came from with respect - /// to inheritance and reexporting. Most useful for error reporting. - late final List allOriginalModelElementNames = - allModelElements.map((e) { - if (e is GetterSetterCombo) { - Accessor? getter; - Accessor? setter; - var elementGetter = e.getter; - if (elementGetter != null) { - getter = getModelForElement(elementGetter.element) as Accessor; - } - var elementSetter = e.setter; - if (elementSetter != null) { - setter = getModelForElement(elementSetter.element) as Accessor; - } - return getModelForPropertyInducingElement( - e.element as PropertyInducingElement, - getModelForElement(e.element.library!) as Library, - getter: getter, - setter: setter) - .fullyQualifiedName; - } - return getModelForElement(e.element).fullyQualifiedName; - }).toList(growable: false); - @override CharacterLocation? get characterLocation { if (element.nameOffset == -1) { @@ -455,8 +426,9 @@ class Library extends ModelElement String buildDocumentationAddition(String rawDocs) { rawDocs = super.buildDocumentationAddition(rawDocs); var notFoundInAllModelElements = {}; + var elementNames = _allOriginalModelElementNames; for (var elementName in canonicalFor) { - if (!allOriginalModelElementNames.contains(elementName)) { + if (!elementNames.contains(elementName)) { notFoundInAllModelElements.add(elementName); } } @@ -467,4 +439,45 @@ class Library extends ModelElement // canonicalFor? return rawDocs; } + + /// [allModelElements] resolved to their original names. + /// + /// A collection of [ModelElement.fullyQualifiedName]s for [ModelElement]s + /// documented with this library, but these ModelElements and names correspond + /// to the defining library where each originally came from with respect + /// to inheritance and re-exporting. Used for error reporting. + late final Set _allOriginalModelElementNames = () { + // Instead of using `allModelElements`, which includes deeper elements like + // methods on classes, gather up only the library's immediate members. + var libraryMembers = [ + ...library.extensions, + ...library.extensionTypes, + ...library.allClasses, + ...library.enums, + ...library.mixins, + ...library.constants, + ...library.functions, + ...library.properties, + ...library.typedefs, + ]; + return libraryMembers.map((member) { + if (member is! GetterSetterCombo) { + return getModelForElement(member.element).fullyQualifiedName; + } + var getter = switch (member.getter) { + Accessor accessor => getModelForElement(accessor.element) as Accessor, + _ => null, + }; + var setter = switch (member.setter) { + Accessor accessor => getModelForElement(accessor.element) as Accessor, + _ => null, + }; + return getModelForPropertyInducingElement( + member.element as PropertyInducingElement, + getModelForElement(member.element.library!) as Library, + getter: getter, + setter: setter, + ).fullyQualifiedName; + }).toSet(); + }(); }