diff --git a/lib/src/generator/templates.runtime_renderers.dart b/lib/src/generator/templates.runtime_renderers.dart index bfdb73c782..9b87726414 100644 --- a/lib/src/generator/templates.runtime_renderers.dart +++ b/lib/src/generator/templates.runtime_renderers.dart @@ -7988,7 +7988,7 @@ class _Renderer_Library extends RendererBase { renderVariable: (CT_ c, Property self, List remainingNames) => self.renderSimpleVariable( - c, remainingNames, 'Iterable'), + c, remainingNames, 'List'), renderIterable: (CT_ c, RendererBase r, List ast, StringSink sink) { return c.allModelElements.map((e) => _render_ModelElement( @@ -8380,19 +8380,6 @@ class _Renderer_Library extends RendererBase { _render_Mixin(e, ast, r.template, sink, parent: r)); }, ), - 'modelElementsMap': Property( - getValue: (CT_ c) => c.modelElementsMap, - renderVariable: (CT_ c, Property self, - List remainingNames) => - self.renderSimpleVariable(c, remainingNames, - 'HashMap>'), - isNullValue: (CT_ c) => false, - renderValue: (CT_ c, RendererBase r, - List ast, StringSink sink) { - renderSimple(c.modelElementsMap, ast, r.template, sink, - parent: r, getters: _invisibleGetters['HashMap']!); - }, - ), 'name': Property( getValue: (CT_ c) => c.name, renderVariable: @@ -12486,13 +12473,13 @@ class _Renderer_PackageTemplateData extends RendererBase { } } -String renderSearchPage(PackageTemplateData context, Template template) { +String renderIndex(PackageTemplateData context, Template template) { var buffer = StringBuffer(); _render_PackageTemplateData(context, template.ast, template, buffer); return buffer.toString(); } -String renderIndex(PackageTemplateData context, Template template) { +String renderSearchPage(PackageTemplateData context, Template template) { var buffer = StringBuffer(); _render_PackageTemplateData(context, template.ast, template, buffer); return buffer.toString(); @@ -16162,7 +16149,6 @@ const _invisibleGetters = { 'setter', 'writeOnly' }, - 'HashMap': {'hashCode', 'runtimeType'}, 'Inheritable': { 'attributes', 'canonicalLibrary', @@ -16317,7 +16303,6 @@ const _invisibleGetters = { 'allInheritableElements', 'allLibraries', 'allLibrariesAdded', - 'allLocalModelElements', 'analysisContext', 'breadcrumbName', 'config', @@ -16498,7 +16483,6 @@ const _invisibleGetters = { 'aliasedType', 'enclosingElement', 'hashCode', - 'isAugmentation', 'name', 'runtimeType' }, diff --git a/lib/src/model/library.dart b/lib/src/model/library.dart index 122e0eedbd..2c4f6cb34d 100644 --- a/lib/src/model/library.dart +++ b/lib/src/model/library.dart @@ -2,8 +2,6 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -import 'dart:collection'; - import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/scope.dart'; import 'package:analyzer/source/line_info.dart'; @@ -361,34 +359,27 @@ class Library extends ModelElement return variables; } - /// A mapping of all [Element]s in this library to the [ModelElement]s which - /// represent them in dartdoc. + /// All [ModelElement]s, direct and indirect, which are part of this library's + /// export namespace. // Note: Keep this a late final field; converting to a getter (without further // investigation) causes dartdoc to hang. - late final HashMap> modelElementsMap = () { - var modelElements = HashMap>(); - for (var modelElement in [ - ...constants, - ...functions, - ...properties, - ...typedefs, - ...extensions.expand((e) => [e, ...e.allModelElements]), - ...extensionTypes.expand((e) => [e, ...e.allModelElements]), - ...classesAndExceptions.expand((c) => [c, ...c.allModelElements]), - ...enums.expand((e) => [e, ...e.allModelElements]), - ...mixins.expand((m) => [m, ...m.allModelElements]), - ]) { - modelElements - .putIfAbsent(modelElement.element, () => {}) - .add(modelElement); - } - modelElements.putIfAbsent(element, () => {}).add(this); - return modelElements; - }(); - - Iterable get allModelElements => [ - for (var modelElements in modelElementsMap.values) ...modelElements, - ]; + late final List allModelElements = [ + ...constants, + ...functions, + ...properties, + ...typedefs, + ...extensions, + for (var e in extensions) ...e.allModelElements, + ...extensionTypes, + for (var e in extensionTypes) ...e.allModelElements, + ...classesAndExceptions, + for (var c in classesAndExceptions) ...c.allModelElements, + ...enums, + for (var e in enums) ...e.allModelElements, + ...mixins, + for (var m in mixins) ...m.allModelElements, + this, + ]; @override Map get referenceChildren { @@ -417,13 +408,11 @@ class Library extends ModelElement @override String buildDocumentationAddition(String rawDocs) { rawDocs = super.buildDocumentationAddition(rawDocs); - var notFoundInAllModelElements = {}; var elementNames = _allOriginalModelElementNames; - for (var elementName in canonicalFor) { - if (!elementNames.contains(elementName)) { - notFoundInAllModelElements.add(elementName); - } - } + var notFoundInAllModelElements = { + for (var elementName in canonicalFor) + if (!elementNames.contains(elementName)) elementName, + }; for (var notFound in notFoundInAllModelElements) { warn(PackageWarning.ignoredCanonicalFor, message: notFound); } @@ -432,12 +421,13 @@ class Library extends ModelElement return rawDocs; } - /// [allModelElements] resolved to their original names. + /// The immediate elements of this library, 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. + /// to inheritance and re-exporting. Only used for reporting + /// [PackageWarning.ignoredCanonicalFor]. late final Set _allOriginalModelElementNames = () { // Instead of using `allModelElements`, which includes deeper elements like // methods on classes, gather up only the library's immediate members. diff --git a/lib/src/model/package_graph.dart b/lib/src/model/package_graph.dart index c37635b296..fb016875d3 100644 --- a/lib/src/model/package_graph.dart +++ b/lib/src/model/package_graph.dart @@ -544,10 +544,9 @@ class PackageGraph with CommentReferable, Nameable { } /// A lookup index for hrefs to allow warnings to indicate where a broken - /// link or orphaned file may have come from. Not cached because - /// [ModelElement]s can be created at any time and we're basing this - /// on more than just [allLocalModelElements] to make the error messages - /// comprehensive. + /// link or orphaned file may have come from. + /// + /// This is not cached because [ModelElement]s can be created at any time. Map> get allHrefs { final hrefMap = >{}; // TODO(jcollins-g ): handle calculating hrefs causing new elements better @@ -895,11 +894,6 @@ class PackageGraph with CommentReferable, Nameable { return allElements; } - @visibleForTesting - late final List allLocalModelElements = [ - for (var library in _localLibraries) ...library.allModelElements - ]; - /// Glob lookups can be expensive. Cache per filename. final _configSetsNodocFor = HashMap(); diff --git a/test/end2end/model_special_cases_test.dart b/test/end2end/model_special_cases_test.dart index 0d10d9a21e..aad403fd67 100644 --- a/test/end2end/model_special_cases_test.dart +++ b/test/end2end/model_special_cases_test.dart @@ -205,7 +205,9 @@ void main() { classWithHtml = exLibrary.classes.named('SanitizableHtml'); blockHtml = classWithHtml.instanceMethods.named('blockHtml'); inlineHtml = classWithHtml.instanceMethods.named('inlineHtml'); - for (var modelElement in packageGraph.allLocalModelElements) { + for (var modelElement in packageGraph.localPublicLibraries + .expand((l) => l.allModelElements)) { + // Accessing this getter triggers documentation-processing. modelElement.documentation; } }); @@ -270,7 +272,9 @@ void main() { htmlInjection.instanceMethods.named('injectSimpleHtml'); injectHtmlFromTool = htmlInjection.instanceMethods.named('injectHtmlFromTool'); - for (var modelElement in injectionPackageGraph.allLocalModelElements) { + for (var modelElement in injectionPackageGraph.localPublicLibraries + .expand((l) => l.allModelElements)) { + // Accessing this getter triggers documentation-processing. modelElement.documentation; } }); diff --git a/test/end2end/model_test.dart b/test/end2end/model_test.dart index 62d2882c54..e3a0b1cd1d 100644 --- a/test/end2end/model_test.dart +++ b/test/end2end/model_test.dart @@ -564,7 +564,9 @@ void main() async { .named('invokeToolParentDoc'); invokeToolParentDocOriginal = ImplementingClassForTool.instanceMethods.named('invokeToolParentDoc'); - for (var modelElement in packageGraph.allLocalModelElements) { + for (var modelElement in packageGraph.localPublicLibraries + .expand((l) => l.allModelElements)) { + // Accessing this getter triggers documentation-processing. modelElement.documentation; } }); diff --git a/test/options_test.dart b/test/options_test.dart index 7d553eed69..867440124e 100644 --- a/test/options_test.dart +++ b/test/options_test.dart @@ -5,7 +5,6 @@ import 'package:args/args.dart'; import 'package:dartdoc/src/dartdoc_options.dart'; import 'package:dartdoc/src/failure.dart'; -import 'package:dartdoc/src/model/model.dart'; import 'package:path/path.dart' as path; import 'package:test/test.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; @@ -258,10 +257,8 @@ class Foo {} packageMetaProvider, packageConfigProvider, ); - final classFoo = packageGraph.allLocalModelElements - .where((e) => e.isCanonical) - .whereType() - .firstWhere((c) => c.name == 'Foo'); + final classFoo = + packageGraph.localPackages.first.libraries.first.classes.named('Foo'); expect(classFoo.displayedCategories, isNotEmpty); } diff --git a/test/search_index_test.dart b/test/search_index_test.dart index 8c7cc7c2d0..0192d5b619 100644 --- a/test/search_index_test.dart +++ b/test/search_index_test.dart @@ -51,16 +51,7 @@ class SearchIndexTest extends DartdocTestBase { .where((l) => l.name.startsWith('dart:')), ]; var text = generateSearchIndexJson( - [ - // For each library, gather the elements for the library, it's members, - // and the members of its container members. - for (var library in libraries) ...[ - library, - ...library.allModelElements, - for (var element in library.allModelElements.whereType()) - ...element.allModelElements, - ], - ], + libraries.expand((library) => library.allModelElements), packageOrder: actAsFlutter ? const ['flutter', 'Dart'] : const [], pretty: false, );