Skip to content

Commit ec26cee

Browse files
authored
Remove unnecessary Builder classes (#3664)
1 parent a16973b commit ec26cee

33 files changed

+269
-351
lines changed

lib/src/element_type.dart

Lines changed: 13 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,35 +4,22 @@
44

55
/// The models used to represent Dart types, all subclasses of [ElementType].
66
///
7-
/// The only entrypoint for constructing these classes is
8-
/// [ElementTypeBuilderImpl.typeFrom], which delegates instantiation to various
9-
/// factories.
7+
/// The only entrypoint for constructing these classes is [ElementType.for_].
108
library;
119

1210
import 'package:analyzer/dart/element/element.dart';
1311
import 'package:analyzer/dart/element/nullability_suffix.dart';
1412
import 'package:analyzer/dart/element/type.dart';
1513
import 'package:dartdoc/src/model/comment_referable.dart';
1614
import 'package:dartdoc/src/model/model.dart';
17-
import 'package:dartdoc/src/model/model_object_builder.dart';
1815
import 'package:dartdoc/src/render/element_type_renderer.dart';
1916
import 'package:dartdoc/src/runtime_stats.dart';
2017
import 'package:dartdoc/src/type_utils.dart';
2118
import 'package:meta/meta.dart';
2219

23-
mixin ElementTypeBuilderImpl implements ElementTypeBuilder {
24-
PackageGraph get packageGraph;
25-
26-
@override
27-
ElementType typeFrom(DartType type, Library library) =>
28-
ElementType._from(type, library, packageGraph);
29-
}
30-
3120
/// Base class representing a type in Dartdoc. It wraps a [DartType], and
3221
/// may link to a [ModelElement].
33-
abstract class ElementType
34-
with CommentReferable, Nameable, ModelBuilder
35-
implements Privacy {
22+
abstract class ElementType with CommentReferable, Nameable implements Privacy {
3623
final DartType type;
3724
@override
3825
final PackageGraph packageGraph;
@@ -44,7 +31,7 @@ abstract class ElementType
4431
ElementType._(this.type, this.library, this.packageGraph)
4532
: nullabilitySuffix = type.nullabilitySuffixWithin(library);
4633

47-
factory ElementType._from(
34+
factory ElementType.for_(
4835
DartType type, Library library, PackageGraph packageGraph) {
4936
runtimeStats.incrementAccumulator('elementTypeInstantiation');
5037
var fElement = type.documentableElement;
@@ -53,7 +40,7 @@ abstract class ElementType
5340
fElement.kind == ElementKind.NEVER) {
5441
return UndefinedElementType._from(type, library, packageGraph);
5542
}
56-
var modelElement = packageGraph.modelBuilder.fromElement(fElement);
43+
var modelElement = packageGraph.getModelForElement(fElement);
5744
return DefinedElementType._from(type, modelElement, library, packageGraph);
5845
}
5946

@@ -158,7 +145,7 @@ class FunctionTypeElementType extends UndefinedElementType
158145
: super._();
159146

160147
List<TypeParameter> get typeFormals => type.typeFormals
161-
.map((p) => packageGraph.modelBuilder.from(p, library) as TypeParameter)
148+
.map((p) => getModelFor(p, library) as TypeParameter)
162149
.toList(growable: false);
163150

164151
@override
@@ -220,12 +207,12 @@ class ParameterizedElementType extends DefinedElementType with Rendered {
220207

221208
@override
222209
late final List<ElementType> typeArguments = type.typeArguments
223-
.map((f) => modelBuilder.typeFrom(f, library))
210+
.map((f) => getTypeFor(f, library))
224211
.toList(growable: false);
225212
}
226213

227-
/// A [ElementType] whose underlying type was referred to by a type alias.
228-
mixin Aliased implements ElementType, ModelBuilderInterface {
214+
/// An [ElementType] whose underlying type was referred to by a type alias.
215+
mixin Aliased implements ElementType {
229216
Element get typeAliasElement => type.alias!.element;
230217

231218
@override
@@ -235,10 +222,10 @@ mixin Aliased implements ElementType, ModelBuilderInterface {
235222
bool get isTypedef => true;
236223

237224
late final ModelElement aliasElement =
238-
modelBuilder.fromElement(typeAliasElement);
225+
ModelElement.forElement(typeAliasElement, packageGraph);
239226

240227
late final List<ElementType> aliasArguments = type.alias!.typeArguments
241-
.map((f) => modelBuilder.typeFrom(f, library))
228+
.map((f) => getTypeFor(f, library))
242229
.toList(growable: false);
243230
}
244231

@@ -373,18 +360,17 @@ abstract class DefinedElementType extends ElementType {
373360
@internal
374361
@override
375362
CommentReferable get definingCommentReferable =>
376-
modelBuilder.fromElement(modelElement.element);
363+
ModelElement.forElement(modelElement.element, packageGraph);
377364
}
378365

379366
/// Any callable [ElementType] will mix-in this class, whether anonymous or not,
380367
/// unless it is an alias reference.
381368
mixin Callable on ElementType {
382369
List<Parameter> get parameters => type.parameters
383-
.map((p) => modelBuilder.from(p, library) as Parameter)
370+
.map((p) => getModelFor(p, library) as Parameter)
384371
.toList(growable: false);
385372

386-
late final ElementType returnType =
387-
modelBuilder.typeFrom(type.returnType, library);
373+
late final ElementType returnType = getTypeFor(type.returnType, library);
388374

389375
@override
390376
// TODO(jcollins-g): mustachio should not require this

lib/src/generator/templates.runtime_renderers.dart

Lines changed: 17 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import 'package:dartdoc/src/model/comment_referable.dart';
1515
import 'package:dartdoc/src/model/feature_set.dart';
1616
import 'package:dartdoc/src/model/language_feature.dart';
1717
import 'package:dartdoc/src/model/model.dart';
18-
import 'package:dartdoc/src/model/model_object_builder.dart';
1918
import 'package:dartdoc/src/mustachio/parser.dart';
2019
import 'package:dartdoc/src/mustachio/renderer_base.dart';
2120
import 'package:dartdoc/src/warnings.dart';
@@ -426,7 +425,6 @@ class _Renderer_Annotation extends RendererBase<Annotation> {
426425
CT_,
427426
() => {
428427
..._Renderer_Attribute.propertyMap<CT_>(),
429-
..._Renderer_ModelBuilder.propertyMap<CT_>(),
430428
'annotation': Property(
431429
getValue: (CT_ c) => c.annotation,
432430
renderVariable: (CT_ c, Property<CT_> self,
@@ -1014,6 +1012,7 @@ class _Renderer_Category extends RendererBase<Category> {
10141012
_propertyMapCache.putIfAbsent(
10151013
CT_,
10161014
() => {
1015+
..._Renderer_Object.propertyMap<CT_>(),
10171016
..._Renderer_Nameable.propertyMap<CT_>(),
10181017
..._Renderer_Warnable.propertyMap<CT_>(),
10191018
..._Renderer_CommentReferable.propertyMap<CT_>(),
@@ -1023,7 +1022,6 @@ class _Renderer_Category extends RendererBase<Category> {
10231022
..._Renderer_LibraryContainer.propertyMap<CT_>(),
10241023
..._Renderer_TopLevelContainer.propertyMap<CT_>(),
10251024
..._Renderer_Indexable.propertyMap<CT_>(),
1026-
..._Renderer_ModelBuilder.propertyMap<CT_>(),
10271025
'aboveSidebarPath': Property(
10281026
getValue: (CT_ c) => c.aboveSidebarPath,
10291027
renderVariable:
@@ -3874,6 +3872,7 @@ class _Renderer_Documentable extends RendererBase<Documentable> {
38743872
_propertyMapCache.putIfAbsent(
38753873
CT_,
38763874
() => {
3875+
..._Renderer_Object.propertyMap<CT_>(),
38773876
..._Renderer_Nameable.propertyMap<CT_>(),
38783877
'aboveSidebarPath': Property(
38793878
getValue: (CT_ c) => c.aboveSidebarPath,
@@ -4351,7 +4350,6 @@ class _Renderer_ElementType extends RendererBase<ElementType> {
43514350
..._Renderer_Object.propertyMap<CT_>(),
43524351
..._Renderer_CommentReferable.propertyMap<CT_>(),
43534352
..._Renderer_Nameable.propertyMap<CT_>(),
4354-
..._Renderer_ModelBuilder.propertyMap<CT_>(),
43554353
'breadcrumbName': Property(
43564354
getValue: (CT_ c) => c.breadcrumbName,
43574355
renderVariable:
@@ -10266,55 +10264,6 @@ class _Renderer_MixinTemplateData extends RendererBase<MixinTemplateData> {
1026610264
}
1026710265
}
1026810266

10269-
class _Renderer_ModelBuilder extends RendererBase<ModelBuilder> {
10270-
static final Map<Type, Object> _propertyMapCache = {};
10271-
static Map<String, Property<CT_>> propertyMap<CT_ extends ModelBuilder>() =>
10272-
_propertyMapCache.putIfAbsent(
10273-
CT_,
10274-
() => {
10275-
'modelBuilder': Property(
10276-
getValue: (CT_ c) => c.modelBuilder,
10277-
renderVariable: (CT_ c, Property<CT_> self,
10278-
List<String> remainingNames) =>
10279-
self.renderSimpleVariable(
10280-
c, remainingNames, 'ModelObjectBuilder'),
10281-
isNullValue: (CT_ c) => false,
10282-
renderValue: (CT_ c, RendererBase<CT_> r,
10283-
List<MustachioNode> ast, StringSink sink) {
10284-
renderSimple(c.modelBuilder, ast, r.template, sink,
10285-
parent: r,
10286-
getters: _invisibleGetters['ModelObjectBuilder']!);
10287-
},
10288-
),
10289-
'packageGraph': Property(
10290-
getValue: (CT_ c) => c.packageGraph,
10291-
renderVariable: (CT_ c, Property<CT_> self,
10292-
List<String> remainingNames) =>
10293-
self.renderSimpleVariable(
10294-
c, remainingNames, 'PackageGraph'),
10295-
isNullValue: (CT_ c) => false,
10296-
renderValue: (CT_ c, RendererBase<CT_> r,
10297-
List<MustachioNode> ast, StringSink sink) {
10298-
renderSimple(c.packageGraph, ast, r.template, sink,
10299-
parent: r, getters: _invisibleGetters['PackageGraph']!);
10300-
},
10301-
),
10302-
}) as Map<String, Property<CT_>>;
10303-
10304-
_Renderer_ModelBuilder(ModelBuilder context, RendererBase<Object>? parent,
10305-
Template template, StringSink sink)
10306-
: super(context, parent, template, sink);
10307-
10308-
@override
10309-
Property<ModelBuilder>? getProperty(String key) {
10310-
if (propertyMap<ModelBuilder>().containsKey(key)) {
10311-
return propertyMap<ModelBuilder>()[key];
10312-
} else {
10313-
return null;
10314-
}
10315-
}
10316-
}
10317-
1031810267
void _render_ModelElement(ModelElement context, List<MustachioNode> ast,
1031910268
Template template, StringSink sink,
1032010269
{RendererBase<Object>? parent}) {
@@ -10337,7 +10286,6 @@ class _Renderer_ModelElement extends RendererBase<ModelElement> {
1033710286
..._Renderer_Indexable.propertyMap<CT_>(),
1033810287
..._Renderer_FeatureSet.propertyMap<CT_>(),
1033910288
..._Renderer_DocumentationComment.propertyMap<CT_>(),
10340-
..._Renderer_ModelBuilder.propertyMap<CT_>(),
1034110289
'annotations': Property(
1034210290
getValue: (CT_ c) => c.annotations,
1034310291
renderVariable: (CT_ c, Property<CT_> self,
@@ -11531,7 +11479,6 @@ class _Renderer_Nameable extends RendererBase<Nameable> {
1153111479
_propertyMapCache.putIfAbsent(
1153211480
CT_,
1153311481
() => {
11534-
..._Renderer_Object.propertyMap<CT_>(),
1153511482
'breadcrumbName': Property(
1153611483
getValue: (CT_ c) => c.breadcrumbName,
1153711484
renderVariable:
@@ -11653,6 +11600,19 @@ class _Renderer_Nameable extends RendererBase<Nameable> {
1165311600
_render_String(e, ast, r.template, sink, parent: r));
1165411601
},
1165511602
),
11603+
'packageGraph': Property(
11604+
getValue: (CT_ c) => c.packageGraph,
11605+
renderVariable: (CT_ c, Property<CT_> self,
11606+
List<String> remainingNames) =>
11607+
self.renderSimpleVariable(
11608+
c, remainingNames, 'PackageGraph'),
11609+
isNullValue: (CT_ c) => false,
11610+
renderValue: (CT_ c, RendererBase<CT_> r,
11611+
List<MustachioNode> ast, StringSink sink) {
11612+
renderSimple(c.packageGraph, ast, r.template, sink,
11613+
parent: r, getters: _invisibleGetters['PackageGraph']!);
11614+
},
11615+
),
1165611616
}) as Map<String, Property<CT_>>;
1165711617

1165811618
_Renderer_Nameable(Nameable context, RendererBase<Object>? parent,
@@ -11870,7 +11830,6 @@ class _Renderer_Package extends RendererBase<Package> {
1187011830
..._Renderer_Canonicalization.propertyMap<CT_>(),
1187111831
..._Renderer_Warnable.propertyMap<CT_>(),
1187211832
..._Renderer_CommentReferable.propertyMap<CT_>(),
11873-
..._Renderer_ModelBuilder.propertyMap<CT_>(),
1187411833
'aboveSidebarPath': Property(
1187511834
getValue: (CT_ c) => c.aboveSidebarPath,
1187611835
renderVariable:
@@ -12591,7 +12550,7 @@ class _Renderer_Package extends RendererBase<Package> {
1259112550
}
1259212551
}
1259312552

12594-
String renderIndex(PackageTemplateData context, Template template) {
12553+
String renderSearchPage(PackageTemplateData context, Template template) {
1259512554
var buffer = StringBuffer();
1259612555
_render_PackageTemplateData(context, template.ast, template, buffer);
1259712556
return buffer.toString();
@@ -12829,7 +12788,7 @@ class _Renderer_PackageTemplateData extends RendererBase<PackageTemplateData> {
1282912788
}
1283012789
}
1283112790

12832-
String renderSearchPage(PackageTemplateData context, Template template) {
12791+
String renderIndex(PackageTemplateData context, Template template) {
1283312792
var buffer = StringBuffer();
1283412793
_render_PackageTemplateData(context, template.ast, template, buffer);
1283512794
return buffer.toString();
@@ -16883,7 +16842,6 @@ const _invisibleGetters = {
1688316842
},
1688416843
'ModelElementRenderer': {'hashCode', 'runtimeType'},
1688516844
'ModelNode': {'hashCode', 'runtimeType', 'sourceCode'},
16886-
'ModelObjectBuilder': {'hashCode', 'runtimeType'},
1688716845
'PackageGraph': {
1688816846
'allConstructedModelElements',
1688916847
'allExtensionsAdded',

lib/src/model/accessor.dart

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,16 @@ class Accessor extends ModelElement implements EnclosedElement {
4444
ExecutableMember? get originalMember =>
4545
super.originalMember as ExecutableMember?;
4646

47-
late final Callable modelType = modelBuilder.typeFrom(
48-
(originalMember ?? element).type, library) as Callable;
47+
late final Callable modelType =
48+
getTypeFor((originalMember ?? element).type, library) as Callable;
4949

5050
bool get isSynthetic => element.isSynthetic;
5151

5252
SourceCodeRenderer get _sourceCodeRenderer => const SourceCodeRendererHtml();
5353

5454
// The [enclosingCombo] where this element was defined.
5555
late final GetterSetterCombo definingCombo =
56-
modelBuilder.fromElement(element.variable) as GetterSetterCombo;
56+
getModelForElement(element.variable) as GetterSetterCombo;
5757

5858
String get _sourceCode {
5959
if (!isSynthetic) {
@@ -123,11 +123,10 @@ class Accessor extends ModelElement implements EnclosedElement {
123123
@override
124124
ModelElement get enclosingElement {
125125
if (element.enclosingElement is CompilationUnitElement) {
126-
return modelBuilder
127-
.fromElement(element.enclosingElement.enclosingElement!);
126+
return getModelForElement(element.enclosingElement.enclosingElement!);
128127
}
129128

130-
return modelBuilder.from(element.enclosingElement, library);
129+
return packageGraph.getModelFor(element.enclosingElement, library);
131130
}
132131

133132
@override
@@ -236,7 +235,7 @@ class ContainerAccessor extends Accessor with ContainerMember, Inheritable {
236235
continue;
237236
}
238237
final parentContainer =
239-
modelBuilder.fromElement(supertype.element) as InheritingContainer;
238+
getModelForElement(supertype.element) as InheritingContainer;
240239
final possibleFields =
241240
parentContainer.declaredFields.where((f) => !f.isStatic);
242241
final fieldName = accessor.name.replaceFirst('=', '');

lib/src/model/annotation.dart

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,14 @@ import 'package:dartdoc/src/model/attribute.dart';
1010
import 'package:dartdoc/src/model/class.dart';
1111
import 'package:dartdoc/src/model/getter_setter_combo.dart';
1212
import 'package:dartdoc/src/model/library.dart';
13-
import 'package:dartdoc/src/model/model_object_builder.dart';
1413
import 'package:dartdoc/src/model/package_graph.dart';
1514

1615
/// Represents a Dart annotation, attached to an element in the source code with
1716
/// `@`.
18-
class Annotation extends Attribute with ModelBuilder {
17+
class Annotation extends Attribute {
1918
final ElementAnnotation annotation;
2019
final Library library;
2120

22-
@override
2321
final PackageGraph packageGraph;
2422

2523
Annotation(this.annotation, this.library, this.packageGraph)
@@ -31,15 +29,16 @@ class Annotation extends Attribute with ModelBuilder {
3129

3230
@override
3331
String get linkedName => annotation.element is PropertyAccessorElement
34-
? modelBuilder.fromElement(annotation.element!).linkedName
32+
? packageGraph.getModelForElement(annotation.element!).linkedName
3533
// TODO(jcollins-g): consider linking to constructor instead of type?
3634
: modelType.linkedName;
3735

3836
late final ElementType modelType = switch (annotation.element) {
3937
ConstructorElement(:var returnType) =>
40-
modelBuilder.typeFrom(returnType, library),
38+
packageGraph.getTypeFor(returnType, library),
4139
PropertyAccessorElement(:var variable) =>
42-
(modelBuilder.fromElement(variable) as GetterSetterCombo).modelType,
40+
(packageGraph.getModelForElement(variable) as GetterSetterCombo)
41+
.modelType,
4342
_ => throw StateError(
4443
'non-callable element used as annotation?: ${annotation.element}')
4544
};

lib/src/model/category.dart

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,20 @@ import 'package:analyzer/file_system/file_system.dart';
77
import 'package:dartdoc/src/dartdoc_options.dart';
88
import 'package:dartdoc/src/model/comment_referable.dart';
99
import 'package:dartdoc/src/model/model.dart';
10-
import 'package:dartdoc/src/model/model_object_builder.dart';
1110
import 'package:dartdoc/src/warnings.dart';
1211

1312
/// A subcategory of a package, containing elements tagged with `{@category}`.
14-
class Category extends Nameable
13+
class Category
1514
with
15+
Nameable,
1616
Warnable,
1717
CommentReferable,
1818
Locatable,
1919
Canonicalization,
2020
MarkdownFileDocumentation,
2121
LibraryContainer,
2222
TopLevelContainer,
23-
Indexable,
24-
ModelBuilder
23+
Indexable
2524
implements Documentable {
2625
/// All libraries in [libraries] must come from [_package].
2726
@override

0 commit comments

Comments
 (0)