Skip to content

Move renderer access behind a renderer factory #2086

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 1 commit into from
Dec 4, 2019
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
24 changes: 15 additions & 9 deletions lib/src/element_type.dart
Original file line number Diff line number Diff line change
Expand Up @@ -132,8 +132,7 @@ class FunctionTypeElementType extends UndefinedElementType {
@override
String get linkedName {
if (_linkedName == null) {
_linkedName =
FunctionTypeElementTypeRendererHtml().renderLinkedName(this);
_linkedName = _renderer.renderLinkedName(this);
}
return _linkedName;
}
Expand All @@ -146,8 +145,7 @@ class FunctionTypeElementType extends UndefinedElementType {
@override
String get nameWithGenerics {
if (_nameWithGenerics == null) {
_nameWithGenerics =
FunctionTypeElementTypeRendererHtml().renderNameWithGenerics(this);
_nameWithGenerics = _renderer.renderNameWithGenerics(this);
}
return _nameWithGenerics;
}
Expand All @@ -162,6 +160,9 @@ class FunctionTypeElementType extends UndefinedElementType {

@override
String get name => 'Function';

ElementTypeRenderer<FunctionTypeElementType> get _renderer =>
packageGraph.rendererFactory.functionTypeElementTypeRenderer;
}

class ParameterizedElementType extends DefinedElementType {
Expand All @@ -173,8 +174,7 @@ class ParameterizedElementType extends DefinedElementType {
@override
String get linkedName {
if (_linkedName == null) {
_linkedName =
ParameterizedElementTypeRendererHtml().renderLinkedName(this);
_linkedName = _renderer.renderLinkedName(this);
}
return _linkedName;
}
Expand All @@ -183,11 +183,13 @@ class ParameterizedElementType extends DefinedElementType {
@override
String get nameWithGenerics {
if (_nameWithGenerics == null) {
_nameWithGenerics =
ParameterizedElementTypeRendererHtml().renderNameWithGenerics(this);
_nameWithGenerics = _renderer.renderNameWithGenerics(this);
}
return _nameWithGenerics;
}

ElementTypeRenderer<ParameterizedElementType> get _renderer =>
packageGraph.rendererFactory.parameterizedElementTypeRenderer;
}

class TypeParameterElementType extends DefinedElementType {
Expand Down Expand Up @@ -362,12 +364,16 @@ class CallableElementType extends ParameterizedElementType
@override
String get linkedName {
if (_linkedName == null) {
_linkedName = CallableElementTypeRendererHtml().renderLinkedName(this);
_linkedName = _renderer.renderLinkedName(this);
}
return _linkedName;
}

String get superLinkedName => super.linkedName;

@override
ElementTypeRenderer<CallableElementType> get _renderer =>
packageGraph.rendererFactory.callableElementTypeRenderer;
}

/// Types backed by a [GenericTypeAliasElement] that may or may not be callable.
Expand Down
11 changes: 5 additions & 6 deletions lib/src/model/category.dart
Original file line number Diff line number Diff line change
Expand Up @@ -124,13 +124,9 @@ class Category extends Nameable
String get href =>
isCanonical ? '${package.baseHref}topics/${name}-topic.html' : null;

String get categorization {
return CategoryRendererHtml().renderCategoryLabel(this);
}
String get categorization => _renderer.renderCategoryLabel(this);

String get linkedName {
return CategoryRendererHtml().renderLinkedName(this);
}
String get linkedName => _renderer.renderLinkedName(this);

int _categoryIndex;

Expand Down Expand Up @@ -201,4 +197,7 @@ class Category extends Nameable

@override
Iterable<Typedef> get typedefs => _typedefs;

CategoryRenderer get _renderer =>
packageGraph.rendererFactory.categoryRenderer;
}
5 changes: 4 additions & 1 deletion lib/src/model/documentation.dart
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ class Documentation {
_hasExtendedDocs = parseResult.item2;

Tuple2<String, String> renderResult =
DocumentationRendererHtml().render(parseResult.item1, processAllDocs);
_renderer.render(parseResult.item1, processAllDocs);

if (processAllDocs) {
_asHtml = renderResult.item1;
Expand All @@ -71,4 +71,7 @@ class Documentation {
MarkdownDocument.withElementLinkResolver(_element, commentRefs);
return document.parseMarkdownText(text, processFullDocs);
}

DocumentationRenderer get _renderer =>
_element.packageGraph.rendererFactory.documentationRenderer;
}
5 changes: 4 additions & 1 deletion lib/src/model/enum.dart
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class EnumField extends Field {
: super(element, library, packageGraph, getter, null);

@override
String get constantValueBase => EnumFieldRendererHtml().renderValue(this);
String get constantValueBase => _fieldRenderer.renderValue(this);

@override
List<ModelElement> get documentationFrom {
Expand Down Expand Up @@ -104,4 +104,7 @@ class EnumField extends Field {

@override
Inheritable get overriddenElement => null;

EnumFieldRenderer get _fieldRenderer =>
packageGraph.rendererFactory.enumFieldRenderer;
}
34 changes: 20 additions & 14 deletions lib/src/model/model_element.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ import 'package:dartdoc/src/element_type.dart';
import 'package:dartdoc/src/logging.dart';
import 'package:dartdoc/src/model/model.dart';
import 'package:dartdoc/src/model_utils.dart' as utils;
import 'package:dartdoc/src/render/parameter_renderer.dart';
import 'package:dartdoc/src/render/model_element_renderer.dart';
import 'package:dartdoc/src/render/parameter_renderer.dart';
import 'package:dartdoc/src/source_linker.dart';
import 'package:dartdoc/src/tuple.dart';
import 'package:dartdoc/src/utils.dart';
Expand Down Expand Up @@ -784,7 +784,7 @@ abstract class ModelElement extends Canonicalization
/// does not exist.
String get extendedDocLink {
if (hasExtendedDocumentation) {
return ModelElementRendererHtml().renderExtendedDocLink(this);
return _modelElementRenderer.renderExtendedDocLink(this);
}
return '';
}
Expand Down Expand Up @@ -916,18 +916,25 @@ abstract class ModelElement extends Canonicalization
return _linkedName;
}

String get linkedParams =>
ParameterRendererHtml().renderLinkedParams(parameters);
ModelElementRenderer get _modelElementRenderer =>
packageGraph.rendererFactory.modelElementRenderer;

ParameterRenderer get _parameterRenderer =>
packageGraph.rendererFactory.parameterRenderer;

ParameterRenderer get _parameterRendererDetailed =>
packageGraph.rendererFactory.parameterRendererDetailed;

String get linkedParams => _parameterRenderer.renderLinkedParams(parameters);

String get linkedParamsLines =>
ParameterRendererHtmlList().renderLinkedParams(parameters).trim();
_parameterRendererDetailed.renderLinkedParams(parameters).trim();

String get linkedParamsNoMetadata =>
ParameterRendererHtml(showMetadata: false).renderLinkedParams(parameters);
_parameterRenderer.renderLinkedParams(parameters, showMetadata: false);

String get linkedParamsNoMetadataOrNames =>
ParameterRendererHtml(showMetadata: false, showNames: false)
.renderLinkedParams(parameters);
String get linkedParamsNoMetadataOrNames => _parameterRenderer
.renderLinkedParams(parameters, showMetadata: false, showNames: false);

ElementType get modelType {
if (_modelType == null) {
Expand Down Expand Up @@ -1120,7 +1127,7 @@ abstract class ModelElement extends Canonicalization
return htmlEscape.convert(name);
}

return ModelElementRendererHtml().renderLinkedName(this);
return _modelElementRenderer.renderLinkedName(this);
}

/// Replace &#123;@example ...&#125; in API comments with the content of named file.
Expand Down Expand Up @@ -1351,8 +1358,7 @@ abstract class ModelElement extends Canonicalization
final String youTubeId = url.group(url.groupCount);
final String aspectRatio = (height / width * 100).toStringAsFixed(2);

return ModelElementRendererHtml()
.renderYoutubeUrl(youTubeId, aspectRatio);
return _modelElementRenderer.renderYoutubeUrl(youTubeId, aspectRatio);
});
}

Expand Down Expand Up @@ -1483,8 +1489,8 @@ abstract class ModelElement extends Canonicalization
'parameter)');
}

