Skip to content

Commit 8c9c779

Browse files
authored
Remove unnecessary ExtensionTarget mixin (#3648)
1 parent d2f90c5 commit 8c9c779

File tree

6 files changed

+55
-130
lines changed

6 files changed

+55
-130
lines changed

lib/src/generator/templates.runtime_renderers.dart

Lines changed: 22 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import 'package:dartdoc/src/generator/template_data.dart';
1212
import 'package:dartdoc/src/model/annotation.dart';
1313
import 'package:dartdoc/src/model/attribute.dart';
1414
import 'package:dartdoc/src/model/comment_referable.dart';
15-
import 'package:dartdoc/src/model/extension_target.dart';
1615
import 'package:dartdoc/src/model/feature_set.dart';
1716
import 'package:dartdoc/src/model/language_feature.dart';
1817
import 'package:dartdoc/src/model/model.dart';
@@ -5089,77 +5088,6 @@ class _Renderer_Extension extends RendererBase<Extension> {
50895088
}
50905089
}
50915090

5092-
class _Renderer_ExtensionTarget extends RendererBase<ExtensionTarget> {
5093-
static final Map<Type, Object> _propertyMapCache = {};
5094-
static Map<String, Property<CT_>> propertyMap<
5095-
CT_ extends ExtensionTarget>() =>
5096-
_propertyMapCache.putIfAbsent(
5097-
CT_,
5098-
() => {
5099-
'hasModifiers': Property(
5100-
getValue: (CT_ c) => c.hasModifiers,
5101-
renderVariable: (CT_ c, Property<CT_> self,
5102-
List<String> remainingNames) =>
5103-
self.renderSimpleVariable(c, remainingNames, 'bool'),
5104-
getBool: (CT_ c) => c.hasModifiers,
5105-
),
5106-
'hasPotentiallyApplicableExtensions': Property(
5107-
getValue: (CT_ c) => c.hasPotentiallyApplicableExtensions,
5108-
renderVariable: (CT_ c, Property<CT_> self,
5109-
List<String> remainingNames) =>
5110-
self.renderSimpleVariable(c, remainingNames, 'bool'),
5111-
getBool: (CT_ c) => c.hasPotentiallyApplicableExtensions,
5112-
),
5113-
'modelType': Property(
5114-
getValue: (CT_ c) => c.modelType,
5115-
renderVariable:
5116-
(CT_ c, Property<CT_> self, List<String> remainingNames) {
5117-
if (remainingNames.isEmpty) {
5118-
return self.getValue(c).toString();
5119-
}
5120-
var name = remainingNames.first;
5121-
var nextProperty =
5122-
_Renderer_ElementType.propertyMap().getValue(name);
5123-
return nextProperty.renderVariable(
5124-
self.getValue(c) as ElementType,
5125-
nextProperty,
5126-
[...remainingNames.skip(1)]);
5127-
},
5128-
isNullValue: (CT_ c) => false,
5129-
renderValue: (CT_ c, RendererBase<CT_> r,
5130-
List<MustachioNode> ast, StringSink sink) {
5131-
_render_ElementType(c.modelType, ast, r.template, sink,
5132-
parent: r);
5133-
},
5134-
),
5135-
'potentiallyApplicableExtensionsSorted': Property(
5136-
getValue: (CT_ c) => c.potentiallyApplicableExtensionsSorted,
5137-
renderVariable: (CT_ c, Property<CT_> self,
5138-
List<String> remainingNames) =>
5139-
self.renderSimpleVariable(
5140-
c, remainingNames, 'List<Extension>'),
5141-
renderIterable: (CT_ c, RendererBase<CT_> r,
5142-
List<MustachioNode> ast, StringSink sink) {
5143-
return c.potentiallyApplicableExtensionsSorted.map((e) =>
5144-
_render_Extension(e, ast, r.template, sink, parent: r));
5145-
},
5146-
),
5147-
}) as Map<String, Property<CT_>>;
5148-
5149-
_Renderer_ExtensionTarget(ExtensionTarget context,
5150-
RendererBase<Object>? parent, Template template, StringSink sink)
5151-
: super(context, parent, template, sink);
5152-
5153-
@override
5154-
Property<ExtensionTarget>? getProperty(String key) {
5155-
if (propertyMap<ExtensionTarget>().containsKey(key)) {
5156-
return propertyMap<ExtensionTarget>()[key];
5157-
} else {
5158-
return null;
5159-
}
5160-
}
5161-
}
5162-
51635091
String renderExtension<T extends Extension>(
51645092
ExtensionTemplateData<T> context, Template template) {
51655093
var buffer = StringBuffer();
@@ -7448,7 +7376,6 @@ class _Renderer_InheritingContainer extends RendererBase<InheritingContainer> {
74487376
CT_,
74497377
() => {
74507378
..._Renderer_Container.propertyMap<CT_>(),
7451-
..._Renderer_ExtensionTarget.propertyMap<CT_>(),
74527379
'allFields': Property(
74537380
getValue: (CT_ c) => c.allFields,
74547381
renderVariable: (CT_ c, Property<CT_> self,
@@ -7626,6 +7553,13 @@ class _Renderer_InheritingContainer extends RendererBase<InheritingContainer> {
76267553
self.renderSimpleVariable(c, remainingNames, 'bool'),
76277554
getBool: (CT_ c) => c.hasModifiers,
76287555
),
7556+
'hasPotentiallyApplicableExtensions': Property(
7557+
getValue: (CT_ c) => c.hasPotentiallyApplicableExtensions,
7558+
renderVariable: (CT_ c, Property<CT_> self,
7559+
List<String> remainingNames) =>
7560+
self.renderSimpleVariable(c, remainingNames, 'bool'),
7561+
getBool: (CT_ c) => c.hasPotentiallyApplicableExtensions,
7562+
),
76297563
'hasPublicSuperChainReversed': Property(
76307564
getValue: (CT_ c) => c.hasPublicSuperChainReversed,
76317565
renderVariable: (CT_ c, Property<CT_> self,
@@ -7779,6 +7713,18 @@ class _Renderer_InheritingContainer extends RendererBase<InheritingContainer> {
77797713
parent: r);
77807714
},
77817715
),
7716+
'potentiallyApplicableExtensionsSorted': Property(
7717+
getValue: (CT_ c) => c.potentiallyApplicableExtensionsSorted,
7718+
renderVariable: (CT_ c, Property<CT_> self,
7719+
List<String> remainingNames) =>
7720+
self.renderSimpleVariable(
7721+
c, remainingNames, 'List<Extension>'),
7722+
renderIterable: (CT_ c, RendererBase<CT_> r,
7723+
List<MustachioNode> ast, StringSink sink) {
7724+
return c.potentiallyApplicableExtensionsSorted.map((e) =>
7725+
_render_Extension(e, ast, r.template, sink, parent: r));
7726+
},
7727+
),
77827728
'publicInheritedInstanceFields': Property(
77837729
getValue: (CT_ c) => c.publicInheritedInstanceFields,
77847730
renderVariable: (CT_ c, Property<CT_> self,
@@ -12632,7 +12578,7 @@ class _Renderer_Package extends RendererBase<Package> {
1263212578
}
1263312579
}
1263412580

12635-
String renderSearchPage(PackageTemplateData context, Template template) {
12581+
String renderIndex(PackageTemplateData context, Template template) {
1263612582
var buffer = StringBuffer();
1263712583
_render_PackageTemplateData(context, template.ast, template, buffer);
1263812584
return buffer.toString();
@@ -12870,13 +12816,13 @@ class _Renderer_PackageTemplateData extends RendererBase<PackageTemplateData> {
1287012816
}
1287112817
}
1287212818

12873-
String renderError(PackageTemplateData context, Template template) {
12819+
String renderSearchPage(PackageTemplateData context, Template template) {
1287412820
var buffer = StringBuffer();
1287512821
_render_PackageTemplateData(context, template.ast, template, buffer);
1287612822
return buffer.toString();
1287712823
}
1287812824

12879-
String renderIndex(PackageTemplateData context, Template template) {
12825+
String renderError(PackageTemplateData context, Template template) {
1288012826
var buffer = StringBuffer();
1288112827
_render_PackageTemplateData(context, template.ast, template, buffer);
1288212828
return buffer.toString();

lib/src/model/extension.dart

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import 'package:analyzer/dart/element/element.dart';
66
import 'package:analyzer/dart/element/type.dart';
77
import 'package:dartdoc/src/element_type.dart';
88
import 'package:dartdoc/src/model/comment_referable.dart';
9-
import 'package:dartdoc/src/model/extension_target.dart';
109
import 'package:dartdoc/src/model/model.dart';
1110
import 'package:dartdoc/src/type_utils.dart';
1211
import 'package:meta/meta.dart';
@@ -28,8 +27,8 @@ class Extension extends Container implements EnclosedElement {
2827
extendedType.instantiatedType is VoidType ||
2928
extendedType.instantiatedType.isDartCoreObject;
3029

31-
bool couldApplyTo<T extends ExtensionTarget>(T c) =>
32-
_couldApplyTo(c.modelType as DefinedElementType);
30+
bool couldApplyTo<T extends InheritingContainer>(T c) =>
31+
_couldApplyTo(c.modelType);
3332

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

5958
@override
60-
late List<Method> declaredMethods = element.methods
59+
late final List<Method> declaredMethods = element.methods
6160
.map((e) => modelBuilder.from(e, library) as Method)
6261
.toList(growable: false);
6362

lib/src/model/extension_target.dart

Lines changed: 0 additions & 30 deletions
This file was deleted.

lib/src/model/inheriting_container.dart

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import 'package:collection/collection.dart' show IterableExtension;
88
import 'package:dartdoc/src/element_type.dart';
99
import 'package:dartdoc/src/model/comment_referable.dart';
1010
import 'package:dartdoc/src/model/container_modifiers.dart';
11-
import 'package:dartdoc/src/model/extension_target.dart';
1211
import 'package:dartdoc/src/model/language_feature.dart';
1312
import 'package:dartdoc/src/model/model.dart';
1413
import 'package:dartdoc/src/model_utils.dart' as model_utils;
@@ -74,8 +73,9 @@ mixin Constructable on InheritingContainer {
7473
/// * **instance**: As with [Container], but also includes inherited children.
7574
/// * **inherited**: Filtered getters giving only inherited children.
7675
abstract class InheritingContainer extends Container
77-
with ExtensionTarget
7876
implements EnclosedElement {
77+
InheritingContainer(super.library, super.packageGraph);
78+
7979
DefinedElementType? get supertype {
8080
final elementSupertype = element.supertype;
8181
return elementSupertype == null ||
@@ -138,7 +138,6 @@ abstract class InheritingContainer extends Container
138138
];
139139
}
140140

141-
@override
142141
late final DefinedElementType modelType =
143142
modelBuilder.typeFrom(element.thisType, library) as DefinedElementType;
144143

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

261-
InheritingContainer(super.library, super.packageGraph);
260+
bool get hasPotentiallyApplicableExtensions =>
261+
potentiallyApplicableExtensionsSorted.isNotEmpty;
262+
263+
/// The sorted list of potentially applicable extensions, for display in
264+
/// templates.
265+
///
266+
/// This is defined as those extensions where an instantiation of the type
267+
/// defined by [element] can exist where this extension applies, not including
268+
/// any extension that applies to every type.
269+
late final List<Extension> potentiallyApplicableExtensionsSorted =
270+
packageGraph.documentedExtensions
271+
.where((e) => !e.alwaysApplies)
272+
.where((e) => e.couldApplyTo(this))
273+
.toList(growable: false)
274+
..sort(byName);
262275

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

282295
String get fullkind => kind.toString();
283296

284-
@override
285297
bool get hasModifiers =>
286298
hasAnnotations ||
287299
hasPublicSuperChainReversed ||
@@ -544,19 +556,19 @@ mixin TypeImplementing on InheritingContainer {
544556
// the superchain and publicInterfaces of this interface to pretend
545557
// as though the hidden class didn't exist and this class was declared
546558
// directly referencing the canonical classes further up the chain.
547-
if (interfaceElement is InheritingContainer) {
548-
if (interfaceElement.publicSuperChain.isNotEmpty) {
549-
interfaces.add(interfaceElement.publicSuperChain.first);
550-
}
551-
interfaces.addAll(interfaceElement.publicInterfaces);
552-
} else {
559+
if (interfaceElement is! InheritingContainer) {
553560
assert(
554-
false,
555-
'Can not handle intermediate non-public interfaces created by '
556-
'ModelElements that are not classes or mixins: $fullyQualifiedName '
557-
'contains an interface $interface, defined by $interfaceElement');
561+
false,
562+
'Can not handle intermediate non-public interfaces created by '
563+
"ModelElements that are not classes or mixins: '$fullyQualifiedName' "
564+
"contains an interface '$interface', defined by '$interfaceElement'",
565+
);
558566
continue;
559567
}
568+
if (interfaceElement.publicSuperChain.isNotEmpty) {
569+
interfaces.add(interfaceElement.publicSuperChain.first);
570+
}
571+
interfaces.addAll(interfaceElement.publicInterfaces);
560572
}
561573
return interfaces;
562574
}
@@ -566,12 +578,12 @@ extension on InterfaceElement {
566578
bool get isDartCoreObject => name == 'Object' && library.name == 'dart.core';
567579
}
568580

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

574-
/// Returns the `ModelElement` for each element.
586+
/// Returns the [ModelElement] for each element.
575587
Iterable<InheritingContainer> get modelElements =>
576588
map((e) => e.modelElement as InheritingContainer);
577589
}

test/mustachio/foo.runtime_renderers.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import 'package:dartdoc/src/generator/template_data.dart';
1212
import 'package:dartdoc/src/model/annotation.dart';
1313
import 'package:dartdoc/src/model/attribute.dart';
1414
import 'package:dartdoc/src/model/comment_referable.dart';
15-
import 'package:dartdoc/src/model/extension_target.dart';
1615
import 'package:dartdoc/src/model/feature_set.dart';
1716
import 'package:dartdoc/src/model/language_feature.dart';
1817
import 'package:dartdoc/src/model/model.dart';

tool/mustachio/codegen_runtime_renderer.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ import 'package:dartdoc/src/generator/template_data.dart';
8989
import 'package:dartdoc/src/model/annotation.dart';
9090
import 'package:dartdoc/src/model/attribute.dart';
9191
import 'package:dartdoc/src/model/comment_referable.dart';
92-
import 'package:dartdoc/src/model/extension_target.dart';
9392
import 'package:dartdoc/src/model/feature_set.dart';
9493
import 'package:dartdoc/src/model/language_feature.dart';
9594
import 'package:dartdoc/src/model/model.dart';

0 commit comments

Comments
 (0)