Skip to content

Remove unnecessary ExtensionTarget mixin #3648

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Feb 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 22 additions & 76 deletions lib/src/generator/templates.runtime_renderers.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import 'package:dartdoc/src/generator/template_data.dart';
import 'package:dartdoc/src/model/annotation.dart';
import 'package:dartdoc/src/model/attribute.dart';
import 'package:dartdoc/src/model/comment_referable.dart';
import 'package:dartdoc/src/model/extension_target.dart';
import 'package:dartdoc/src/model/feature_set.dart';
import 'package:dartdoc/src/model/language_feature.dart';
import 'package:dartdoc/src/model/model.dart';
Expand Down Expand Up @@ -5089,77 +5088,6 @@ class _Renderer_Extension extends RendererBase<Extension> {
}
}

class _Renderer_ExtensionTarget extends RendererBase<ExtensionTarget> {
static final Map<Type, Object> _propertyMapCache = {};
static Map<String, Property<CT_>> propertyMap<
CT_ extends ExtensionTarget>() =>
_propertyMapCache.putIfAbsent(
CT_,
() => {
'hasModifiers': Property(
getValue: (CT_ c) => c.hasModifiers,
renderVariable: (CT_ c, Property<CT_> self,
List<String> remainingNames) =>
self.renderSimpleVariable(c, remainingNames, 'bool'),
getBool: (CT_ c) => c.hasModifiers,
),
'hasPotentiallyApplicableExtensions': Property(
getValue: (CT_ c) => c.hasPotentiallyApplicableExtensions,
renderVariable: (CT_ c, Property<CT_> self,
List<String> remainingNames) =>
self.renderSimpleVariable(c, remainingNames, 'bool'),
getBool: (CT_ c) => c.hasPotentiallyApplicableExtensions,
),
'modelType': Property(
getValue: (CT_ c) => c.modelType,
renderVariable:
(CT_ c, Property<CT_> self, List<String> remainingNames) {
if (remainingNames.isEmpty) {
return self.getValue(c).toString();
}
var name = remainingNames.first;
var nextProperty =
_Renderer_ElementType.propertyMap().getValue(name);
return nextProperty.renderVariable(
self.getValue(c) as ElementType,
nextProperty,
[...remainingNames.skip(1)]);
},
isNullValue: (CT_ c) => false,
renderValue: (CT_ c, RendererBase<CT_> r,
List<MustachioNode> ast, StringSink sink) {
_render_ElementType(c.modelType, ast, r.template, sink,
parent: r);
},
),
'potentiallyApplicableExtensionsSorted': Property(
getValue: (CT_ c) => c.potentiallyApplicableExtensionsSorted,
renderVariable: (CT_ c, Property<CT_> self,
List<String> remainingNames) =>
self.renderSimpleVariable(
c, remainingNames, 'List<Extension>'),
renderIterable: (CT_ c, RendererBase<CT_> r,
List<MustachioNode> ast, StringSink sink) {
return c.potentiallyApplicableExtensionsSorted.map((e) =>
_render_Extension(e, ast, r.template, sink, parent: r));
},
),
}) as Map<String, Property<CT_>>;

_Renderer_ExtensionTarget(ExtensionTarget context,
RendererBase<Object>? parent, Template template, StringSink sink)
: super(context, parent, template, sink);

@override
Property<ExtensionTarget>? getProperty(String key) {
if (propertyMap<ExtensionTarget>().containsKey(key)) {
return propertyMap<ExtensionTarget>()[key];
} else {
return null;
}
}
}