return ModelElementRendererHtml()
.renderAnimation(uniqueId, width, height, movieUrl, overlayId);
return _modelElementRenderer.renderAnimation(
uniqueId, width, height, movieUrl, overlayId);
});
}

Expand Down
6 changes: 5 additions & 1 deletion lib/src/model/package_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import 'package:dartdoc/src/io_utils.dart';
import 'package:dartdoc/src/logging.dart';
import 'package:dartdoc/src/model/model.dart';
import 'package:dartdoc/src/package_meta.dart' show PackageMeta;
import 'package:dartdoc/src/render/renderer_factory.dart';
import 'package:dartdoc/src/special_elements.dart';
import 'package:package_config/discovery.dart' as package_config;
import 'package:path/path.dart' as path;
Expand All @@ -42,13 +43,16 @@ class PackageBuilder {
if (config.topLevelPackageMeta.needsPubGet) {
config.topLevelPackageMeta.runPubGet();
}
// TODO(jdkoren): change factory for other formats based on config options
RendererFactory rendererFactory = HtmlRenderFactory();

PackageGraph newGraph = PackageGraph.UninitializedPackageGraph(
config,
driver,
await driver.currentSession.typeSystem,
sdk,
hasEmbedderSdkFiles);
hasEmbedderSdkFiles,
rendererFactory);
await getLibraries(newGraph);
await newGraph.initializePackageGraph();
return newGraph;
Expand Down
8 changes: 6 additions & 2 deletions lib/src/model/package_graph.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,14 @@ import 'package:dartdoc/src/dartdoc_options.dart';
import 'package:dartdoc/src/model/model.dart';
import 'package:dartdoc/src/model_utils.dart' as utils;
import 'package:dartdoc/src/package_meta.dart' show PackageMeta;
import 'package:dartdoc/src/render/renderer_factory.dart';
import 'package:dartdoc/src/special_elements.dart';
import 'package:dartdoc/src/tuple.dart';
import 'package:dartdoc/src/warnings.dart';

