Skip to content

Commit 2c453bd

Browse files
committed
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.
1 parent 2760d25 commit 2c453bd

File tree

2 files changed

+43
-42
lines changed

2 files changed

+43
-42
lines changed

lib/src/generator/templates.runtime_renderers.dart

-12
Original file line numberDiff line numberDiff line change
@@ -8241,18 +8241,6 @@ class _Renderer_Library extends RendererBase<Library> {
82418241
parent: r));
82428242
},
82438243
),
8244-
'allOriginalModelElementNames': Property(
8245-
getValue: (CT_ c) => c.allOriginalModelElementNames,
8246-
renderVariable: (CT_ c, Property<CT_> self,
8247-
List<String> remainingNames) =>
8248-
self.renderSimpleVariable(
8249-
c, remainingNames, 'List<String>'),
8250-
renderIterable: (CT_ c, RendererBase<CT_> r,
8251-
List<MustachioNode> ast, StringSink sink) {
8252-
return c.allOriginalModelElementNames.map((e) =>
8253-
_render_String(e, ast, r.template, sink, parent: r));
8254-
},
8255-
),
82568244
'belowSidebarPath': Property(
82578245
getValue: (CT_ c) => c.belowSidebarPath,
82588246
renderVariable:

lib/src/model/library.dart

+43-30
Original file line numberDiff line numberDiff line change
@@ -96,35 +96,6 @@ class Library extends ModelElement
9696

9797
bool get isInSdk => element.isInSdk;
9898

99-
/// [allModelElements] resolved to their original names.
100-
///
101-
/// A collection of [ModelElement.fullyQualifiedName]s for [ModelElement]s
102-
/// documented with this library, but these ModelElements and names correspond
103-
/// to the defining library where each originally came from with respect
104-
/// to inheritance and reexporting. Most useful for error reporting.
105-
late final List<String> allOriginalModelElementNames =
106-
allModelElements.map((e) {
107-
if (e is GetterSetterCombo) {
108-
Accessor? getter;
109-
Accessor? setter;
110-
var elementGetter = e.getter;
111-
if (elementGetter != null) {
112-
getter = getModelForElement(elementGetter.element) as Accessor;
113-
}
114-
var elementSetter = e.setter;
115-
if (elementSetter != null) {
116-
setter = getModelForElement(elementSetter.element) as Accessor;
117-
}
118-
return getModelForPropertyInducingElement(
119-
e.element as PropertyInducingElement,
120-
getModelForElement(e.element.library!) as Library,
121-
getter: getter,
122-
setter: setter)
123-
.fullyQualifiedName;
124-
}
125-
return getModelForElement(e.element).fullyQualifiedName;
126-
}).toList(growable: false);
127-
12899
@override
129100
CharacterLocation? get characterLocation {
130101
if (element.nameOffset == -1) {
@@ -455,8 +426,9 @@ class Library extends ModelElement
455426
String buildDocumentationAddition(String rawDocs) {
456427
rawDocs = super.buildDocumentationAddition(rawDocs);
457428
var notFoundInAllModelElements = <String>{};
429+
var elementNames = _allOriginalModelElementNames;
458430
for (var elementName in canonicalFor) {
459-
if (!allOriginalModelElementNames.contains(elementName)) {
431+
if (!elementNames.contains(elementName)) {
460432
notFoundInAllModelElements.add(elementName);
461433
}
462434
}
@@ -467,4 +439,45 @@ class Library extends ModelElement
467439
// canonicalFor?
468440
return rawDocs;
469441
}
442+
443+
/// [allModelElements] resolved to their original names.
444+
///
445+
/// A collection of [ModelElement.fullyQualifiedName]s for [ModelElement]s
446+
/// documented with this library, but these ModelElements and names correspond
447+
/// to the defining library where each originally came from with respect
448+
/// to inheritance and re-exporting. Used for error reporting.
449+
late final Set<String> _allOriginalModelElementNames = () {
450+
// Instead of using `allModelElements`, which includes deeper elements like
451+
// methods on classes, gather up only the library's immediate members.
452+
var libraryMembers = [
453+
...library.extensions,
454+
...library.extensionTypes,
455+
...library.allClasses,
456+
...library.enums,
457+
...library.mixins,
458+
...library.constants,
459+
...library.functions,
460+
...library.properties,
461+
...library.typedefs,
462+
];
463+
return libraryMembers.map((member) {
464+
if (member is! GetterSetterCombo) {
465+
return getModelForElement(member.element).fullyQualifiedName;
466+
}
467+
var getter = switch (member.getter) {
468+
Accessor accessor => getModelForElement(accessor.element) as Accessor,
469+
_ => null,
470+
};
471+
var setter = switch (member.setter) {
472+
Accessor accessor => getModelForElement(accessor.element) as Accessor,
473+
_ => null,
474+
};
475+
return getModelForPropertyInducingElement(
476+
member.element as PropertyInducingElement,
477+
getModelForElement(member.element.library!) as Library,
478+
getter: getter,
479+
setter: setter,
480+
).fullyQualifiedName;
481+
}).toSet();
482+
}();
470483
}

0 commit comments

Comments
 (0)