Skip to content

Commit c45302c

Browse files
authored
constructor refactor for element type (#2829)
1 parent 96832aa commit c45302c

16 files changed

+67
-46
lines changed

lib/dartdoc.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44

55
/// A documentation generator for Dart.
66
///
7-
/// Library interface is currently under heavy construction and may change
8-
/// drastically between minor revisions.
7+
/// Library interface is still experimental.
8+
@experimental
99
library dartdoc;
1010

1111
import 'dart:async';

lib/src/element_type.dart

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,15 @@ import 'package:dartdoc/src/model/model.dart';
1313
import 'package:dartdoc/src/model/model_object_builder.dart';
1414
import 'package:dartdoc/src/render/element_type_renderer.dart';
1515

16+
mixin ElementTypeBuilderImpl implements ElementTypeBuilder {
17+
PackageGraph get packageGraph;
18+
19+
@override
20+
ElementType typeFrom(DartType f, Library library,
21+
{ElementType returnedFrom}) =>
22+
ElementType._from(f, library, packageGraph, returnedFrom: returnedFrom);
23+
}
24+
1625
/// Base class representing a type in Dartdoc. It wraps a [DartType], and
1726
/// may link to a [ModelElement].
1827
abstract class ElementType extends Privacy
@@ -26,7 +35,7 @@ abstract class ElementType extends Privacy
2635

2736
ElementType(this._type, this.library, this.packageGraph, this.returnedFrom);
2837

29-
factory ElementType.from(
38+
factory ElementType._from(
3039
DartType f, Library library, PackageGraph packageGraph,
3140
{ElementType returnedFrom}) {
3241
if (f.element == null ||
@@ -215,7 +224,7 @@ class ParameterizedElementType extends DefinedElementType with Rendered {
215224
@override
216225
Iterable<ElementType> get typeArguments =>
217226
_typeArguments ??= type.typeArguments
218-
.map((f) => ElementType.from(f, library, packageGraph))
227+
.map((f) => modelBuilder.typeFrom(f, library))
219228
.toList(growable: false);
220229
}
221230

@@ -234,7 +243,7 @@ mixin Aliased implements ElementType, ModelBuilderInterface {
234243
Iterable<ElementType> _aliasArguments;
235244
Iterable<ElementType> get aliasArguments =>
236245
_aliasArguments ??= type.alias.typeArguments
237-
.map((f) => ElementType.from(f, library, packageGraph))
246+
.map((f) => modelBuilder.typeFrom(f, library))
238247
.toList(growable: false);
239248
}
240249

@@ -381,7 +390,7 @@ mixin Callable implements ElementType {
381390

382391
ElementType _returnType;
383392
ElementType get returnType {
384-
_returnType ??= ElementType.from(type.returnType, library, packageGraph);
393+
_returnType ??= modelBuilder.typeFrom(type.returnType, library);
385394
return _returnType;
386395
}
387396

@@ -432,7 +441,7 @@ class CallableElementType extends DefinedElementType with Rendered, Callable {
432441
@override
433442
Iterable<ElementType> get typeArguments =>
434443
_typeArguments ??= (type.alias?.typeArguments ?? [])
435-
.map((f) => ElementType.from(f, library, packageGraph))
444+
.map((f) => modelBuilder.typeFrom(f, library))
436445
.toList(growable: false);
437446
}
438447

lib/src/model/accessor.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class Accessor extends ModelElement implements EnclosedElement {
3939

4040
Callable _modelType;
4141
Callable get modelType => _modelType ??=
42-
ElementType.from((originalMember ?? element).type, library, packageGraph);
42+
modelBuilder.typeFrom((originalMember ?? element).type, library);
4343

4444
bool get isSynthetic => element.isSynthetic;
4545

@@ -137,8 +137,8 @@ class Accessor extends ModelElement implements EnclosedElement {
137137
@override
138138
ModelElement get enclosingElement {
139139
if (element.enclosingElement is CompilationUnitElement) {
140-
return packageGraph.findButDoNotCreateLibraryFor(
141-
element.enclosingElement.enclosingElement);
140+
return modelBuilder
141+
.fromElement(element.enclosingElement.enclosingElement);
142142
}
143143

144144
return modelBuilder.from(element.enclosingElement, library);

lib/src/model/annotation.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,7 @@ class Annotation extends Feature with ModelBuilder {
3838
if (_modelType == null) {
3939
var annotatedWith = annotation.element;
4040
if (annotatedWith is ConstructorElement) {
41-
_modelType =
42-
ElementType.from(annotatedWith.returnType, library, packageGraph);
41+
_modelType = modelBuilder.typeFrom(annotatedWith.returnType, library);
4342
} else if (annotatedWith is PropertyAccessorElement) {
4443
_modelType = (modelBuilder.fromElement(annotatedWith.variable)
4544
as GetterSetterCombo)

lib/src/model/constructor.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class Constructor extends ModelElement
7979

8080
Callable _modelType;
8181
Callable get modelType =>
82-
_modelType ??= ElementType.from(element.type, library, packageGraph);
82+
_modelType ??= modelBuilder.typeFrom(element.type, library);
8383

8484
String _name;
8585

lib/src/model/extension.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ class Extension extends Container implements EnclosedElement {
1616
Extension(
1717
ExtensionElement element, Library library, PackageGraph packageGraph)
1818
: super(element, library, packageGraph) {
19-
extendedType =
20-
ElementType.from(_extension.extendedType, library, packageGraph);
19+
extendedType = modelBuilder.typeFrom(_extension.extendedType, library);
2120
}
2221

2322
/// Detect if this extension applies to every object.

lib/src/model/inheriting_container.dart

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,7 @@ mixin MixedInTypes on InheritingContainer {
9696
_mixedInTypes ??
9797
[
9898
...element.mixins
99-
.map<DefinedElementType>(
100-
(f) => ElementType.from(f, library, packageGraph))
99+
.map<DefinedElementType>((f) => modelBuilder.typeFrom(f, library))
101100
.where((mixin) => mixin != null)
102101
];
103102

@@ -118,8 +117,7 @@ mixin TypeImplementing on InheritingContainer {
118117
_directInterfaces ??
119118
[
120119
...element.interfaces
121-
.map<DefinedElementType>(
122-
(f) => ElementType.from(f, library, packageGraph))
120+
.map<DefinedElementType>((f) => modelBuilder.typeFrom(f, library))
123121
.toList(growable: false)
124122
];
125123

@@ -224,14 +222,15 @@ abstract class InheritingContainer extends Container
224222
/// [ClassElement] is analogous to [InheritingContainer].
225223
ClassElement get element => super.element;
226224

227-
final DefinedElementType supertype;
225+
DefinedElementType _supertype;
226+
DefinedElementType get supertype =>
227+
_supertype ??= element.supertype?.element?.supertype == null
228+
? null
229+
: modelBuilder.typeFrom(element.supertype, library);
228230

229231
InheritingContainer(
230232
ClassElement element, Library library, PackageGraph packageGraph)
231-
: supertype = element.supertype?.element?.supertype == null
232-
? null
233-
: ElementType.from(element.supertype, library, packageGraph),
234-
super(element, library, packageGraph);
233+
: super(element, library, packageGraph);
235234

236235
@override
237236
Iterable<Method> get instanceMethods =>
@@ -361,7 +360,7 @@ abstract class InheritingContainer extends Container
361360

362361
@override
363362
DefinedElementType get modelType =>
364-
_modelType ??= ElementType.from(element.thisType, library, packageGraph);
363+
_modelType ??= modelBuilder.typeFrom(element.thisType, library);
365364

366365
/// Not the same as superChain as it may include mixins.
367366
/// It's really not even the same as ordinary Dart inheritance, either,
@@ -381,8 +380,8 @@ abstract class InheritingContainer extends Container
381380
if ((parent.type as InterfaceType)?.superclass?.superclass == null) {
382381
parent = null;
383382
} else {
384-
parent = ElementType.from(
385-
(parent.type as InterfaceType).superclass, library, packageGraph);
383+
parent = modelBuilder.typeFrom(
384+
(parent.type as InterfaceType).superclass, library);
386385
}
387386
} else {
388387
parent = (parent.modelElement as Class).supertype;

lib/src/model/library.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ class Library extends ModelElement with Categorization, TopLevelContainer {
252252
importedExportedLibraryElements.addAll(element.importedLibraries);
253253
importedExportedLibraryElements.addAll(element.exportedLibraries);
254254
for (var l in importedExportedLibraryElements) {
255-
var lib = packageGraph.findButDoNotCreateLibraryFor(l);
255+
var lib = modelBuilder.fromElement(l) as Library;
256256
_importedExportedLibraries.add(lib);
257257
_importedExportedLibraries.addAll(lib.importedExportedLibraries);
258258
}

lib/src/model/method.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ class Method extends ModelElement
9999

100100
Callable _modelType;
101101
Callable get modelType => _modelType ??=
102-
ElementType.from((originalMember ?? element).type, library, packageGraph);
102+
modelBuilder.typeFrom((originalMember ?? element).type, library);
103103

104104
@override
105105
Method get overriddenElement {

lib/src/model/mixin.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class Mixin extends InheritingContainer with TypeImplementing {
2121
_superclassConstraints ??= [
2222
...element.superclassConstraints
2323
.map<ParameterizedElementType>(
24-
(InterfaceType i) => ElementType.from(i, library, packageGraph))
24+
(InterfaceType i) => modelBuilder.typeFrom(i, library))
2525
.where((t) =>
2626
t.modelElement !=
2727
packageGraph.specialClasses[SpecialClass.object])

0 commit comments

Comments
 (0)