class PackageGraph {
PackageGraph.UninitializedPackageGraph(
this.config, this.driver, this.typeSystem, this.sdk, this.hasEmbedderSdk)
PackageGraph.UninitializedPackageGraph(this.config, this.driver,
this.typeSystem, this.sdk, this.hasEmbedderSdk, this.rendererFactory)
: packageMeta = config.topLevelPackageMeta,
session = driver.currentSession {
_packageWarningCounter = PackageWarningCounter(this);
Expand Down Expand Up @@ -207,6 +208,9 @@ class PackageGraph {
/// Dartdoc's configuration flags.
final DartdocOptionContext config;

/// Factory for renderers
final RendererFactory rendererFactory;

Package _defaultPackage;

Package get defaultPackage {
Expand Down
13 changes: 7 additions & 6 deletions lib/src/model/type_parameter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -76,16 +76,17 @@ abstract class TypeParameters implements ModelElement {

bool get hasGenericParameters => typeParameters.isNotEmpty;

String get genericParameters {
return TypeParametersRendererHtml().renderGenericParameters(this);
}
String get genericParameters =>
_typeParametersRenderer.renderGenericParameters(this);

String get linkedGenericParameters {
return TypeParametersRendererHtml().renderLinkedGenericParameters(this);
}
String get linkedGenericParameters =>
_typeParametersRenderer.renderLinkedGenericParameters(this);

@override
DefinedElementType get modelType;

List<TypeParameter> get typeParameters;

TypeParametersRenderer get _typeParametersRenderer =>
packageGraph.rendererFactory.typeParametersRenderer;
}
5 changes: 3 additions & 2 deletions lib/src/model/typedef.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,7 @@ class Typedef extends ModelElement
String get nameWithGenerics => '$name${super.genericParameters}';

@override
String get genericParameters =>
TypedefRendererHtml().renderGenericParameters(this);
String get genericParameters => _renderer.renderGenericParameters(this);

List<TypeParameterElement> get genericTypeParameters {
if (element is GenericTypeAliasElement) {
Expand Down Expand Up @@ -59,4 +58,6 @@ class Typedef extends ModelElement
List<TypeParameter> get typeParameters => _typedef.typeParameters.map((f) {
return ModelElement.from(f, library, packageGraph) as TypeParameter;
}).toList();

TypedefRenderer get _renderer => packageGraph.rendererFactory.typedefRenderer;
}
4 changes: 2 additions & 2 deletions lib/src/render/element_type_renderer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,8 @@ class CallableElementTypeRendererHtml
StringBuffer buf = StringBuffer();
buf.write(elementType.nameWithGenerics);
buf.write('(');
buf.write(ParameterRendererHtml(showNames: false)
.renderLinkedParams(elementType.element.parameters)
buf.write(ParameterRendererHtml()
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This instantiation is inside another renderer for HTML, and there isn't a way to get to the renderer factory from here. I think this is probably ok, but alternatively we could make CallableElementTypeRendererHtml take a ParameterRenderer as a constructor arg.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I think HTML renderers calling/constructing each other is fine for now and could even be fine long term.

.renderLinkedParams(elementType.element.parameters, showNames: false)
.trim());
buf.write(') → ');
buf.write(elementType.returnType.linkedName);
Expand Down
Loading