Skip to content

Migrate most of lib/src/generators to nnbd #2837

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
Oct 12, 2021
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
4 changes: 2 additions & 2 deletions lib/options.dart
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,13 @@ class DartdocGeneratorOptionContext extends DartdocOptionContext {

bool get prettyIndexJson => optionSet['prettyIndexJson'].valueAt(context);

String get favicon => optionSet['favicon'].valueAt(context);
String? get favicon => optionSet['favicon'].valueAt(context);

String get relCanonicalPrefix =>
optionSet['relCanonicalPrefix'].valueAt(context);

/// The 'templatesDir' Dartdoc option if one was specified; otherwise `null`.
String get templatesDir => optionSet['templatesDir'].valueAt(context);
String? get templatesDir => optionSet['templatesDir'].valueAt(context);

// TODO(jdkoren): duplicated temporarily so that GeneratorContext is enough for configuration.
@override
Expand Down
64 changes: 23 additions & 41 deletions lib/src/generator/dartdoc_generator_backend.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart=2.9

import 'package:analyzer/file_system/file_system.dart';
import 'package:dartdoc/options.dart';
import 'package:dartdoc/src/generator/generator.dart';
Expand All @@ -19,12 +17,12 @@ import 'package:path/path.dart' as path show Context;
/// Configuration options for the Dartdoc's default backend.
class DartdocGeneratorBackendOptions implements TemplateOptions {
@override
final String relCanonicalPrefix;
final String? relCanonicalPrefix;

@override
final String toolVersion;

final String favicon;
final String? favicon;

final bool prettyIndexJson;

Expand All @@ -50,16 +48,6 @@ class DartdocGeneratorBackendOptions implements TemplateOptions {
customHeaderContent = context.header,
customFooterContent = context.footer,
customInnerFooterText = context.footerText;

DartdocGeneratorBackendOptions._defaults()
: relCanonicalPrefix = null,
toolVersion = null,
favicon = null,
prettyIndexJson = false,
useBaseHref = false,
customHeaderContent = '',
customFooterContent = '',
customInnerFooterText = '';
}

class SidebarGenerator<T extends TemplateData> {
Expand All @@ -86,10 +74,8 @@ abstract class DartdocGeneratorBackend implements GeneratorBackend {
final ResourceProvider resourceProvider;
final path.Context _pathContext;

DartdocGeneratorBackend(DartdocGeneratorBackendOptions options,
this.templates, this.resourceProvider)
: options = options ?? DartdocGeneratorBackendOptions._defaults(),
sidebarForLibrary = SidebarGenerator(templates.renderSidebarForLibrary),
DartdocGeneratorBackend(this.options, this.templates, this.resourceProvider)
: sidebarForLibrary = SidebarGenerator(templates.renderSidebarForLibrary),
sidebarForContainer =
SidebarGenerator(templates.renderSidebarForContainer),
_pathContext = resourceProvider.pathContext;
Expand All @@ -100,8 +86,9 @@ abstract class DartdocGeneratorBackend implements GeneratorBackend {
if (!options.useBaseHref) {
content = content.replaceAll(htmlBasePlaceholder, data.htmlBase);
}
var element = data.self;
writer.write(filename, content,
element: data.self is Warnable ? data.self : null);
element: element is Warnable ? element : null);
}

@override
Expand Down Expand Up @@ -131,23 +118,23 @@ abstract class DartdocGeneratorBackend implements GeneratorBackend {

@override
void generatePackage(FileWriter writer, PackageGraph graph, Package package) {
TemplateData data = PackageTemplateData(options, graph, package);
var data = PackageTemplateData(options, graph, package);
var content = templates.renderIndex(data);
write(writer, package.filePath, data, content);
}

@override
void generateCategory(
FileWriter writer, PackageGraph packageGraph, Category category) {
TemplateData data = CategoryTemplateData(options, packageGraph, category);
var data = CategoryTemplateData(options, packageGraph, category);
var content = templates.renderCategory(data);
write(writer, category.filePath, data, content);
}

@override
void generateLibrary(
FileWriter writer, PackageGraph packageGraph, Library lib) {
TemplateData data = LibraryTemplateData(
var data = LibraryTemplateData(
options, packageGraph, lib, sidebarForLibrary.getRenderFor);
var content = templates.renderLibrary(data);
write(writer, lib.filePath, data, content);
Expand All @@ -156,7 +143,7 @@ abstract class DartdocGeneratorBackend implements GeneratorBackend {
@override
void generateClass(
FileWriter writer, PackageGraph packageGraph, Library lib, Class clazz) {
TemplateData data = ClassTemplateData(options, packageGraph, lib, clazz,
var data = ClassTemplateData(options, packageGraph, lib, clazz,
sidebarForLibrary.getRenderFor, sidebarForContainer.getRenderFor);
var content = templates.renderClass(data);
write(writer, clazz.filePath, data, content);
Expand All @@ -165,21 +152,16 @@ abstract class DartdocGeneratorBackend implements GeneratorBackend {
@override
void generateExtension(FileWriter writer, PackageGraph packageGraph,
Library lib, Extension extension) {
TemplateData data = ExtensionTemplateData(
options,
packageGraph,
lib,
extension,
sidebarForLibrary.getRenderFor,
sidebarForContainer.getRenderFor);
var data = ExtensionTemplateData(options, packageGraph, lib, extension,
sidebarForLibrary.getRenderFor, sidebarForContainer.getRenderFor);
var content = templates.renderExtension(data);
write(writer, extension.filePath, data, content);
}

@override
void generateMixin(
FileWriter writer, PackageGraph packageGraph, Library lib, Mixin mixin) {
TemplateData data = MixinTemplateData(options, packageGraph, lib, mixin,
var data = MixinTemplateData(options, packageGraph, lib, mixin,
sidebarForLibrary.getRenderFor, sidebarForContainer.getRenderFor);
var content = templates.renderMixin(data);
write(writer, mixin.filePath, data, content);
Expand All @@ -188,16 +170,16 @@ abstract class DartdocGeneratorBackend implements GeneratorBackend {
@override
void generateConstructor(FileWriter writer, PackageGraph packageGraph,
Library lib, Class clazz, Constructor constructor) {
TemplateData data = ConstructorTemplateData(options, packageGraph, lib,
clazz, constructor, sidebarForContainer.getRenderFor);
var data = ConstructorTemplateData(options, packageGraph, lib, clazz,
constructor, sidebarForContainer.getRenderFor);
var content = templates.renderConstructor(data);
write(writer, constructor.filePath, data, content);
}

@override
void generateEnum(
FileWriter writer, PackageGraph packageGraph, Library lib, Enum eNum) {
TemplateData data = EnumTemplateData(options, packageGraph, lib, eNum,
var data = EnumTemplateData(options, packageGraph, lib, eNum,
sidebarForLibrary.getRenderFor, sidebarForContainer.getRenderFor);
var content = templates.renderEnum(data);
write(writer, eNum.filePath, data, content);
Expand All @@ -206,7 +188,7 @@ abstract class DartdocGeneratorBackend implements GeneratorBackend {
@override
void generateFunction(FileWriter writer, PackageGraph packageGraph,
Library lib, ModelFunction function) {
TemplateData data = FunctionTemplateData(
var data = FunctionTemplateData(
options, packageGraph, lib, function, sidebarForLibrary.getRenderFor);
var content = templates.renderFunction(data);
write(writer, function.filePath, data, content);
Expand All @@ -215,8 +197,8 @@ abstract class DartdocGeneratorBackend implements GeneratorBackend {
@override
void generateMethod(FileWriter writer, PackageGraph packageGraph, Library lib,
Container clazz, Method method) {
TemplateData data = MethodTemplateData(options, packageGraph, lib, clazz,
method, sidebarForContainer.getRenderFor);
var data = MethodTemplateData(options, packageGraph, lib, clazz, method,
sidebarForContainer.getRenderFor);
var content = templates.renderMethod(data);
write(writer, method.filePath, data, content);
}
Expand All @@ -229,16 +211,16 @@ abstract class DartdocGeneratorBackend implements GeneratorBackend {
@override
void generateProperty(FileWriter writer, PackageGraph packageGraph,
Library lib, Container clazz, Field property) {
TemplateData data = PropertyTemplateData(options, packageGraph, lib, clazz,
property, sidebarForContainer.getRenderFor);
var data = PropertyTemplateData(options, packageGraph, lib, clazz, property,
sidebarForContainer.getRenderFor);
var content = templates.renderProperty(data);
write(writer, property.filePath, data, content);
}

@override
void generateTopLevelProperty(FileWriter writer, PackageGraph packageGraph,
Library lib, TopLevelVariable property) {
TemplateData data = TopLevelPropertyTemplateData(
var data = TopLevelPropertyTemplateData(
options, packageGraph, lib, property, sidebarForLibrary.getRenderFor);
var content = templates.renderTopLevelProperty(data);
write(writer, property.filePath, data, content);
Expand All @@ -252,7 +234,7 @@ abstract class DartdocGeneratorBackend implements GeneratorBackend {
@override
void generateTypeDef(FileWriter writer, PackageGraph packageGraph,
Library lib, Typedef typeDef) {
TemplateData data = TypedefTemplateData(
var data = TypedefTemplateData(
options, packageGraph, lib, typeDef, sidebarForLibrary.getRenderFor);
var content = templates.renderTypedef(data);
write(writer, typeDef.filePath, data, content);
Expand Down
4 changes: 1 addition & 3 deletions lib/src/generator/empty_generator.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
// @dart=2.9

library dartdoc.empty_generator;

import 'package:dartdoc/src/dartdoc_options.dart';
Expand All @@ -26,7 +24,7 @@ class EmptyGenerator extends Generator {
.forEach((m) => logProgress(m.documentationAsHtml));
}
}
return null;
return Future.value(null);
}
}

Expand Down
2 changes: 1 addition & 1 deletion lib/src/generator/generator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ abstract class FileWriter {
/// Writes [content] to a file at [filePath].
///
/// If a file is to be overwritten, a warning will be reported on [element].
void write(String filePath, String content, {Warnable element});
void write(String filePath, String content, {Warnable? element});

/// Writes [content] to a file at [filePath].
///
Expand Down
10 changes: 4 additions & 6 deletions lib/src/generator/generator_frontend.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart=2.9

import 'package:dartdoc/src/generator/generator.dart';
import 'package:dartdoc/src/logging.dart';
import 'package:dartdoc/src/model/model.dart';
Expand All @@ -18,9 +16,11 @@ class GeneratorFrontEnd implements Generator {
GeneratorFrontEnd(this._generatorBackend);

@override
Future<void> generate(PackageGraph packageGraph, FileWriter writer) async {
Future<void> generate(PackageGraph? packageGraph, FileWriter writer) async {
var indexElements = <Indexable>[];
_generateDocs(packageGraph, writer, indexElements);
if (packageGraph != null) {
_generateDocs(packageGraph, writer, indexElements);
}
await _generatorBackend.generateAdditionalFiles(writer);

var categories = indexElements
Expand All @@ -35,8 +35,6 @@ class GeneratorFrontEnd implements Generator {
/// elements.
void _generateDocs(PackageGraph packageGraph, FileWriter writer,
List<Indexable> indexAccumulator) {
if (packageGraph == null) return;

_generatorBackend.generatePackage(
writer, packageGraph, packageGraph.defaultPackage);

Expand Down
10 changes: 5 additions & 5 deletions lib/src/generator/generator_utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart=2.9

import 'dart:convert';

import 'package:collection/collection.dart';
Expand Down Expand Up @@ -79,10 +77,12 @@ String generateSearchIndexJson(
return encoder.convert(indexItems);
}

int _sortElementRepresentations(Map<String, Object> a, Map<String, Object> b) {
final value = compareNatural(a['qualifiedName'], b['qualifiedName']);
int _sortElementRepresentations(
Map<String, Object?> a, Map<String, Object?> b) {
final value = compareNatural(
a['qualifiedName'] as String, b['qualifiedName'] as String);
if (value == 0) {
return compareNatural(a['type'], b['type']);
return compareNatural(a['type'] as String, b['type'] as String);
}
return value;
}
9 changes: 4 additions & 5 deletions lib/src/generator/html_generator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart=2.9

library dartdoc.html_generator;

import 'package:analyzer/file_system/file_system.dart';
Expand Down Expand Up @@ -41,17 +39,18 @@ class HtmlGeneratorBackend extends DartdocGeneratorBackend {
void generatePackage(FileWriter writer, PackageGraph graph, Package package) {
super.generatePackage(writer, graph, package);
// We have to construct the data again. This only happens once per package.
TemplateData data = PackageTemplateData(options, graph, package);
var data = PackageTemplateData(options, graph, package);
var content = templates.renderError(data);
write(writer, '__404error.html', data, content);
}

@override
Future<void> generateAdditionalFiles(FileWriter writer) async {
await _copyResources(writer);
if (options.favicon != null) {
var favicon = options.favicon;
if (favicon != null) {
// Allow overwrite of favicon.
var bytes = resourceProvider.getFile(options.favicon).readAsBytesSync();
var bytes = resourceProvider.getFile(favicon).readAsBytesSync();
writer.writeBytes(
resourceProvider.pathContext.join('static-assets', 'favicon.png'),
bytes,
Expand Down
4 changes: 1 addition & 3 deletions lib/src/generator/markdown_generator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart=2.9

import 'package:analyzer/file_system/file_system.dart';
import 'package:dartdoc/options.dart';
import 'package:dartdoc/src/generator/dartdoc_generator_backend.dart';
Expand Down Expand Up @@ -36,7 +34,7 @@ class MarkdownGeneratorBackend extends DartdocGeneratorBackend {
void generatePackage(FileWriter writer, PackageGraph graph, Package package) {
super.generatePackage(writer, graph, package);
// We have to construct the data again. This only happens once per package.
TemplateData data = PackageTemplateData(options, graph, package);
PackageTemplateData data = PackageTemplateData(options, graph, package);
var content = templates.renderError(data);
write(writer, '__404error.md', data, content);
}
Expand Down
4 changes: 2 additions & 2 deletions lib/src/generator/template_data.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ typedef ContainerSidebar = String Function(
typedef LibrarySidebar = String Function(Library, TemplateDataWithLibrary);

abstract class TemplateOptions {
String get relCanonicalPrefix;
String? get relCanonicalPrefix;
String get toolVersion;
bool get useBaseHref;
String get customHeaderContent;
Expand Down Expand Up @@ -46,7 +46,7 @@ abstract class TemplateData<T extends Documentable> {
String get htmlBase;
T get self;
String get version => htmlOptions.toolVersion;
String get relCanonicalPrefix => htmlOptions.relCanonicalPrefix;
String? get relCanonicalPrefix => htmlOptions.relCanonicalPrefix;
bool get useBaseHref => htmlOptions.useBaseHref;

String get bareHref {
Expand Down
5 changes: 1 addition & 4 deletions lib/src/generator/templates.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart=2.9

@Renderer(#renderCategory, Context<CategoryTemplateData>(), 'category',
visibleTypes: _visibleTypes)
@Renderer(#renderClass, Context<ClassTemplateData>(), 'class')
Expand Down Expand Up @@ -46,7 +44,6 @@ import 'package:dartdoc/src/model/language_feature.dart';
import 'package:dartdoc/src/model/model.dart';
import 'package:dartdoc/src/mustachio/annotations.dart';
import 'package:dartdoc/src/mustachio/renderer_base.dart';
import 'package:meta/meta.dart';

const _visibleTypes = {
Annotation,
Expand Down Expand Up @@ -348,7 +345,7 @@ class RuntimeTemplates implements Templates {

/// Creates a [Templates] from a custom set of template files, found in [dir].
static Future<Templates> _create(Folder dir, String format,
{@required ResourceProvider resourceProvider}) async {
{required ResourceProvider resourceProvider}) async {
Future<Template> loadTemplate(String templatePath) async {
var templateFile = dir.getChildAssumingFile('$templatePath.$format');
if (!templateFile.exists) {
Expand Down
Loading