From 45ea8bb80d481faa69417851af24f1d94c35f4d4 Mon Sep 17 00:00:00 2001 From: Sam Rawlins Date: Sun, 29 Oct 2023 21:07:12 -0700 Subject: [PATCH] Tighten types and visibilities --- .../templates.runtime_renderers.dart | 43 ------------------- lib/src/model/inheriting_container.dart | 4 ++ lib/src/model/model_element.dart | 6 +-- lib/src/model/package_graph.dart | 43 ++++++++++--------- 4 files changed, 29 insertions(+), 67 deletions(-) diff --git a/lib/src/generator/templates.runtime_renderers.dart b/lib/src/generator/templates.runtime_renderers.dart index b54de46051..9cc25e4cbb 100644 --- a/lib/src/generator/templates.runtime_renderers.dart +++ b/lib/src/generator/templates.runtime_renderers.dart @@ -7663,13 +7663,6 @@ class _Renderer_InheritingContainer extends RendererBase { self.renderSimpleVariable(c, remainingNames, 'bool'), getBool: (CT_ c) => c.hasModifiers == true, ), - 'hasPublicInheritedMethods': Property( - getValue: (CT_ c) => c.hasPublicInheritedMethods, - renderVariable: (CT_ c, Property self, - List remainingNames) => - self.renderSimpleVariable(c, remainingNames, 'bool'), - getBool: (CT_ c) => c.hasPublicInheritedMethods == true, - ), 'hasPublicSuperChainReversed': Property( getValue: (CT_ c) => c.hasPublicSuperChainReversed, renderVariable: (CT_ c, Property self, @@ -7690,18 +7683,6 @@ class _Renderer_InheritingContainer extends RendererBase { parent: r)); }, ), - 'inheritedFields': Property( - getValue: (CT_ c) => c.inheritedFields, - renderVariable: (CT_ c, Property self, - List remainingNames) => - self.renderSimpleVariable( - c, remainingNames, 'Iterable'), - renderIterable: (CT_ c, RendererBase r, - List ast, StringSink sink) { - return c.inheritedFields.map((e) => - _render_Field(e, ast, r.template, sink, parent: r)); - }, - ), 'inheritedMethods': Property( getValue: (CT_ c) => c.inheritedMethods, renderVariable: (CT_ c, Property self, @@ -7835,18 +7816,6 @@ class _Renderer_InheritingContainer extends RendererBase { parent: r); }, ), - 'publicInheritedFields': Property( - getValue: (CT_ c) => c.publicInheritedFields, - renderVariable: (CT_ c, Property self, - List remainingNames) => - self.renderSimpleVariable( - c, remainingNames, 'Iterable'), - renderIterable: (CT_ c, RendererBase r, - List ast, StringSink sink) { - return c.publicInheritedFields.map((e) => - _render_Field(e, ast, r.template, sink, parent: r)); - }, - ), 'publicInheritedInstanceFields': Property( getValue: (CT_ c) => c.publicInheritedInstanceFields, renderVariable: (CT_ c, Property self, @@ -7869,18 +7838,6 @@ class _Renderer_InheritingContainer extends RendererBase { getBool: (CT_ c) => c.publicInheritedInstanceOperators == true, ), - 'publicInheritedMethods': Property( - getValue: (CT_ c) => c.publicInheritedMethods, - renderVariable: (CT_ c, Property self, - List remainingNames) => - self.renderSimpleVariable( - c, remainingNames, 'Iterable'), - renderIterable: (CT_ c, RendererBase r, - List ast, StringSink sink) { - return c.publicInheritedMethods.map((e) => - _render_Method(e, ast, r.template, sink, parent: r)); - }, - ), 'publicInterfaces': Property( getValue: (CT_ c) => c.publicInterfaces, renderVariable: (CT_ c, Property self, diff --git a/lib/src/model/inheriting_container.dart b/lib/src/model/inheriting_container.dart index 5300dee6c1..e75c304db8 100644 --- a/lib/src/model/inheriting_container.dart +++ b/lib/src/model/inheriting_container.dart @@ -291,6 +291,7 @@ abstract class InheritingContainer extends Container hasPublicSuperChainReversed || hasPotentiallyApplicableExtensions; + @visibleForTesting bool get hasPublicInheritedMethods => publicInheritedMethods.isNotEmpty; bool get hasPublicSuperChainReversed => publicSuperChainReversed.isNotEmpty; @@ -303,6 +304,7 @@ abstract class InheritingContainer extends Container /// purposes in abstract classes. List get inheritanceChain; + @visibleForTesting Iterable get inheritedFields => allFields.where((f) => f.isInherited); @override @@ -332,6 +334,7 @@ abstract class InheritingContainer extends Container bool get isSealed; + @visibleForTesting Iterable get publicInheritedFields => model_utils.filterNonPublic(inheritedFields); @@ -347,6 +350,7 @@ abstract class InheritingContainer extends Container bool get publicInheritedInstanceOperators => publicInstanceOperators.every((f) => f.isInherited); + @visibleForTesting Iterable get publicInheritedMethods => model_utils.filterNonPublic(inheritedMethods); diff --git a/lib/src/model/model_element.dart b/lib/src/model/model_element.dart index da0f50248f..e6fb0a291a 100644 --- a/lib/src/model/model_element.dart +++ b/lib/src/model/model_element.dart @@ -287,7 +287,7 @@ abstract class ModelElement extends Canonicalization /// Caches a newly-created [ModelElement] from [ModelElement._from] or /// [ModelElement._fromPropertyInducingElement]. static void _cacheNewModelElement( - Element e, ModelElement? newModelElement, Library library, + Element e, ModelElement newModelElement, Library library, {Container? enclosingContainer}) { // TODO(jcollins-g): Reenable Parameter caching when dart-lang/sdk#30146 // is fixed? @@ -355,8 +355,8 @@ abstract class ModelElement extends Canonicalization PropertyAccessorElement e, Library library, PackageGraph packageGraph, { - Container? enclosingContainer, - Member? originalMember, + required Container? enclosingContainer, + required Member? originalMember, }) { // Accessors can be part of a [Container], or a part of a [Library]. if (e.enclosingElement is ExtensionElement || diff --git a/lib/src/model/package_graph.dart b/lib/src/model/package_graph.dart index cc68c84293..dc9d2ce910 100644 --- a/lib/src/model/package_graph.dart +++ b/lib/src/model/package_graph.dart @@ -280,8 +280,8 @@ class PackageGraph with CommentReferable, Nameable, ModelBuilder { /// All [ModelElement]s constructed for this package; a superset of /// [_allModelElements]. - final Map<(Element element, Library? library, Container? enclosingElement), - ModelElement?> allConstructedModelElements = {}; + final Map<(Element element, Library library, Container? enclosingElement), + ModelElement> allConstructedModelElements = {}; /// Anything that might be inheritable, place here for later lookup. final Map<(Element, Library), Set> allInheritableElements = {}; @@ -533,7 +533,6 @@ class PackageGraph with CommentReferable, Nameable, ModelBuilder { if (modelElement is Dynamic) continue; // TODO: see [Accessor.enclosingCombo] if (modelElement is Accessor) continue; - if (modelElement == null) continue; final href = modelElement.href; if (href == null) continue; @@ -675,7 +674,7 @@ class PackageGraph with CommentReferable, Nameable, ModelBuilder { return buffer.toString(); } - final Map _canonicalLibraryFor = {}; + final Map _canonicalLibraryFor = {}; /// Tries to find a top level library that references this element. Library? _findCanonicalLibraryFor(Element e) { @@ -728,8 +727,8 @@ class PackageGraph with CommentReferable, Nameable, ModelBuilder { lib ??= modelBuilder.fromElement(enclosingElement.library) as Library?; // TODO(keertip): Find a better way to exclude members of extensions // when libraries are specified using the "--include" flag. - if (lib?.isDocumented == true) { - return modelBuilder.from(e, lib!); + if (lib != null && lib.isDocumented) { + return modelBuilder.from(e, lib); } } // TODO(jcollins-g): The data structures should be changed to eliminate @@ -768,20 +767,22 @@ class PackageGraph with CommentReferable, Nameable, ModelBuilder { ModelElement? _findCanonicalModelElementForAmbiguous(Element e, Library? lib, {InheritingContainer? preferredClass}) { - var candidates = {}; - var constructedWithKey = allConstructedModelElements[(e, lib, null)]; - if (constructedWithKey != null) { - candidates.add(constructedWithKey); - } - var constructedWithKeyWithClass = - allConstructedModelElements[(e, lib, preferredClass)]; - if (constructedWithKeyWithClass != null) { - candidates.add(constructedWithKeyWithClass); - } - if (candidates.isEmpty) { - candidates = { - ...?allInheritableElements[(e, lib)]?.where((me) => me.isCanonical), - }; + var candidates = {}; + if (lib != null) { + var constructedWithKey = allConstructedModelElements[(e, lib, null)]; + if (constructedWithKey != null) { + candidates.add(constructedWithKey); + } + var constructedWithKeyWithClass = + allConstructedModelElements[(e, lib, preferredClass)]; + if (constructedWithKeyWithClass != null) { + candidates.add(constructedWithKeyWithClass); + } + if (candidates.isEmpty) { + candidates = { + ...?allInheritableElements[(e, lib)]?.where((me) => me.isCanonical), + }; + } } var canonicalClass = findCanonicalModelElementFor(e.enclosingElement); @@ -790,7 +791,7 @@ class PackageGraph with CommentReferable, Nameable, ModelBuilder { .where((m) => m.element == e)); } - var matches = {...candidates.whereNotNull().where((me) => me.isCanonical)}; + var matches = {...candidates.where((me) => me.isCanonical)}; // It's possible to find [Accessor]s but no combos. Be sure that if we // have accessors, we find their combos too.