String renderExtension<T extends Extension>(
ExtensionTemplateData<T> context, Template template) {
var buffer = StringBuffer();
Expand Down Expand Up @@ -7448,7 +7376,6 @@ class _Renderer_InheritingContainer extends RendererBase<InheritingContainer> {
CT_,
() => {
..._Renderer_Container.propertyMap<CT_>(),
..._Renderer_ExtensionTarget.propertyMap<CT_>(),
'allFields': Property(
getValue: (CT_ c) => c.allFields,
renderVariable: (CT_ c, Property<CT_> self,
Expand Down Expand Up @@ -7626,6 +7553,13 @@ class _Renderer_InheritingContainer extends RendererBase<InheritingContainer> {
self.renderSimpleVariable(c, remainingNames, 'bool'),
getBool: (CT_ c) => c.hasModifiers,
),
'hasPotentiallyApplicableExtensions': Property(
getValue: (CT_ c) => c.hasPotentiallyApplicableExtensions,
renderVariable: (CT_ c, Property<CT_> self,
List<String> remainingNames) =>
self.renderSimpleVariable(c, remainingNames, 'bool'),
getBool: (CT_ c) => c.hasPotentiallyApplicableExtensions,
),
'hasPublicSuperChainReversed': Property(
getValue: (CT_ c) => c.hasPublicSuperChainReversed,
renderVariable: (CT_ c, Property<CT_> self,
Expand Down Expand Up @@ -7779,6 +7713,18 @@ class _Renderer_InheritingContainer extends RendererBase<InheritingContainer> {
parent: r);
},
),
'potentiallyApplicableExtensionsSorted': Property(
getValue: (CT_ c) => c.potentiallyApplicableExtensionsSorted,
renderVariable: (CT_ c, Property<CT_> self,
List<String> remainingNames) =>
self.renderSimpleVariable(
c, remainingNames, 'List<Extension>'),
renderIterable: (CT_ c, RendererBase<CT_> r,
List<MustachioNode> ast, StringSink sink) {
return c.potentiallyApplicableExtensionsSorted.map((e) =>
_render_Extension(e, ast, r.template, sink, parent: r));
},
),
'publicInheritedInstanceFields': Property(
getValue: (CT_ c) => c.publicInheritedInstanceFields,
renderVariable: (CT_ c, Property<CT_> self,
Expand Down Expand Up @@ -12632,7 +12578,7 @@ class _Renderer_Package extends RendererBase<Package> {
}
}

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();
Expand Down Expand Up @@ -12870,13 +12816,13 @@ class _Renderer_PackageTemplateData extends RendererBase<PackageTemplateData> {
}
}

String renderError(PackageTemplateData context, Template template) {
String renderSearchPage(PackageTemplateData context, Template template) {
var buffer = StringBuffer();
_render_PackageTemplateData(context, template.ast, template, buffer);
return buffer.toString();
}

String renderIndex(PackageTemplateData context, Template template) {
String renderError(PackageTemplateData context, Template template) {
var buffer = StringBuffer();
_render_PackageTemplateData(context, template.ast, template, buffer);
return buffer.toString();
Expand Down
7 changes: 3 additions & 4 deletions lib/src/model/extension.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:dartdoc/src/element_type.dart';
import 'package:dartdoc/src/model/comment_referable.dart';
import 'package:dartdoc/src/model/extension_target.dart';
import 'package:dartdoc/src/model/model.dart';
import 'package:dartdoc/src/type_utils.dart';
import 'package:meta/meta.dart';
Expand All @@ -28,8 +27,8 @@ class Extension extends Container implements EnclosedElement {
extendedType.instantiatedType is VoidType ||
extendedType.instantiatedType.isDartCoreObject;

bool couldApplyTo<T extends ExtensionTarget>(T c) =>
_couldApplyTo(c.modelType as DefinedElementType);
bool couldApplyTo<T extends InheritingContainer>(T c) =>
_couldApplyTo(c.modelType);

/// Whether this extension could apply to [type].
bool _couldApplyTo(DefinedElementType type) {
Expand Down Expand Up @@ -57,7 +56,7 @@ class Extension extends Container implements EnclosedElement {
Kind get kind => Kind.extension;

@override
late List<Method> declaredMethods = element.methods
late final List<Method> declaredMethods = element.methods
.map((e) => modelBuilder.from(e, library) as Method)
.toList(growable: false);

Expand Down
30 changes: 0 additions & 30 deletions lib/src/model/extension_target.dart

This file was deleted.

48 changes: 30 additions & 18 deletions lib/src/model/inheriting_container.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import 'package:collection/collection.dart' show IterableExtension;
import 'package:dartdoc/src/element_type.dart';
import 'package:dartdoc/src/model/comment_referable.dart';
import 'package:dartdoc/src/model/container_modifiers.dart';
import 'package:dartdoc/src/model/extension_target.dart';
import 'package:dartdoc/src/model/language_feature.dart';
import 'package:dartdoc/src/model/model.dart';
import 'package:dartdoc/src/model_utils.dart' as model_utils;
Expand Down Expand Up @@ -74,8 +73,9 @@ mixin Constructable on InheritingContainer {
/// * **instance**: As with [Container], but also includes inherited children.
/// * **inherited**: Filtered getters giving only inherited children.
abstract class InheritingContainer extends Container
with ExtensionTarget
implements EnclosedElement {
InheritingContainer(super.library, super.packageGraph);

DefinedElementType? get supertype {
final elementSupertype = element.supertype;
return elementSupertype == null ||
Expand Down Expand Up @@ -138,7 +138,6 @@ abstract class InheritingContainer extends Container
];
}

@override
late final DefinedElementType modelType =
modelBuilder.typeFrom(element.thisType, library) as DefinedElementType;

Expand Down Expand Up @@ -258,7 +257,21 @@ abstract class InheritingContainer extends Container
as Library) as TypeParameter)
.toList(growable: false);

InheritingContainer(super.library, super.packageGraph);
bool get hasPotentiallyApplicableExtensions =>
potentiallyApplicableExtensionsSorted.isNotEmpty;

/// The sorted list of potentially applicable extensions, for display in
/// templates.
///
/// This is defined as those extensions where an instantiation of the type
/// defined by [element] can exist where this extension applies, not including
/// any extension that applies to every type.
late final List<Extension> potentiallyApplicableExtensionsSorted =
packageGraph.documentedExtensions
.where((e) => !e.alwaysApplies)
.where((e) => e.couldApplyTo(this))
.toList(growable: false)
..sort(byName);

@override
List<ModelElement> get allModelElements => _allModelElements;
Expand All @@ -281,7 +294,6 @@ abstract class InheritingContainer extends Container

String get fullkind => kind.toString();

@override
bool get hasModifiers =>
hasAnnotations ||
hasPublicSuperChainReversed ||
Expand Down Expand Up @@ -544,19 +556,19 @@ mixin TypeImplementing on InheritingContainer {
// the superchain and publicInterfaces of this interface to pretend
// as though the hidden class didn't exist and this class was declared
// directly referencing the canonical classes further up the chain.
if (interfaceElement is InheritingContainer) {
if (interfaceElement.publicSuperChain.isNotEmpty) {
interfaces.add(interfaceElement.publicSuperChain.first);
}
interfaces.addAll(interfaceElement.publicInterfaces);
} else {
if (interfaceElement is! InheritingContainer) {
assert(
false,
'Can not handle intermediate non-public interfaces created by '
'ModelElements that are not classes or mixins: $fullyQualifiedName '
'contains an interface $interface, defined by $interfaceElement');
false,
'Can not handle intermediate non-public interfaces created by '
"ModelElements that are not classes or mixins: '$fullyQualifiedName' "
"contains an interface '$interface', defined by '$interfaceElement'",
);
continue;
}
if (interfaceElement.publicSuperChain.isNotEmpty) {
interfaces.add(interfaceElement.publicSuperChain.first);
}
interfaces.addAll(interfaceElement.publicInterfaces);
}
return interfaces;
}
Expand All @@ -566,12 +578,12 @@ extension on InterfaceElement {
bool get isDartCoreObject => name == 'Object' && library.name == 'dart.core';
}

extension DefinedElementTypeIterableExtensions on Iterable<DefinedElementType> {
/// Expands the `ModelElement` for each element to its inheritance chain.
extension DefinedElementTypeIterableExtension on Iterable<DefinedElementType> {
/// Expands the [ModelElement] for each element to its inheritance chain.
Iterable<InheritingContainer> get expandInheritanceChain =>
expand((e) => (e.modelElement as InheritingContainer).inheritanceChain);

/// Returns the `ModelElement` for each element.
/// Returns the [ModelElement] for each element.
Iterable<InheritingContainer> get modelElements =>
map((e) => e.modelElement as InheritingContainer);
}
1 change: 0 additions & 1 deletion test/mustachio/foo.runtime_renderers.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import 'package:dartdoc/src/generator/template_data.dart';
import 'package:dartdoc/src/model/annotation.dart';
import 'package:dartdoc/src/model/attribute.dart';
import 'package:dartdoc/src/model/comment_referable.dart';
import 'package:dartdoc/src/model/extension_target.dart';
import 'package:dartdoc/src/model/feature_set.dart';
import 'package:dartdoc/src/model/language_feature.dart';
import 'package:dartdoc/src/model/model.dart';
Expand Down
1 change: 0 additions & 1 deletion tool/mustachio/codegen_runtime_renderer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,6 @@ import 'package:dartdoc/src/generator/template_data.dart';
import 'package:dartdoc/src/model/annotation.dart';
import 'package:dartdoc/src/model/attribute.dart';
import 'package:dartdoc/src/model/comment_referable.dart';
import 'package:dartdoc/src/model/extension_target.dart';
import 'package:dartdoc/src/model/feature_set.dart';
import 'package:dartdoc/src/model/language_feature.dart';
import 'package:dartdoc/src/model/model.dart';
Expand Down