From dbe0aa7a42f7b54f9d21a46ee638e60920a48fc1 Mon Sep 17 00:00:00 2001 From: Sam Rawlins Date: Tue, 6 Apr 2021 14:28:57 -0700 Subject: [PATCH 01/10] WIP: Mustachio AOT compiler --- build.yaml | 6 +- .../generator/dartdoc_generator_backend.dart | 2 +- lib/src/generator/html_generator.dart | 2 +- lib/src/generator/markdown_generator.dart | 2 +- .../templates.aot_renderers_for_html.dart | 9295 +++++++++++++++++ .../templates.aot_renderers_for_md.dart | 4305 ++++++++ lib/src/generator/templates.dart | 37 +- ....dart => templates.runtime_renderers.dart} | 0 lib/src/mustachio/annotations.dart | 92 +- lib/src/mustachio/parser.dart | 15 +- test/mustachio/aot_compiler_builder_test.dart | 131 + test/mustachio/aot_compiler_render_test.dart | 24 + test/mustachio/builder_test_base.dart | 46 + .../mustachio/foo.aot_renderers_for_html.dart | 56 + test/mustachio/foo.aot_renderers_for_md.dart | 0 test/mustachio/foo.dart | 6 +- ...derers.dart => foo.runtime_renderers.dart} | 0 ...art => runtime_renderer_builder_test.dart} | 53 +- ...dart => runtime_renderer_render_test.dart} | 2 +- test/mustachio/templates/_foo_header.html | 3 + test/mustachio/templates/bar.html | 0 test/mustachio/templates/baz.html | 0 test/mustachio/templates/foo.html | 7 + tool/mustachio/builder.dart | 69 +- tool/mustachio/codegen_aot_compiler.dart | 415 + tool/mustachio/codegen_runtime_renderer.dart | 64 +- tool/mustachio/utilities.dart | 31 + 27 files changed, 14536 insertions(+), 127 deletions(-) create mode 100644 lib/src/generator/templates.aot_renderers_for_html.dart create mode 100644 lib/src/generator/templates.aot_renderers_for_md.dart rename lib/src/generator/{templates.renderers.dart => templates.runtime_renderers.dart} (100%) create mode 100644 test/mustachio/aot_compiler_builder_test.dart create mode 100644 test/mustachio/aot_compiler_render_test.dart create mode 100644 test/mustachio/builder_test_base.dart create mode 100644 test/mustachio/foo.aot_renderers_for_html.dart create mode 100644 test/mustachio/foo.aot_renderers_for_md.dart rename test/mustachio/{foo.renderers.dart => foo.runtime_renderers.dart} (100%) rename test/mustachio/{builder_test.dart => runtime_renderer_builder_test.dart} (90%) rename test/mustachio/{renderer_test.dart => runtime_renderer_render_test.dart} (99%) create mode 100644 test/mustachio/templates/_foo_header.html create mode 100644 test/mustachio/templates/bar.html create mode 100644 test/mustachio/templates/baz.html create mode 100644 test/mustachio/templates/foo.html create mode 100644 tool/mustachio/codegen_aot_compiler.dart create mode 100644 tool/mustachio/utilities.dart diff --git a/build.yaml b/build.yaml index cfff0d5947..2771d4c76e 100644 --- a/build.yaml +++ b/build.yaml @@ -8,7 +8,11 @@ builders: mustachio_builder: import: "tool/mustachio/builder.dart" builder_factories: ["mustachioBuilder"] - build_extensions: {".dart": [".renderers.dart"]} + build_extensions: + ".dart": + - ".aot_renderers_for_html.dart" + - ".aot_renderers_for_md.dart" + - ".runtime_renderers.dart" build_to: "source" targets: diff --git a/lib/src/generator/dartdoc_generator_backend.dart b/lib/src/generator/dartdoc_generator_backend.dart index 315cab16f6..5f7d8581fa 100644 --- a/lib/src/generator/dartdoc_generator_backend.dart +++ b/lib/src/generator/dartdoc_generator_backend.dart @@ -8,7 +8,7 @@ import 'package:dartdoc/src/generator/generator_frontend.dart'; import 'package:dartdoc/src/generator/generator_utils.dart' as generator_util; import 'package:dartdoc/src/generator/template_data.dart'; import 'package:dartdoc/src/generator/templates.dart'; -import 'package:dartdoc/src/generator/templates.renderers.dart'; +import 'package:dartdoc/src/generator/templates.runtime_renderers.dart'; import 'package:dartdoc/src/mustachio/renderer_base.dart'; import 'package:dartdoc/src/warnings.dart'; import 'package:path/path.dart' as path show Context; diff --git a/lib/src/generator/html_generator.dart b/lib/src/generator/html_generator.dart index a405d8d252..4afd0205e2 100644 --- a/lib/src/generator/html_generator.dart +++ b/lib/src/generator/html_generator.dart @@ -12,7 +12,7 @@ import 'package:dartdoc/src/generator/html_resources.g.dart' as resources; import 'package:dartdoc/src/generator/resource_loader.dart'; import 'package:dartdoc/src/generator/template_data.dart'; import 'package:dartdoc/src/generator/templates.dart'; -import 'package:dartdoc/src/generator/templates.renderers.dart'; +import 'package:dartdoc/src/generator/templates.runtime_renderers.dart'; import 'package:dartdoc/src/model/package.dart'; import 'package:dartdoc/src/model/package_graph.dart'; import 'package:path/path.dart' as path show Context; diff --git a/lib/src/generator/markdown_generator.dart b/lib/src/generator/markdown_generator.dart index 522e0dfaf9..5b8c96e795 100644 --- a/lib/src/generator/markdown_generator.dart +++ b/lib/src/generator/markdown_generator.dart @@ -8,7 +8,7 @@ import 'package:dartdoc/src/generator/generator.dart'; import 'package:dartdoc/src/generator/generator_frontend.dart'; import 'package:dartdoc/src/generator/template_data.dart'; import 'package:dartdoc/src/generator/templates.dart'; -import 'package:dartdoc/src/generator/templates.renderers.dart'; +import 'package:dartdoc/src/generator/templates.runtime_renderers.dart'; import 'package:dartdoc/src/model/package.dart'; import 'package:dartdoc/src/model/package_graph.dart'; import 'package:path/path.dart' as path show Context; diff --git a/lib/src/generator/templates.aot_renderers_for_html.dart b/lib/src/generator/templates.aot_renderers_for_html.dart new file mode 100644 index 0000000000..189c82f1d8 --- /dev/null +++ b/lib/src/generator/templates.aot_renderers_for_html.dart @@ -0,0 +1,9295 @@ +// GENERATED CODE. DO NOT EDIT. +// +// To change the contents of this library, make changes to the builder source +// files in the tool/mustachio/ directory. + +// Sometimes we enter a new section which triggers creating a new variable, but +// the variable is not used; generally when the section is checking if a +// non-bool, non-Iterable field is non-null. +// ignore_for_file: unused_local_variable + +// It is hard to track exact imports without using package:code_builder. +// ignore_for_file: unused_import + +import 'dart:convert' show htmlEscape; + +import 'package:dartdoc/dartdoc.dart'; +import 'package:dartdoc/src/generator/template_data.dart'; +import 'templates.dart'; + +String renderCategory(CategoryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderCategory_partial_head_0(context0)); + buffer.write(''' + +
'''); + if (context0.self != null) { + var context1 = context0.self; + buffer.write(''' +

'''); + buffer.write(htmlEscape.convert(context1.name.toString())); + buffer.write(''' '''); + buffer.write(htmlEscape.convert(context1.kind.toString())); + buffer.write('''

+ '''); + buffer.write(_renderCategory_partial_documentation_1(context1, context0)); + buffer.writeln(); + if (context1.hasPublicLibraries == true) { + buffer.write(''' +
+

Libraries

+ +
'''); + for (var context2 in context1.publicLibrariesSorted) { + buffer.write('\n '); + buffer.write( + _renderCategory_partial_library_2(context2, context1, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context1.hasPublicClasses == true) { + buffer.write(''' +
+

Classes

+ +
'''); + for (var context3 in context1.publicClassesSorted) { + buffer.write('\n '); + buffer.write( + _renderCategory_partial_class_3(context3, context1, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context1.hasPublicMixins == true) { + buffer.write(''' +
+

Mixins

+ +
'''); + for (var context4 in context1.publicMixinsSorted) { + buffer.write('\n '); + buffer.write( + _renderCategory_partial_mixin_4(context4, context1, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context1.hasPublicConstants == true) { + buffer.write(''' +
+

Constants

+ +
'''); + for (var context5 in context1.publicConstantsSorted) { + buffer.write('\n '); + buffer.write( + _renderCategory_partial_constant_5(context5, context1, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context1.hasPublicProperties == true) { + buffer.write(''' +
+

Properties

+ +
'''); + for (var context6 in context1.publicPropertiesSorted) { + buffer.write('\n '); + buffer.write( + _renderCategory_partial_property_6(context6, context1, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context1.hasPublicFunctions == true) { + buffer.write(''' +
+

Functions

+ +
'''); + for (var context7 in context1.publicFunctionsSorted) { + buffer.write('\n '); + buffer.write( + _renderCategory_partial_callable_7(context7, context1, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context1.hasPublicEnums == true) { + buffer.write(''' +
+

Enums

+ +
'''); + for (var context8 in context1.publicEnumsSorted) { + buffer.write('\n '); + buffer.write( + _renderCategory_partial_class_3(context8, context1, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context1.hasPublicTypedefs == true) { + buffer.write(''' +
+

Typedefs

+ +
'''); + for (var context9 in context1.publicTypedefsSorted) { + buffer.write('\n '); + buffer.write( + _renderCategory_partial_typedef_8(context9, context1, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context1.hasPublicExceptions == true) { + buffer.write(''' +
+

Exceptions / Errors

+ +
'''); + for (var context10 in context1.publicExceptionsSorted) { + buffer.write('\n '); + buffer.write( + _renderCategory_partial_class_3(context10, context1, context0)); + } + buffer.write(''' +
+
'''); + } + } + buffer.write(''' + +
+ + + + + +'''); + buffer.write(_renderCategory_partial_footer_12(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderCategory_partial_head_0(CategoryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(''' + + + + + '''); + if (context0.includeVersion == true) { + buffer.write(''' + '''); + } + buffer.write(''' + + '''); + buffer.write(htmlEscape.convert(context0.title.toString())); + buffer.write(''''''); + if (context0.relCanonicalPrefix != null) { + var context1 = context0.relCanonicalPrefix; + buffer.write(''' + '''); + } + buffer.writeln(); + if (context0.useBaseHref == true) { + if (context0.htmlBase != null) { + var context2 = context0.htmlBase; + buffer.write(''' + + '''); + } + } + buffer.write('\n\n '); + buffer.write(''' + + + + + + + + '''); + buffer.write(context0.customHeader.toString()); + buffer.write(''' + + +'''); + buffer.write(''' + + +
+ +
+ + +
'''); + buffer.write(htmlEscape.convert(context0.self.name.toString())); + buffer.write('''
+ +
+ +
+'''); + return buffer.toString(); +} + +String _renderCategory_partial_documentation_1( + Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.write(''' +
+ '''); + buffer.write(context1.documentationAsHtml.toString()); + buffer.write(''' +
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderCategory_partial_library_2( + Library context2, Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context2.linkedName.toString()); + buffer.write(''' '''); + buffer.write(__renderCategory_partial_library_2_partial_categorization_0( + context2, context1, context0)); + buffer.write(''' +
+
'''); + if (context2.isDocumented == true) { + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + } + buffer.write(''' +
+'''); + return buffer.toString(); +} + +String __renderCategory_partial_library_2_partial_categorization_0( + Library context2, Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + for (var context3 in context2.displayedCategories) { + buffer.write('\n '); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderCategory_partial_class_3( + Class context2, Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context2.linkedName.toString()); + buffer.write(context2.linkedGenericParameters.toString()); + buffer.write(''' '''); + buffer.write(__renderCategory_partial_class_3_partial_categorization_0( + context2, context1, context0)); + buffer.write(''' +
+
+ '''); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write(''' +
+'''); + return buffer.toString(); +} + +String __renderCategory_partial_class_3_partial_categorization_0( + Class context2, Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + for (var context3 in context2.displayedCategories) { + buffer.write('\n '); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderCategory_partial_mixin_4( + Mixin context2, Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context2.linkedName.toString()); + buffer.write(context2.linkedGenericParameters.toString()); + buffer.write(''' '''); + buffer.write(__renderCategory_partial_mixin_4_partial_categorization_0( + context2, context1, context0)); + buffer.write(''' +
+
+ '''); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write(''' +
+'''); + return buffer.toString(); +} + +String __renderCategory_partial_mixin_4_partial_categorization_0( + Mixin context2, Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + for (var context3 in context2.displayedCategories) { + buffer.write('\n '); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderCategory_partial_constant_5(TopLevelVariable context2, + Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context2.linkedName.toString()); + buffer.write(''' + → const '''); + buffer.write(context2.modelType.linkedName.toString()); + buffer.write(''' + '''); + buffer.write(__renderCategory_partial_constant_5_partial_categorization_0( + context2, context1, context0)); + buffer.write(''' +
+
+ '''); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write('\n '); + buffer.write(__renderCategory_partial_constant_5_partial_features_1( + context2, context1, context0)); + buffer.write(''' +
+ '''); + buffer.write(context2.constantValueTruncated.toString()); + buffer.write(''' +
+
+'''); + return buffer.toString(); +} + +String __renderCategory_partial_constant_5_partial_categorization_0( + TopLevelVariable context2, + Category context1, + CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + for (var context3 in context2.displayedCategories) { + buffer.write('\n '); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderCategory_partial_constant_5_partial_features_1( + TopLevelVariable context2, + Category context1, + CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderCategory_partial_property_6(TopLevelVariable context2, + Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context2.linkedName.toString()); + buffer.write(''' + '''); + buffer.write(context2.arrow.toString()); + buffer.write(' '); + buffer.write(context2.modelType.linkedName.toString()); + buffer.write(''' '''); + buffer.write(__renderCategory_partial_property_6_partial_categorization_0( + context2, context1, context0)); + buffer.write(''' +
+ + '''); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write('\n '); + buffer.write(__renderCategory_partial_property_6_partial_features_1( + context2, context1, context0)); + buffer.write(''' + +'''); + return buffer.toString(); +} + +String __renderCategory_partial_property_6_partial_categorization_0( + TopLevelVariable context2, + Category context1, + CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + for (var context3 in context2.displayedCategories) { + buffer.write('\n '); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderCategory_partial_property_6_partial_features_1( + TopLevelVariable context2, + Category context1, + CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderCategory_partial_callable_7(ModelFunctionTyped context2, + Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context2.linkedName.toString()); + buffer.write(''''''); + buffer.write(context2.linkedGenericParameters.toString()); + buffer.write('''('''); + buffer.write(context2.linkedParamsNoMetadata.toString()); + buffer.write(''') + → '''); + buffer.write(context2.modelType.returnType.linkedName.toString()); + buffer.write(''' + + '''); + buffer.write(__renderCategory_partial_callable_7_partial_categorization_0( + context2, context1, context0)); + buffer.write(''' +
+ + '''); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write('\n '); + buffer.write(__renderCategory_partial_callable_7_partial_features_1( + context2, context1, context0)); + buffer.write(''' + +'''); + return buffer.toString(); +} + +String __renderCategory_partial_callable_7_partial_categorization_0( + ModelFunctionTyped context2, + Category context1, + CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + for (var context3 in context2.displayedCategories) { + buffer.write('\n '); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderCategory_partial_callable_7_partial_features_1( + ModelFunctionTyped context2, + Category context1, + CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderCategory_partial_typedef_8( + Typedef context2, Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context2.isCallable == true) { + if (context2.asCallable != null) { + var context3 = context2.asCallable; + buffer.write('\n '); + buffer.write(__renderCategory_partial_typedef_8_partial_callable_0( + context3, context2, context1, context0)); + } + } + if (context2.isCallable != true) { + buffer.write('\n '); + buffer.write(__renderCategory_partial_typedef_8_partial_type_1( + context2, context1, context0)); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderCategory_partial_typedef_8_partial_callable_0( + FunctionTypedef context3, + Typedef context2, + Category context1, + CategoryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context3.linkedName.toString()); + buffer.write(''''''); + buffer.write(context3.linkedGenericParameters.toString()); + buffer.write('''('''); + buffer.write(context3.linkedParamsNoMetadata.toString()); + buffer.write(''') + → '''); + buffer.write(context3.modelType.returnType.linkedName.toString()); + buffer.write(''' + + '''); + buffer.write( + ___renderCategory_partial_typedef_8_partial_callable_0_partial_categorization_0( + context3, context2, context1, context0)); + buffer.write(''' +
+ + '''); + buffer.write(context3.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context3.extendedDocLink.toString()); + buffer.write('\n '); + buffer.write( + ___renderCategory_partial_typedef_8_partial_callable_0_partial_features_1( + context3, context2, context1, context0)); + buffer.write(''' + +'''); + return buffer.toString(); +} + +String + ___renderCategory_partial_typedef_8_partial_callable_0_partial_categorization_0( + FunctionTypedef context3, + Typedef context2, + Category context1, + CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasCategoryNames == true) { + for (var context4 in context3.displayedCategories) { + buffer.write('\n '); + buffer.write(context4.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String + ___renderCategory_partial_typedef_8_partial_callable_0_partial_features_1( + FunctionTypedef context3, + Typedef context2, + Category context1, + CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context3.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderCategory_partial_typedef_8_partial_type_1( + Typedef context2, Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context2.linkedName.toString()); + buffer.write(''''''); + buffer.write(context2.linkedGenericParameters.toString()); + buffer.write(''' + = '''); + buffer.write(context2.modelType.linkedName.toString()); + buffer.write(''' + + '''); + buffer.write( + ___renderCategory_partial_typedef_8_partial_type_1_partial_categorization_0( + context2, context1, context0)); + buffer.write(''' +
+ + '''); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write('\n '); + buffer.write( + ___renderCategory_partial_typedef_8_partial_type_1_partial_features_1( + context2, context1, context0)); + buffer.write(''' + +'''); + return buffer.toString(); +} + +String + ___renderCategory_partial_typedef_8_partial_type_1_partial_categorization_0( + Typedef context2, Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + for (var context3 in context2.displayedCategories) { + buffer.write('\n '); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String ___renderCategory_partial_typedef_8_partial_type_1_partial_features_1( + Typedef context2, Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderCategory_partial_search_sidebar_9(CategoryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + + +'''); + return buffer.toString(); +} + +String _renderCategory_partial_packages_10(CategoryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
    '''); + for (var context1 in context0.localPackages) { + if (context1.isFirstPackage == true) { + if (context1.hasDocumentedCategories == true) { + buffer.write(''' +
  1. Topics
  2. '''); + for (var context2 in context1.documentedCategoriesSorted) { + buffer.write(''' +
  3. '''); + buffer.write(context2.linkedName.toString()); + buffer.write('''
  4. '''); + } + } + buffer.write(''' +
  5. Libraries
  6. '''); + } + if (context1.isFirstPackage != true) { + buffer.write(''' +
  7. '''); + buffer.write(htmlEscape.convert(context1.name.toString())); + buffer.write('''
  8. '''); + } + if (context1.defaultCategory != null) { + var context3 = context1.defaultCategory; + for (var context4 in context3.publicLibrariesSorted) { + buffer.write(''' +
  9. '''); + buffer.write(context4.linkedName.toString()); + buffer.write('''
  10. '''); + } + } + for (var context5 in context1.categoriesWithPublicLibraries) { + buffer.write(''' +
  11. '''); + buffer.write(htmlEscape.convert(context5.name.toString())); + buffer.write('''
  12. '''); + for (var context6 in context5.publicLibrariesSorted) { + buffer.write(''' +
  13. '''); + buffer.write(context6.linkedName.toString()); + buffer.write('''
  14. '''); + } + } + } + buffer.write(''' +
+'''); + return buffer.toString(); +} + +String _renderCategory_partial_sidebar_for_category_11( + CategoryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
    '''); + if (context0.self != null) { + var context1 = context0.self; + if (context1.hasPublicLibraries == true) { + buffer.write(''' +
  1. Libraries
  2. '''); + if (context0.self != null) { + var context2 = context0.self; + for (var context3 in context2.publicLibrariesSorted) { + buffer.write(''' +
  3. '''); + buffer.write(context3.linkedName.toString()); + buffer.write('''
  4. '''); + } + } + } + } + buffer.writeln(); + if (context0.self != null) { + var context4 = context0.self; + if (context4.hasPublicMixins == true) { + buffer.write(''' +
  5. Mixins
  6. '''); + if (context0.self != null) { + var context5 = context0.self; + for (var context6 in context5.publicMixinsSorted) { + buffer.write(''' +
  7. '''); + buffer.write(context6.linkedName.toString()); + buffer.write('''
  8. '''); + } + } + } + } + buffer.writeln(); + if (context0.self != null) { + var context7 = context0.self; + if (context7.hasPublicClasses == true) { + buffer.write(''' +
  9. Classes
  10. '''); + if (context0.self != null) { + var context8 = context0.self; + for (var context9 in context8.publicClassesSorted) { + buffer.write(''' +
  11. '''); + buffer.write(context9.linkedName.toString()); + buffer.write('''
  12. '''); + } + } + } + } + buffer.writeln(); + if (context0.self != null) { + var context10 = context0.self; + if (context10.hasPublicConstants == true) { + buffer.write(''' +
  13. Constants
  14. '''); + if (context0.self != null) { + var context11 = context0.self; + for (var context12 in context11.publicConstantsSorted) { + buffer.write(''' +
  15. '''); + buffer.write(context12.linkedName.toString()); + buffer.write('''
  16. '''); + } + } + } + } + buffer.writeln(); + if (context0.self != null) { + var context13 = context0.self; + if (context13.hasPublicProperties == true) { + buffer.write(''' +
  17. Properties
  18. '''); + if (context0.self != null) { + var context14 = context0.self; + for (var context15 in context14.publicPropertiesSorted) { + buffer.write(''' +
  19. '''); + buffer.write(context15.linkedName.toString()); + buffer.write('''
  20. '''); + } + } + } + } + buffer.writeln(); + if (context0.self != null) { + var context16 = context0.self; + if (context16.hasPublicFunctions == true) { + buffer.write(''' +
  21. Functions
  22. '''); + if (context0.self != null) { + var context17 = context0.self; + for (var context18 in context17.publicFunctionsSorted) { + buffer.write(''' +
  23. '''); + buffer.write(context18.linkedName.toString()); + buffer.write('''
  24. '''); + } + } + } + } + buffer.writeln(); + if (context0.self != null) { + var context19 = context0.self; + if (context19.hasPublicEnums == true) { + buffer.write(''' +
  25. Enums
  26. '''); + if (context0.self != null) { + var context20 = context0.self; + for (var context21 in context20.publicEnumsSorted) { + buffer.write(''' +
  27. '''); + buffer.write(context21.linkedName.toString()); + buffer.write('''
  28. '''); + } + } + } + } + buffer.writeln(); + if (context0.self != null) { + var context22 = context0.self; + if (context22.hasPublicTypedefs == true) { + buffer.write(''' +
  29. Typedefs
  30. '''); + if (context0.self != null) { + var context23 = context0.self; + for (var context24 in context23.publicTypedefsSorted) { + buffer.write(''' +
  31. '''); + buffer.write(context24.linkedName.toString()); + buffer.write('''
  32. '''); + } + } + } + } + buffer.writeln(); + if (context0.self != null) { + var context25 = context0.self; + if (context25.hasPublicExceptions == true) { + buffer.write(''' +
  33. Exceptions
  34. '''); + if (context0.self != null) { + var context26 = context0.self; + for (var context27 in context26.publicExceptionsSorted) { + buffer.write(''' +
  35. '''); + buffer.write(context27.linkedName.toString()); + buffer.write('''
  36. '''); + } + } + } + } + buffer.write(''' +
+'''); + return buffer.toString(); +} + +String _renderCategory_partial_footer_12(CategoryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ + + +'''); + buffer.write(''' + + + +'''); + buffer.write(context0.customFooter.toString()); + buffer.write(''' + + + + +'''); + return buffer.toString(); +} + +String renderClass(ClassTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderClass_partial_head_0(context0)); + buffer.write(''' + +
'''); + if (context0.self != null) { + var context1 = context0.self; + buffer.write(''' +
'''); + buffer.write(_renderClass_partial_source_link_1(context1, context0)); + buffer.write('''

'''); + buffer.write(context1.nameWithGenerics.toString()); + buffer.write(''' '''); + buffer.write(htmlEscape.convert(context1.kind.toString())); + buffer.write(' '); + buffer.write(_renderClass_partial_feature_set_2(context1, context0)); + buffer.write(' '); + buffer.write(_renderClass_partial_categorization_3(context1, context0)); + buffer.write('''

'''); + } + buffer.writeln(); + if (context0.clazz != null) { + var context2 = context0.clazz; + buffer.write('\n '); + buffer.write(_renderClass_partial_documentation_4(context2, context0)); + buffer.writeln(); + if (context2.hasModifiers == true) { + buffer.write(''' +
+
'''); + if (context2.hasPublicSuperChainReversed == true) { + buffer.write(''' +
Inheritance
+
    +
  • '''); + buffer.write(context0.linkedObjectType.toString()); + buffer.write('''
  • '''); + for (var context3 in context2.publicSuperChainReversed) { + buffer.write(''' +
  • '''); + buffer.write(context3.linkedName.toString()); + buffer.write('''
  • '''); + } + buffer.write(''' +
  • '''); + buffer.write(context2.name.toString()); + buffer.write('''
  • +
'''); + } + buffer.writeln(); + if (context2.hasPublicInterfaces == true) { + buffer.write(''' +
Implemented types
+
+
    '''); + for (var context4 in context2.publicInterfaces) { + buffer.write(''' +
  • '''); + buffer.write(context4.linkedName.toString()); + buffer.write('''
  • '''); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicMixedInTypes == true) { + buffer.write(''' +
Mixed in types
+
    '''); + for (var context5 in context2.publicMixedInTypes) { + buffer.write(''' +
  • '''); + buffer.write(context5.linkedName.toString()); + buffer.write('''
  • '''); + } + buffer.write(''' +
'''); + } + buffer.writeln(); + if (context2.hasPublicImplementors == true) { + buffer.write(''' +
Implementers
+
    '''); + for (var context6 in context2.publicImplementorsSorted) { + buffer.write(''' +
  • '''); + buffer.write(context6.linkedName.toString()); + buffer.write('''
  • '''); + } + buffer.write(''' +
'''); + } + buffer.writeln(); + if (context2.hasPotentiallyApplicableExtensions == true) { + buffer.write(''' +
Available Extensions
+
    '''); + for (var context7 in context2.potentiallyApplicableExtensionsSorted) { + buffer.write(''' +
  • '''); + buffer.write(context7.linkedName.toString()); + buffer.write('''
  • '''); + } + buffer.write(''' +
'''); + } + buffer.writeln(); + if (context2.hasAnnotations == true) { + buffer.write(''' +
Annotations
+
    '''); + for (var context8 in context2.annotations) { + buffer.write(''' +
  • '''); + buffer.write(context8.linkedNameWithParameters.toString()); + buffer.write('''
  • '''); + } + buffer.write(''' +
'''); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicConstructors == true) { + buffer.write(''' +
+

Constructors

+ +
'''); + for (var context9 in context2.publicConstructorsSorted) { + buffer.write(''' +
+ '''); + buffer.write(context9.linkedName.toString()); + buffer.write('''('''); + buffer.write(context9.linkedParams.toString()); + buffer.write(''') +
+
+ '''); + buffer.write(context9.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context9.extendedDocLink.toString()); + if (context9.isConst == true) { + buffer.write(''' +
const
'''); + } + if (context9.isFactory == true) { + buffer.write(''' +
factory
'''); + } + buffer.write(''' +
'''); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicInstanceFields == true) { + buffer.write(''' +
+

Properties

+ +
'''); + for (var context10 in context2.publicInstanceFieldsSorted) { + buffer.write('\n '); + buffer.write( + _renderClass_partial_property_5(context10, context2, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicInstanceMethods == true) { + buffer.write(''' +
+

Methods

+
'''); + for (var context11 in context2.publicInstanceMethodsSorted) { + buffer.write('\n '); + buffer.write( + _renderClass_partial_callable_6(context11, context2, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicInstanceOperators == true) { + buffer.write(''' +
+

Operators

+
'''); + for (var context12 in context2.publicInstanceOperatorsSorted) { + buffer.write('\n '); + buffer.write( + _renderClass_partial_callable_6(context12, context2, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicVariableStaticFields == true) { + buffer.write(''' +
+

Static Properties

+ +
'''); + for (var context13 in context2.publicVariableStaticFieldsSorted) { + buffer.write('\n '); + buffer.write( + _renderClass_partial_property_5(context13, context2, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicStaticMethods == true) { + buffer.write(''' +
+

Static Methods

+
'''); + for (var context14 in context2.publicStaticMethodsSorted) { + buffer.write('\n '); + buffer.write( + _renderClass_partial_callable_6(context14, context2, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicConstantFields == true) { + buffer.write(''' +
+

Constants

+ +
'''); + for (var context15 in context2.publicConstantFieldsSorted) { + buffer.write('\n '); + buffer.write( + _renderClass_partial_constant_7(context15, context2, context0)); + } + buffer.write(''' +
+
'''); + } + } + buffer.write(''' + +
+ + + + + +'''); + buffer.write(_renderClass_partial_footer_9(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderClass_partial_head_0( + ClassTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(''' + + + + + '''); + if (context0.includeVersion == true) { + buffer.write(''' + '''); + } + buffer.write(''' + + '''); + buffer.write(htmlEscape.convert(context0.title.toString())); + buffer.write(''''''); + if (context0.relCanonicalPrefix != null) { + var context1 = context0.relCanonicalPrefix; + buffer.write(''' + '''); + } + buffer.writeln(); + if (context0.useBaseHref == true) { + if (context0.htmlBase != null) { + var context2 = context0.htmlBase; + buffer.write(''' + + '''); + } + } + buffer.write('\n\n '); + buffer.write(''' + + + + + + + + '''); + buffer.write(context0.customHeader.toString()); + buffer.write(''' + + +'''); + buffer.write(''' + + +
+ +
+ + +
'''); + buffer.write(htmlEscape.convert(context0.self.name.toString())); + buffer.write('''
+ +
+ +
+'''); + return buffer.toString(); +} + +String _renderClass_partial_source_link_1( + Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceHref == true) { + buffer.write(''' + '''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderClass_partial_feature_set_2( + Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatureSet == true) { + for (var context2 in context1.displayedLanguageFeatures) { + buffer.write('\n '); + buffer.write(context2.featureLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderClass_partial_categorization_3( + Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasCategoryNames == true) { + for (var context2 in context1.displayedCategories) { + buffer.write('\n '); + buffer.write(context2.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderClass_partial_documentation_4( + Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.write(''' +
+ '''); + buffer.write(context1.documentationAsHtml.toString()); + buffer.write(''' +
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderClass_partial_property_5( + Field context2, Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context2.linkedName.toString()); + buffer.write(''' + '''); + buffer.write(context2.arrow.toString()); + buffer.write(' '); + buffer.write(context2.modelType.linkedName.toString()); + buffer.write(''' '''); + buffer.write(__renderClass_partial_property_5_partial_categorization_0( + context2, context1, context0)); + buffer.write(''' +
+ + '''); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write('\n '); + buffer.write(__renderClass_partial_property_5_partial_features_1( + context2, context1, context0)); + buffer.write(''' + +'''); + return buffer.toString(); +} + +String + __renderClass_partial_property_5_partial_categorization_0( + Field context2, Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + for (var context3 in context2.displayedCategories) { + buffer.write('\n '); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderClass_partial_property_5_partial_features_1( + Field context2, Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderClass_partial_callable_6( + Method context2, Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context2.linkedName.toString()); + buffer.write(''''''); + buffer.write(context2.linkedGenericParameters.toString()); + buffer.write('''('''); + buffer.write(context2.linkedParamsNoMetadata.toString()); + buffer.write(''') + → '''); + buffer.write(context2.modelType.returnType.linkedName.toString()); + buffer.write(''' + + '''); + buffer.write(__renderClass_partial_callable_6_partial_categorization_0( + context2, context1, context0)); + buffer.write(''' +
+ + '''); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write('\n '); + buffer.write(__renderClass_partial_callable_6_partial_features_1( + context2, context1, context0)); + buffer.write(''' + +'''); + return buffer.toString(); +} + +String + __renderClass_partial_callable_6_partial_categorization_0( + Method context2, Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + for (var context3 in context2.displayedCategories) { + buffer.write('\n '); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderClass_partial_callable_6_partial_features_1( + Method context2, Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderClass_partial_constant_7( + Field context2, Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context2.linkedName.toString()); + buffer.write(''' + → const '''); + buffer.write(context2.modelType.linkedName.toString()); + buffer.write(''' + '''); + buffer.write(__renderClass_partial_constant_7_partial_categorization_0( + context2, context1, context0)); + buffer.write(''' +
+
+ '''); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write('\n '); + buffer.write(__renderClass_partial_constant_7_partial_features_1( + context2, context1, context0)); + buffer.write(''' +
+ '''); + buffer.write(context2.constantValueTruncated.toString()); + buffer.write(''' +
+
+'''); + return buffer.toString(); +} + +String + __renderClass_partial_constant_7_partial_categorization_0( + Field context2, Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + for (var context3 in context2.displayedCategories) { + buffer.write('\n '); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderClass_partial_constant_7_partial_features_1( + Field context2, Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderClass_partial_search_sidebar_8( + ClassTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + + +'''); + return buffer.toString(); +} + +String _renderClass_partial_footer_9( + ClassTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + '''); + buffer.write(htmlEscape.convert(context0.defaultPackage.name.toString())); + if (context0.hasFooterVersion == true) { + buffer.write('\n '); + buffer + .write(htmlEscape.convert(context0.defaultPackage.version.toString())); + } + buffer.write(''' + + + '''); + buffer.write(context0.customInnerFooter.toString()); + buffer.write(''' +
+ +'''); + buffer.write(''' + + + +'''); + buffer.write(context0.customFooter.toString()); + buffer.write(''' + + + + +'''); + return buffer.toString(); +} + +String renderConstructor(ConstructorTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderConstructor_partial_head_0(context0)); + buffer.write(''' + +
'''); + if (context0.self != null) { + var context1 = context0.self; + buffer.write(''' +
'''); + buffer.write(_renderConstructor_partial_source_link_1(context1, context0)); + buffer.write('''

'''); + buffer.write(context1.nameWithGenerics.toString()); + buffer.write(''' '''); + buffer.write(htmlEscape.convert(context1.kind.toString())); + buffer.write(' '); + buffer.write(_renderConstructor_partial_feature_set_2(context1, context0)); + buffer.write('''

'''); + } + buffer.writeln(); + if (context0.constructor != null) { + var context2 = context0.constructor; + buffer.write(''' +
'''); + if (context2.hasAnnotations == true) { + buffer.write(''' +
+
    '''); + for (var context3 in context2.annotations) { + buffer.write(''' +
  1. '''); + buffer.write(context3.linkedNameWithParameters.toString()); + buffer.write('''
  2. '''); + } + buffer.write(''' +
+
'''); + } + if (context2.isConst == true) { + buffer.write('''const'''); + } + buffer.write(''' + '''); + buffer.write(context2.nameWithGenerics.toString()); + buffer.write('''('''); + if (context2.hasParameters == true) { + buffer.write(context2.linkedParamsLines.toString()); + } + buffer.write(''') +
+ + '''); + buffer + .write(_renderConstructor_partial_documentation_3(context2, context0)); + buffer.write('\n\n '); + buffer.write(_renderConstructor_partial_source_code_4(context2, context0)); + buffer.writeln(); + } + buffer.write(''' +
+ + + + + +'''); + buffer.write(_renderConstructor_partial_footer_6(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderConstructor_partial_head_0(ConstructorTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(''' + + + + + '''); + if (context0.includeVersion == true) { + buffer.write(''' + '''); + } + buffer.write(''' + + '''); + buffer.write(htmlEscape.convert(context0.title.toString())); + buffer.write(''''''); + if (context0.relCanonicalPrefix != null) { + var context1 = context0.relCanonicalPrefix; + buffer.write(''' + '''); + } + buffer.writeln(); + if (context0.useBaseHref == true) { + if (context0.htmlBase != null) { + var context2 = context0.htmlBase; + buffer.write(''' + + '''); + } + } + buffer.write('\n\n '); + buffer.write(''' + + + + + + + + '''); + buffer.write(context0.customHeader.toString()); + buffer.write(''' + + +'''); + buffer.write(''' + + +
+ +
+ + +
'''); + buffer.write(htmlEscape.convert(context0.self.name.toString())); + buffer.write('''
+ +
+ +
+'''); + return buffer.toString(); +} + +String _renderConstructor_partial_source_link_1( + Constructor context1, ConstructorTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceHref == true) { + buffer.write(''' + '''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderConstructor_partial_feature_set_2( + Constructor context1, ConstructorTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatureSet == true) { + for (var context2 in context1.displayedLanguageFeatures) { + buffer.write('\n '); + buffer.write(context2.featureLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderConstructor_partial_documentation_3( + Constructor context1, ConstructorTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.write(''' +
+ '''); + buffer.write(context1.documentationAsHtml.toString()); + buffer.write(''' +
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderConstructor_partial_source_code_4( + Constructor context1, ConstructorTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceCode == true) { + buffer.write(''' +
+

Implementation

+
''');
+    buffer.write(context1.sourceCode.toString());
+    buffer.write('''
+
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderConstructor_partial_search_sidebar_5( + ConstructorTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + + +'''); + return buffer.toString(); +} + +String _renderConstructor_partial_footer_6(ConstructorTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + '''); + buffer.write(htmlEscape.convert(context0.defaultPackage.name.toString())); + if (context0.hasFooterVersion == true) { + buffer.write('\n '); + buffer + .write(htmlEscape.convert(context0.defaultPackage.version.toString())); + } + buffer.write(''' + + + '''); + buffer.write(context0.customInnerFooter.toString()); + buffer.write(''' +
+ +'''); + buffer.write(''' + + + +'''); + buffer.write(context0.customFooter.toString()); + buffer.write(''' + + + + +'''); + return buffer.toString(); +} + +String renderEnum(EnumTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderEnum_partial_head_0(context0)); + buffer.write(''' + +
'''); + if (context0.self != null) { + var context1 = context0.self; + buffer.write(''' +
'''); + buffer.write(_renderEnum_partial_source_link_1(context1, context0)); + buffer.write('''

'''); + buffer.write(context1.name.toString()); + buffer.write(''' '''); + buffer.write(htmlEscape.convert(context1.kind.toString())); + buffer.write(' '); + buffer.write(_renderEnum_partial_feature_set_2(context1, context0)); + buffer.write(' '); + buffer.write(_renderEnum_partial_categorization_3(context1, context0)); + buffer.write('''

'''); + } + buffer.writeln(); + if (context0.eNum != null) { + var context2 = context0.eNum; + buffer.write('\n '); + buffer.write(_renderEnum_partial_documentation_4(context2, context0)); + buffer.writeln(); + if (context2.hasModifiers == true) { + buffer.write(''' +
+
'''); + if (context2.hasPublicSuperChainReversed == true) { + buffer.write(''' +
Inheritance
+
    +
  • '''); + buffer.write(context0.linkedObjectType.toString()); + buffer.write('''
  • '''); + for (var context3 in context2.publicSuperChainReversed) { + buffer.write(''' +
  • '''); + buffer.write(context3.linkedName.toString()); + buffer.write('''
  • '''); + } + buffer.write(''' +
  • '''); + buffer.write(context2.name.toString()); + buffer.write('''
  • +
'''); + } + buffer.writeln(); + if (context2.hasPublicInterfaces == true) { + buffer.write(''' +
Implemented types
+
+
    '''); + for (var context4 in context2.publicInterfaces) { + buffer.write(''' +
  • '''); + buffer.write(context4.linkedName.toString()); + buffer.write('''
  • '''); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicMixedInTypes == true) { + buffer.write(''' +
Mixed in types
+
    '''); + for (var context5 in context2.publicMixedInTypes) { + buffer.write(''' +
  • '''); + buffer.write(context5.linkedName.toString()); + buffer.write('''
  • '''); + } + buffer.write(''' +
'''); + } + buffer.writeln(); + if (context2.hasPublicImplementors == true) { + buffer.write(''' +
Implementers
+
    '''); + for (var context6 in context2.publicImplementorsSorted) { + buffer.write(''' +
  • '''); + buffer.write(context6.linkedName.toString()); + buffer.write('''
  • '''); + } + buffer.write(''' +
'''); + } + buffer.writeln(); + if (context2.hasAnnotations == true) { + buffer.write(''' +
Annotations
+
    '''); + for (var context7 in context2.annotations) { + buffer.write(''' +
  • '''); + buffer.write(context7.linkedNameWithParameters.toString()); + buffer.write('''
  • '''); + } + buffer.write(''' +
'''); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicConstantFields == true) { + buffer.write(''' +
+

Constants

+ +
'''); + for (var context8 in context2.publicConstantFieldsSorted) { + buffer.write('\n '); + buffer.write( + _renderEnum_partial_constant_5(context8, context2, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicConstructors == true) { + buffer.write(''' +
+

Constructors

+ +
'''); + for (var context9 in context2.publicConstructorsSorted) { + buffer.write(''' +
+ '''); + buffer.write(context9.linkedName.toString()); + buffer.write('''('''); + buffer.write(context9.linkedParams.toString()); + buffer.write(''') +
+
+ '''); + buffer.write(context9.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context9.extendedDocLink.toString()); + if (context9.isConst == true) { + buffer.write(''' +
const
'''); + } + if (context9.isFactory == true) { + buffer.write(''' +
factory
'''); + } + buffer.write(''' +
'''); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicInstanceFields == true) { + buffer.write(''' +
+

Properties

+ +
'''); + for (var context10 in context2.publicInstanceFieldsSorted) { + buffer.write('\n '); + buffer.write( + _renderEnum_partial_property_6(context10, context2, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicInstanceMethods == true) { + buffer.write(''' +
+

Methods

+
'''); + for (var context11 in context2.publicInstanceMethodsSorted) { + buffer.write('\n '); + buffer.write( + _renderEnum_partial_callable_7(context11, context2, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicInstanceOperators == true) { + buffer.write(''' +
+

Operators

+
'''); + for (var context12 in context2.publicInstanceOperatorsSorted) { + buffer.write('\n '); + buffer.write( + _renderEnum_partial_callable_7(context12, context2, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicVariableStaticFields == true) { + buffer.write(''' +
+

Static Properties

+ +
'''); + for (var context13 in context2.publicVariableStaticFieldsSorted) { + buffer.write('\n '); + buffer.write( + _renderEnum_partial_property_6(context13, context2, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicStaticMethods == true) { + buffer.write(''' +
+

Static Methods

+
'''); + for (var context14 in context2.publicStaticMethodsSorted) { + buffer.write('\n '); + buffer.write( + _renderEnum_partial_callable_7(context14, context2, context0)); + } + buffer.write(''' +
+
'''); + } + } + buffer.write(''' +
+ + + + + +'''); + buffer.write(_renderEnum_partial_footer_9(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderEnum_partial_head_0(EnumTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(''' + + + + + '''); + if (context0.includeVersion == true) { + buffer.write(''' + '''); + } + buffer.write(''' + + '''); + buffer.write(htmlEscape.convert(context0.title.toString())); + buffer.write(''''''); + if (context0.relCanonicalPrefix != null) { + var context1 = context0.relCanonicalPrefix; + buffer.write(''' + '''); + } + buffer.writeln(); + if (context0.useBaseHref == true) { + if (context0.htmlBase != null) { + var context2 = context0.htmlBase; + buffer.write(''' + + '''); + } + } + buffer.write('\n\n '); + buffer.write(''' + + + + + + + + '''); + buffer.write(context0.customHeader.toString()); + buffer.write(''' + + +'''); + buffer.write(''' + + +
+ +
+ + +
'''); + buffer.write(htmlEscape.convert(context0.self.name.toString())); + buffer.write('''
+ +
+ +
+'''); + return buffer.toString(); +} + +String _renderEnum_partial_source_link_1( + Enum context1, EnumTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceHref == true) { + buffer.write(''' + '''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderEnum_partial_feature_set_2( + Enum context1, EnumTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatureSet == true) { + for (var context2 in context1.displayedLanguageFeatures) { + buffer.write('\n '); + buffer.write(context2.featureLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderEnum_partial_categorization_3( + Enum context1, EnumTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasCategoryNames == true) { + for (var context2 in context1.displayedCategories) { + buffer.write('\n '); + buffer.write(context2.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderEnum_partial_documentation_4( + Enum context1, EnumTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.write(''' +
+ '''); + buffer.write(context1.documentationAsHtml.toString()); + buffer.write(''' +
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderEnum_partial_constant_5( + Field context2, Enum context1, EnumTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context2.linkedName.toString()); + buffer.write(''' + → const '''); + buffer.write(context2.modelType.linkedName.toString()); + buffer.write(''' + '''); + buffer.write(__renderEnum_partial_constant_5_partial_categorization_0( + context2, context1, context0)); + buffer.write(''' +
+
+ '''); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write('\n '); + buffer.write(__renderEnum_partial_constant_5_partial_features_1( + context2, context1, context0)); + buffer.write(''' +
+ '''); + buffer.write(context2.constantValueTruncated.toString()); + buffer.write(''' +
+
+'''); + return buffer.toString(); +} + +String __renderEnum_partial_constant_5_partial_categorization_0( + Field context2, Enum context1, EnumTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + for (var context3 in context2.displayedCategories) { + buffer.write('\n '); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderEnum_partial_constant_5_partial_features_1( + Field context2, Enum context1, EnumTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderEnum_partial_property_6( + Field context2, Enum context1, EnumTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context2.linkedName.toString()); + buffer.write(''' + '''); + buffer.write(context2.arrow.toString()); + buffer.write(' '); + buffer.write(context2.modelType.linkedName.toString()); + buffer.write(''' '''); + buffer.write(__renderEnum_partial_property_6_partial_categorization_0( + context2, context1, context0)); + buffer.write(''' +
+ + '''); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write('\n '); + buffer.write(__renderEnum_partial_property_6_partial_features_1( + context2, context1, context0)); + buffer.write(''' + +'''); + return buffer.toString(); +} + +String __renderEnum_partial_property_6_partial_categorization_0( + Field context2, Enum context1, EnumTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + for (var context3 in context2.displayedCategories) { + buffer.write('\n '); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderEnum_partial_property_6_partial_features_1( + Field context2, Enum context1, EnumTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderEnum_partial_callable_7( + Method context2, Enum context1, EnumTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context2.linkedName.toString()); + buffer.write(''''''); + buffer.write(context2.linkedGenericParameters.toString()); + buffer.write('''('''); + buffer.write(context2.linkedParamsNoMetadata.toString()); + buffer.write(''') + → '''); + buffer.write(context2.modelType.returnType.linkedName.toString()); + buffer.write(''' + + '''); + buffer.write(__renderEnum_partial_callable_7_partial_categorization_0( + context2, context1, context0)); + buffer.write(''' +
+ + '''); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write('\n '); + buffer.write(__renderEnum_partial_callable_7_partial_features_1( + context2, context1, context0)); + buffer.write(''' + +'''); + return buffer.toString(); +} + +String __renderEnum_partial_callable_7_partial_categorization_0( + Method context2, Enum context1, EnumTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + for (var context3 in context2.displayedCategories) { + buffer.write('\n '); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderEnum_partial_callable_7_partial_features_1( + Method context2, Enum context1, EnumTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderEnum_partial_search_sidebar_8(EnumTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + + +'''); + return buffer.toString(); +} + +String _renderEnum_partial_footer_9(EnumTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + '''); + buffer.write(htmlEscape.convert(context0.defaultPackage.name.toString())); + if (context0.hasFooterVersion == true) { + buffer.write('\n '); + buffer + .write(htmlEscape.convert(context0.defaultPackage.version.toString())); + } + buffer.write(''' + + + '''); + buffer.write(context0.customInnerFooter.toString()); + buffer.write(''' +
+ +'''); + buffer.write(''' + + + +'''); + buffer.write(context0.customFooter.toString()); + buffer.write(''' + + + + +'''); + return buffer.toString(); +} + +String renderError(PackageTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderError_partial_head_0(context0)); + buffer.write(''' + +
+

404: Something\'s gone wrong :-(

+ +
+

You\'ve tried to visit a page that doesn\'t exist. Luckily this site + has other pages.

+

If you were looking for something specific, try searching: +

+

+ +
+
+ + + + + +'''); + buffer.write(_renderError_partial_footer_3(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderError_partial_head_0(PackageTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(''' + + + + + '''); + if (context0.includeVersion == true) { + buffer.write(''' + '''); + } + buffer.write(''' + + '''); + buffer.write(htmlEscape.convert(context0.title.toString())); + buffer.write(''''''); + if (context0.relCanonicalPrefix != null) { + var context1 = context0.relCanonicalPrefix; + buffer.write(''' + '''); + } + buffer.writeln(); + if (context0.useBaseHref == true) { + if (context0.htmlBase != null) { + var context2 = context0.htmlBase; + buffer.write(''' + + '''); + } + } + buffer.write('\n\n '); + buffer.write(''' + + + + + + + + '''); + buffer.write(context0.customHeader.toString()); + buffer.write(''' + + +'''); + buffer.write(''' + + +
+ +
+ + +
'''); + buffer.write(htmlEscape.convert(context0.self.name.toString())); + buffer.write('''
+ +
+ +
+'''); + return buffer.toString(); +} + +String _renderError_partial_search_sidebar_1(PackageTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + + +'''); + return buffer.toString(); +} + +String _renderError_partial_packages_2(PackageTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
    '''); + for (var context1 in context0.localPackages) { + if (context1.isFirstPackage == true) { + if (context1.hasDocumentedCategories == true) { + buffer.write(''' +
  1. Topics
  2. '''); + for (var context2 in context1.documentedCategoriesSorted) { + buffer.write(''' +
  3. '''); + buffer.write(context2.linkedName.toString()); + buffer.write('''
  4. '''); + } + } + buffer.write(''' +
  5. Libraries
  6. '''); + } + if (context1.isFirstPackage != true) { + buffer.write(''' +
  7. '''); + buffer.write(htmlEscape.convert(context1.name.toString())); + buffer.write('''
  8. '''); + } + if (context1.defaultCategory != null) { + var context3 = context1.defaultCategory; + for (var context4 in context3.publicLibrariesSorted) { + buffer.write(''' +
  9. '''); + buffer.write(context4.linkedName.toString()); + buffer.write('''
  10. '''); + } + } + for (var context5 in context1.categoriesWithPublicLibraries) { + buffer.write(''' +
  11. '''); + buffer.write(htmlEscape.convert(context5.name.toString())); + buffer.write('''
  12. '''); + for (var context6 in context5.publicLibrariesSorted) { + buffer.write(''' +
  13. '''); + buffer.write(context6.linkedName.toString()); + buffer.write('''
  14. '''); + } + } + } + buffer.write(''' +
+'''); + return buffer.toString(); +} + +String _renderError_partial_footer_3(PackageTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + '''); + buffer.write(htmlEscape.convert(context0.defaultPackage.name.toString())); + if (context0.hasFooterVersion == true) { + buffer.write('\n '); + buffer + .write(htmlEscape.convert(context0.defaultPackage.version.toString())); + } + buffer.write(''' + + + '''); + buffer.write(context0.customInnerFooter.toString()); + buffer.write(''' +
+ +'''); + buffer.write(''' + + + +'''); + buffer.write(context0.customFooter.toString()); + buffer.write(''' + + + + +'''); + return buffer.toString(); +} + +String renderExtension(ExtensionTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderExtension_partial_head_0(context0)); + buffer.write(''' + +
'''); + if (context0.self != null) { + var context1 = context0.self; + buffer.write(''' +
'''); + buffer.write(_renderExtension_partial_source_link_1(context1, context0)); + buffer.write('''

'''); + buffer.write(context1.nameWithGenerics.toString()); + buffer.write(''' '''); + buffer.write(htmlEscape.convert(context1.kind.toString())); + buffer.write(' '); + buffer.write(_renderExtension_partial_feature_set_2(context1, context0)); + buffer.write(' '); + buffer.write(_renderExtension_partial_categorization_3(context1, context0)); + buffer.write('''

'''); + } + buffer.writeln(); + if (context0.extension != null) { + var context2 = context0.extension; + buffer.write('\n '); + buffer.write(_renderExtension_partial_documentation_4(context2, context0)); + buffer.write(''' +
+
+
on
+
+
    '''); + if (context2.extendedType != null) { + var context3 = context2.extendedType; + buffer.write(''' +
  • '''); + buffer.write(context3.linkedName.toString()); + buffer.write('''
  • '''); + } + buffer.write(''' +
+
+
+
+'''); + if (context2.hasPublicInstanceFields == true) { + buffer.write(''' +
+

Properties

+ +
'''); + for (var context4 in context2.publicInstanceFieldsSorted) { + buffer.write('\n '); + buffer.write( + _renderExtension_partial_property_5(context4, context2, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicInstanceMethods == true) { + buffer.write(''' +
+

Methods

+
'''); + for (var context5 in context2.publicInstanceMethodsSorted) { + buffer.write('\n '); + buffer.write( + _renderExtension_partial_callable_6(context5, context2, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicInstanceOperators == true) { + buffer.write(''' +
+

Operators

+
'''); + for (var context6 in context2.publicInstanceOperatorsSorted) { + buffer.write('\n '); + buffer.write( + _renderExtension_partial_callable_6(context6, context2, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicVariableStaticFields == true) { + buffer.write(''' +
+

Static Properties

+ +
'''); + for (var context7 in context2.publicVariableStaticFieldsSorted) { + buffer.write('\n '); + buffer.write( + _renderExtension_partial_property_5(context7, context2, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicStaticMethods == true) { + buffer.write(''' +
+

Static Methods

+
'''); + for (var context8 in context2.publicStaticMethodsSorted) { + buffer.write('\n '); + buffer.write( + _renderExtension_partial_callable_6(context8, context2, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicConstantFields == true) { + buffer.write(''' +
+

Constants

+ +
'''); + for (var context9 in context2.publicConstantFieldsSorted) { + buffer.write('\n '); + buffer.write( + _renderExtension_partial_constant_7(context9, context2, context0)); + } + buffer.write(''' +
+
'''); + } + } + buffer.write(''' + +
+ + + + + +'''); + buffer.write(_renderExtension_partial_footer_9(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderExtension_partial_head_0( + ExtensionTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(''' + + + + + '''); + if (context0.includeVersion == true) { + buffer.write(''' + '''); + } + buffer.write(''' + + '''); + buffer.write(htmlEscape.convert(context0.title.toString())); + buffer.write(''''''); + if (context0.relCanonicalPrefix != null) { + var context1 = context0.relCanonicalPrefix; + buffer.write(''' + '''); + } + buffer.writeln(); + if (context0.useBaseHref == true) { + if (context0.htmlBase != null) { + var context2 = context0.htmlBase; + buffer.write(''' + + '''); + } + } + buffer.write('\n\n '); + buffer.write(''' + + + + + + + + '''); + buffer.write(context0.customHeader.toString()); + buffer.write(''' + + +'''); + buffer.write(''' + + +
+ +
+ + +
'''); + buffer.write(htmlEscape.convert(context0.self.name.toString())); + buffer.write('''
+ +
+ +
+'''); + return buffer.toString(); +} + +String _renderExtension_partial_source_link_1( + Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceHref == true) { + buffer.write(''' + '''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderExtension_partial_feature_set_2( + Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatureSet == true) { + for (var context2 in context1.displayedLanguageFeatures) { + buffer.write('\n '); + buffer.write(context2.featureLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderExtension_partial_categorization_3( + Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasCategoryNames == true) { + for (var context2 in context1.displayedCategories) { + buffer.write('\n '); + buffer.write(context2.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderExtension_partial_documentation_4( + Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.write(''' +
+ '''); + buffer.write(context1.documentationAsHtml.toString()); + buffer.write(''' +
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderExtension_partial_property_5( + Field context2, Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context2.linkedName.toString()); + buffer.write(''' + '''); + buffer.write(context2.arrow.toString()); + buffer.write(' '); + buffer.write(context2.modelType.linkedName.toString()); + buffer.write(''' '''); + buffer.write(__renderExtension_partial_property_5_partial_categorization_0( + context2, context1, context0)); + buffer.write(''' +
+ + '''); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write('\n '); + buffer.write(__renderExtension_partial_property_5_partial_features_1( + context2, context1, context0)); + buffer.write(''' + +'''); + return buffer.toString(); +} + +String __renderExtension_partial_property_5_partial_categorization_0< + T extends Extension>( + Field context2, Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + for (var context3 in context2.displayedCategories) { + buffer.write('\n '); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderExtension_partial_property_5_partial_features_1< + T extends Extension>( + Field context2, Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderExtension_partial_callable_6( + Method context2, Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context2.linkedName.toString()); + buffer.write(''''''); + buffer.write(context2.linkedGenericParameters.toString()); + buffer.write('''('''); + buffer.write(context2.linkedParamsNoMetadata.toString()); + buffer.write(''') + → '''); + buffer.write(context2.modelType.returnType.linkedName.toString()); + buffer.write(''' + + '''); + buffer.write(__renderExtension_partial_callable_6_partial_categorization_0( + context2, context1, context0)); + buffer.write(''' +
+ + '''); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write('\n '); + buffer.write(__renderExtension_partial_callable_6_partial_features_1( + context2, context1, context0)); + buffer.write(''' + +'''); + return buffer.toString(); +} + +String __renderExtension_partial_callable_6_partial_categorization_0< + T extends Extension>( + Method context2, Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + for (var context3 in context2.displayedCategories) { + buffer.write('\n '); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderExtension_partial_callable_6_partial_features_1< + T extends Extension>( + Method context2, Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderExtension_partial_constant_7( + Field context2, Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context2.linkedName.toString()); + buffer.write(''' + → const '''); + buffer.write(context2.modelType.linkedName.toString()); + buffer.write(''' + '''); + buffer.write(__renderExtension_partial_constant_7_partial_categorization_0( + context2, context1, context0)); + buffer.write(''' +
+
+ '''); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write('\n '); + buffer.write(__renderExtension_partial_constant_7_partial_features_1( + context2, context1, context0)); + buffer.write(''' +
+ '''); + buffer.write(context2.constantValueTruncated.toString()); + buffer.write(''' +
+
+'''); + return buffer.toString(); +} + +String __renderExtension_partial_constant_7_partial_categorization_0< + T extends Extension>( + Field context2, Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + for (var context3 in context2.displayedCategories) { + buffer.write('\n '); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderExtension_partial_constant_7_partial_features_1< + T extends Extension>( + Field context2, Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderExtension_partial_search_sidebar_8( + ExtensionTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + + +'''); + return buffer.toString(); +} + +String _renderExtension_partial_footer_9( + ExtensionTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + '''); + buffer.write(htmlEscape.convert(context0.defaultPackage.name.toString())); + if (context0.hasFooterVersion == true) { + buffer.write('\n '); + buffer + .write(htmlEscape.convert(context0.defaultPackage.version.toString())); + } + buffer.write(''' + + + '''); + buffer.write(context0.customInnerFooter.toString()); + buffer.write(''' +
+ +'''); + buffer.write(''' + + + +'''); + buffer.write(context0.customFooter.toString()); + buffer.write(''' + + + + +'''); + return buffer.toString(); +} + +String renderFunction(FunctionTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderFunction_partial_head_0(context0)); + buffer.write(''' + +
'''); + if (context0.self != null) { + var context1 = context0.self; + buffer.write(''' +
'''); + buffer.write(_renderFunction_partial_source_link_1(context1, context0)); + buffer.write('''

'''); + buffer.write(context1.nameWithGenerics.toString()); + buffer.write(''' '''); + buffer.write(htmlEscape.convert(context1.kind.toString())); + buffer.write(' '); + buffer.write(_renderFunction_partial_feature_set_2(context1, context0)); + buffer.write(' '); + buffer.write(_renderFunction_partial_categorization_3(context1, context0)); + buffer.write('''

'''); + } + buffer.writeln(); + if (context0.function != null) { + var context2 = context0.function; + buffer.write(''' +
+ '''); + buffer.write( + _renderFunction_partial_callable_multiline_4(context2, context0)); + buffer.write(''' +
+ '''); + buffer.write(_renderFunction_partial_documentation_5(context2, context0)); + buffer.write('\n\n '); + buffer.write(_renderFunction_partial_source_code_6(context2, context0)); + buffer.writeln(); + } + buffer.write(''' +
+ + + + + +'''); + buffer.write(_renderFunction_partial_footer_8(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderFunction_partial_head_0(FunctionTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(''' + + + + + '''); + if (context0.includeVersion == true) { + buffer.write(''' + '''); + } + buffer.write(''' + + '''); + buffer.write(htmlEscape.convert(context0.title.toString())); + buffer.write(''''''); + if (context0.relCanonicalPrefix != null) { + var context1 = context0.relCanonicalPrefix; + buffer.write(''' + '''); + } + buffer.writeln(); + if (context0.useBaseHref == true) { + if (context0.htmlBase != null) { + var context2 = context0.htmlBase; + buffer.write(''' + + '''); + } + } + buffer.write('\n\n '); + buffer.write(''' + + + + + + + + '''); + buffer.write(context0.customHeader.toString()); + buffer.write(''' + + +'''); + buffer.write(''' + + +
+ +
+ + +
'''); + buffer.write(htmlEscape.convert(context0.self.name.toString())); + buffer.write('''
+ +
+ +
+'''); + return buffer.toString(); +} + +String _renderFunction_partial_source_link_1( + ModelFunction context1, FunctionTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceHref == true) { + buffer.write(''' + '''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderFunction_partial_feature_set_2( + ModelFunction context1, FunctionTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatureSet == true) { + for (var context2 in context1.displayedLanguageFeatures) { + buffer.write('\n '); + buffer.write(context2.featureLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderFunction_partial_categorization_3( + ModelFunction context1, FunctionTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasCategoryNames == true) { + for (var context2 in context1.displayedCategories) { + buffer.write('\n '); + buffer.write(context2.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderFunction_partial_callable_multiline_4( + ModelFunction context1, FunctionTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasAnnotations == true) { + buffer.write(''' +
+
    '''); + for (var context2 in context1.annotations) { + buffer.write(''' +
  1. '''); + buffer.write(context2.linkedNameWithParameters.toString()); + buffer.write('''
  2. '''); + } + buffer.write(''' +
+
'''); + } + buffer.write(''' + +'''); + buffer.write(context1.modelType.returnType.linkedName.toString()); + buffer.write(''' +'''); + buffer.write( + __renderFunction_partial_callable_multiline_4_partial_name_summary_0( + context1, context0)); + buffer.write(context1.genericParameters.toString()); + buffer.write('''('''); + if (context1.hasParameters == true) { + buffer.write(context1.linkedParamsLines.toString()); + } + buffer.write(''') +'''); + return buffer.toString(); +} + +String __renderFunction_partial_callable_multiline_4_partial_name_summary_0( + ModelFunction context1, FunctionTemplateData context0) { + final buffer = StringBuffer(); + if (context1.isConst == true) { + buffer.write('''const '''); + } + buffer.write(''''''); + buffer.write(htmlEscape.convert(context1.name.toString())); + buffer.write(''''''); + return buffer.toString(); +} + +String _renderFunction_partial_documentation_5( + ModelFunction context1, FunctionTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.write(''' +
+ '''); + buffer.write(context1.documentationAsHtml.toString()); + buffer.write(''' +
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderFunction_partial_source_code_6( + ModelFunction context1, FunctionTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceCode == true) { + buffer.write(''' +
+

Implementation

+
''');
+    buffer.write(context1.sourceCode.toString());
+    buffer.write('''
+
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderFunction_partial_search_sidebar_7(FunctionTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + + +'''); + return buffer.toString(); +} + +String _renderFunction_partial_footer_8(FunctionTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + '''); + buffer.write(htmlEscape.convert(context0.defaultPackage.name.toString())); + if (context0.hasFooterVersion == true) { + buffer.write('\n '); + buffer + .write(htmlEscape.convert(context0.defaultPackage.version.toString())); + } + buffer.write(''' + + + '''); + buffer.write(context0.customInnerFooter.toString()); + buffer.write(''' +
+ +'''); + buffer.write(''' + + + +'''); + buffer.write(context0.customFooter.toString()); + buffer.write(''' + + + + +'''); + return buffer.toString(); +} + +String renderIndex(PackageTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderIndex_partial_head_0(context0)); + buffer.write(''' + +
'''); + if (context0.defaultPackage != null) { + var context1 = context0.defaultPackage; + buffer.write('\n '); + buffer.write(_renderIndex_partial_documentation_1(context1, context0)); + } + buffer.writeln(); + for (var context2 in context0.localPackages) { + buffer.write(''' +
'''); + if (context2.isFirstPackage == true) { + buffer.write(''' +

Libraries

'''); + } + if (context2.isFirstPackage != true) { + buffer.write(''' +

'''); + buffer.write(htmlEscape.convert(context2.name.toString())); + buffer.write('''

'''); + } + buffer.write(''' +
'''); + if (context2.defaultCategory != null) { + var context3 = context2.defaultCategory; + for (var context4 in context3.publicLibrariesSorted) { + buffer.write('\n '); + buffer.write(_renderIndex_partial_library_2( + context4, context3, context2, context0)); + } + } + for (var context5 in context2.categoriesWithPublicLibraries) { + buffer.write(''' +

'''); + buffer.write(htmlEscape.convert(context5.name.toString())); + buffer.write('''

'''); + for (var context6 in context5.publicLibrariesSorted) { + buffer.write('\n '); + buffer.write(_renderIndex_partial_library_2( + context6, context5, context2, context0)); + } + } + buffer.write(''' +
+
'''); + } + buffer.write(''' + +
+ + + + + +'''); + buffer.write(_renderIndex_partial_footer_5(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderIndex_partial_head_0(PackageTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(''' + + + + + '''); + if (context0.includeVersion == true) { + buffer.write(''' + '''); + } + buffer.write(''' + + '''); + buffer.write(htmlEscape.convert(context0.title.toString())); + buffer.write(''''''); + if (context0.relCanonicalPrefix != null) { + var context1 = context0.relCanonicalPrefix; + buffer.write(''' + '''); + } + buffer.writeln(); + if (context0.useBaseHref == true) { + if (context0.htmlBase != null) { + var context2 = context0.htmlBase; + buffer.write(''' + + '''); + } + } + buffer.write('\n\n '); + buffer.write(''' + + + + + + + + '''); + buffer.write(context0.customHeader.toString()); + buffer.write(''' + + +'''); + buffer.write(''' + + +
+ +
+ + +
'''); + buffer.write(htmlEscape.convert(context0.self.name.toString())); + buffer.write('''
+ +
+ +
+'''); + return buffer.toString(); +} + +String _renderIndex_partial_documentation_1( + Package context1, PackageTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.write(''' +
+ '''); + buffer.write(context1.documentationAsHtml.toString()); + buffer.write(''' +
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderIndex_partial_library_2(Library context3, + LibraryContainer context2, Package context1, PackageTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context3.linkedName.toString()); + buffer.write(''' '''); + buffer.write(__renderIndex_partial_library_2_partial_categorization_0( + context3, context2, context1, context0)); + buffer.write(''' +
+
'''); + if (context3.isDocumented == true) { + buffer.write(context3.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context3.extendedDocLink.toString()); + } + buffer.write(''' +
+'''); + return buffer.toString(); +} + +String __renderIndex_partial_library_2_partial_categorization_0( + Library context3, + LibraryContainer context2, + Package context1, + PackageTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasCategoryNames == true) { + for (var context4 in context3.displayedCategories) { + buffer.write('\n '); + buffer.write(context4.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderIndex_partial_search_sidebar_3(PackageTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + + +'''); + return buffer.toString(); +} + +String _renderIndex_partial_packages_4(PackageTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
    '''); + for (var context1 in context0.localPackages) { + if (context1.isFirstPackage == true) { + if (context1.hasDocumentedCategories == true) { + buffer.write(''' +
  1. Topics
  2. '''); + for (var context2 in context1.documentedCategoriesSorted) { + buffer.write(''' +
  3. '''); + buffer.write(context2.linkedName.toString()); + buffer.write('''
  4. '''); + } + } + buffer.write(''' +
  5. Libraries
  6. '''); + } + if (context1.isFirstPackage != true) { + buffer.write(''' +
  7. '''); + buffer.write(htmlEscape.convert(context1.name.toString())); + buffer.write('''
  8. '''); + } + if (context1.defaultCategory != null) { + var context3 = context1.defaultCategory; + for (var context4 in context3.publicLibrariesSorted) { + buffer.write(''' +
  9. '''); + buffer.write(context4.linkedName.toString()); + buffer.write('''
  10. '''); + } + } + for (var context5 in context1.categoriesWithPublicLibraries) { + buffer.write(''' +
  11. '''); + buffer.write(htmlEscape.convert(context5.name.toString())); + buffer.write('''
  12. '''); + for (var context6 in context5.publicLibrariesSorted) { + buffer.write(''' +
  13. '''); + buffer.write(context6.linkedName.toString()); + buffer.write('''
  14. '''); + } + } + } + buffer.write(''' +
+'''); + return buffer.toString(); +} + +String _renderIndex_partial_footer_5(PackageTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + '''); + buffer.write(htmlEscape.convert(context0.defaultPackage.name.toString())); + if (context0.hasFooterVersion == true) { + buffer.write('\n '); + buffer + .write(htmlEscape.convert(context0.defaultPackage.version.toString())); + } + buffer.write(''' + + + '''); + buffer.write(context0.customInnerFooter.toString()); + buffer.write(''' +
+ +'''); + buffer.write(''' + + + +'''); + buffer.write(context0.customFooter.toString()); + buffer.write(''' + + + + +'''); + return buffer.toString(); +} + +String renderLibrary(LibraryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderLibrary_partial_head_0(context0)); + buffer.write(''' + +
'''); + if (context0.self != null) { + var context1 = context0.self; + buffer.write(''' +
'''); + buffer.write(_renderLibrary_partial_source_link_1(context1, context0)); + buffer.write('''

'''); + buffer.write(context1.name.toString()); + buffer.write(''' '''); + buffer.write(htmlEscape.convert(context1.kind.toString())); + buffer.write(' '); + buffer.write(_renderLibrary_partial_feature_set_2(context1, context0)); + buffer.write(' '); + buffer.write(_renderLibrary_partial_categorization_3(context1, context0)); + buffer.write('''

'''); + } + buffer.writeln(); + if (context0.library != null) { + var context2 = context0.library; + buffer.write('\n '); + buffer.write(_renderLibrary_partial_documentation_4(context2, context0)); + } + buffer.writeln(); + if (context0.library != null) { + var context3 = context0.library; + if (context3.hasPublicClasses == true) { + buffer.write(''' +
+

Classes

+ +
'''); + if (context3.library != null) { + var context4 = context3.library; + for (var context5 in context4.publicClassesSorted) { + buffer.write('\n '); + buffer.write(_renderLibrary_partial_class_5( + context5, context4, context3, context0)); + } + } + buffer.write(''' +
+
'''); + } + } + buffer.writeln(); + if (context0.library != null) { + var context6 = context0.library; + if (context6.hasPublicMixins == true) { + buffer.write(''' +
+

Mixins

+ +
'''); + if (context6.library != null) { + var context7 = context6.library; + for (var context8 in context7.publicMixinsSorted) { + buffer.write('\n '); + buffer.write(_renderLibrary_partial_mixin_6( + context8, context7, context6, context0)); + } + } + buffer.write(''' +
+
'''); + } + } + buffer.writeln(); + if (context0.library != null) { + var context9 = context0.library; + if (context9.hasPublicExtensions == true) { + buffer.write(''' +
+

Extensions

+ +
'''); + if (context9.library != null) { + var context10 = context9.library; + for (var context11 in context10.publicExtensionsSorted) { + buffer.write('\n '); + buffer.write(_renderLibrary_partial_extension_7( + context11, context10, context9, context0)); + } + } + buffer.write(''' +
+
'''); + } + } + buffer.writeln(); + if (context0.library != null) { + var context12 = context0.library; + if (context12.hasPublicConstants == true) { + buffer.write(''' +
+

Constants

+ +
'''); + if (context12.library != null) { + var context13 = context12.library; + for (var context14 in context13.publicConstantsSorted) { + buffer.write('\n '); + buffer.write(_renderLibrary_partial_constant_8( + context14, context13, context12, context0)); + } + } + buffer.write(''' +
+
'''); + } + } + buffer.writeln(); + if (context0.library != null) { + var context15 = context0.library; + if (context15.hasPublicProperties == true) { + buffer.write(''' +
+

Properties

+ +
'''); + if (context15.library != null) { + var context16 = context15.library; + for (var context17 in context16.publicPropertiesSorted) { + buffer.write('\n '); + buffer.write(_renderLibrary_partial_property_9( + context17, context16, context15, context0)); + } + } + buffer.write(''' +
+
'''); + } + } + buffer.writeln(); + if (context0.library != null) { + var context18 = context0.library; + if (context18.hasPublicFunctions == true) { + buffer.write(''' +
+

Functions

+ +
'''); + if (context18.library != null) { + var context19 = context18.library; + for (var context20 in context19.publicFunctionsSorted) { + buffer.write('\n '); + buffer.write(_renderLibrary_partial_callable_10( + context20, context19, context18, context0)); + } + } + buffer.write(''' +
+
'''); + } + } + buffer.writeln(); + if (context0.library != null) { + var context21 = context0.library; + if (context21.hasPublicEnums == true) { + buffer.write(''' +
+

Enums

+ +
'''); + if (context21.library != null) { + var context22 = context21.library; + for (var context23 in context22.publicEnumsSorted) { + buffer.write('\n '); + buffer.write(_renderLibrary_partial_class_5( + context23, context22, context21, context0)); + } + } + buffer.write(''' +
+
'''); + } + } + buffer.writeln(); + if (context0.library != null) { + var context24 = context0.library; + if (context24.hasPublicTypedefs == true) { + buffer.write(''' +
+

Typedefs

+ +
'''); + if (context24.library != null) { + var context25 = context24.library; + for (var context26 in context25.publicTypedefsSorted) { + buffer.write('\n '); + buffer.write(_renderLibrary_partial_typedef_11( + context26, context25, context24, context0)); + } + } + buffer.write(''' +
+
'''); + } + } + buffer.writeln(); + if (context0.library != null) { + var context27 = context0.library; + if (context27.hasPublicExceptions == true) { + buffer.write(''' +
+

Exceptions / Errors

+ +
'''); + if (context27.library != null) { + var context28 = context27.library; + for (var context29 in context28.publicExceptionsSorted) { + buffer.write('\n '); + buffer.write(_renderLibrary_partial_class_5( + context29, context28, context27, context0)); + } + } + buffer.write(''' +
+
'''); + } + } + buffer.write(''' + +
+ + + + + +'''); + buffer.write(_renderLibrary_partial_footer_14(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderLibrary_partial_head_0(LibraryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(''' + + + + + '''); + if (context0.includeVersion == true) { + buffer.write(''' + '''); + } + buffer.write(''' + + '''); + buffer.write(htmlEscape.convert(context0.title.toString())); + buffer.write(''''''); + if (context0.relCanonicalPrefix != null) { + var context1 = context0.relCanonicalPrefix; + buffer.write(''' + '''); + } + buffer.writeln(); + if (context0.useBaseHref == true) { + if (context0.htmlBase != null) { + var context2 = context0.htmlBase; + buffer.write(''' + + '''); + } + } + buffer.write('\n\n '); + buffer.write(''' + + + + + + + + '''); + buffer.write(context0.customHeader.toString()); + buffer.write(''' + + +'''); + buffer.write(''' + + +
+ +
+ + +
'''); + buffer.write(htmlEscape.convert(context0.self.name.toString())); + buffer.write('''
+ +
+ +
+'''); + return buffer.toString(); +} + +String _renderLibrary_partial_source_link_1( + Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceHref == true) { + buffer.write(''' + '''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderLibrary_partial_feature_set_2( + Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatureSet == true) { + for (var context2 in context1.displayedLanguageFeatures) { + buffer.write('\n '); + buffer.write(context2.featureLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderLibrary_partial_categorization_3( + Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasCategoryNames == true) { + for (var context2 in context1.displayedCategories) { + buffer.write('\n '); + buffer.write(context2.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderLibrary_partial_documentation_4( + Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.write(''' +
+ '''); + buffer.write(context1.documentationAsHtml.toString()); + buffer.write(''' +
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderLibrary_partial_class_5(Class context3, Library context2, + Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context3.linkedName.toString()); + buffer.write(context3.linkedGenericParameters.toString()); + buffer.write(''' '''); + buffer.write(__renderLibrary_partial_class_5_partial_categorization_0( + context3, context2, context1, context0)); + buffer.write(''' +
+
+ '''); + buffer.write(context3.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context3.extendedDocLink.toString()); + buffer.write(''' +
+'''); + return buffer.toString(); +} + +String __renderLibrary_partial_class_5_partial_categorization_0(Class context3, + Library context2, Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasCategoryNames == true) { + for (var context4 in context3.displayedCategories) { + buffer.write('\n '); + buffer.write(context4.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderLibrary_partial_mixin_6(Mixin context3, Library context2, + Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context3.linkedName.toString()); + buffer.write(context3.linkedGenericParameters.toString()); + buffer.write(''' '''); + buffer.write(__renderLibrary_partial_mixin_6_partial_categorization_0( + context3, context2, context1, context0)); + buffer.write(''' +
+
+ '''); + buffer.write(context3.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context3.extendedDocLink.toString()); + buffer.write(''' +
+'''); + return buffer.toString(); +} + +String __renderLibrary_partial_mixin_6_partial_categorization_0(Mixin context3, + Library context2, Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasCategoryNames == true) { + for (var context4 in context3.displayedCategories) { + buffer.write('\n '); + buffer.write(context4.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderLibrary_partial_extension_7(Extension context3, Library context2, + Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context3.linkedName.toString()); + buffer.write(''' '''); + buffer.write(__renderLibrary_partial_extension_7_partial_categorization_0( + context3, context2, context1, context0)); + buffer.write(''' +
+
+ '''); + buffer.write(context3.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context3.extendedDocLink.toString()); + buffer.write(''' +
+ +'''); + return buffer.toString(); +} + +String __renderLibrary_partial_extension_7_partial_categorization_0( + Extension context3, + Library context2, + Library context1, + LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasCategoryNames == true) { + for (var context4 in context3.displayedCategories) { + buffer.write('\n '); + buffer.write(context4.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderLibrary_partial_constant_8(TopLevelVariable context3, + Library context2, Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context3.linkedName.toString()); + buffer.write(''' + → const '''); + buffer.write(context3.modelType.linkedName.toString()); + buffer.write(''' + '''); + buffer.write(__renderLibrary_partial_constant_8_partial_categorization_0( + context3, context2, context1, context0)); + buffer.write(''' +
+
+ '''); + buffer.write(context3.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context3.extendedDocLink.toString()); + buffer.write('\n '); + buffer.write(__renderLibrary_partial_constant_8_partial_features_1( + context3, context2, context1, context0)); + buffer.write(''' +
+ '''); + buffer.write(context3.constantValueTruncated.toString()); + buffer.write(''' +
+
+'''); + return buffer.toString(); +} + +String __renderLibrary_partial_constant_8_partial_categorization_0( + TopLevelVariable context3, + Library context2, + Library context1, + LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasCategoryNames == true) { + for (var context4 in context3.displayedCategories) { + buffer.write('\n '); + buffer.write(context4.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderLibrary_partial_constant_8_partial_features_1( + TopLevelVariable context3, + Library context2, + Library context1, + LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context3.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderLibrary_partial_property_9(TopLevelVariable context3, + Library context2, Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context3.linkedName.toString()); + buffer.write(''' + '''); + buffer.write(context3.arrow.toString()); + buffer.write(' '); + buffer.write(context3.modelType.linkedName.toString()); + buffer.write(''' '''); + buffer.write(__renderLibrary_partial_property_9_partial_categorization_0( + context3, context2, context1, context0)); + buffer.write(''' +
+ + '''); + buffer.write(context3.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context3.extendedDocLink.toString()); + buffer.write('\n '); + buffer.write(__renderLibrary_partial_property_9_partial_features_1( + context3, context2, context1, context0)); + buffer.write(''' + +'''); + return buffer.toString(); +} + +String __renderLibrary_partial_property_9_partial_categorization_0( + TopLevelVariable context3, + Library context2, + Library context1, + LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasCategoryNames == true) { + for (var context4 in context3.displayedCategories) { + buffer.write('\n '); + buffer.write(context4.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderLibrary_partial_property_9_partial_features_1( + TopLevelVariable context3, + Library context2, + Library context1, + LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context3.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderLibrary_partial_callable_10(ModelFunctionTyped context3, + Library context2, Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context3.linkedName.toString()); + buffer.write(''''''); + buffer.write(context3.linkedGenericParameters.toString()); + buffer.write('''('''); + buffer.write(context3.linkedParamsNoMetadata.toString()); + buffer.write(''') + → '''); + buffer.write(context3.modelType.returnType.linkedName.toString()); + buffer.write(''' + + '''); + buffer.write(__renderLibrary_partial_callable_10_partial_categorization_0( + context3, context2, context1, context0)); + buffer.write(''' +
+ + '''); + buffer.write(context3.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context3.extendedDocLink.toString()); + buffer.write('\n '); + buffer.write(__renderLibrary_partial_callable_10_partial_features_1( + context3, context2, context1, context0)); + buffer.write(''' + +'''); + return buffer.toString(); +} + +String __renderLibrary_partial_callable_10_partial_categorization_0( + ModelFunctionTyped context3, + Library context2, + Library context1, + LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasCategoryNames == true) { + for (var context4 in context3.displayedCategories) { + buffer.write('\n '); + buffer.write(context4.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderLibrary_partial_callable_10_partial_features_1( + ModelFunctionTyped context3, + Library context2, + Library context1, + LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context3.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderLibrary_partial_typedef_11(Typedef context3, Library context2, + Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.isCallable == true) { + if (context3.asCallable != null) { + var context4 = context3.asCallable; + buffer.write('\n '); + buffer.write(__renderLibrary_partial_typedef_11_partial_callable_0( + context4, context3, context2, context1, context0)); + } + } + if (context3.isCallable != true) { + buffer.write('\n '); + buffer.write(__renderLibrary_partial_typedef_11_partial_type_1( + context3, context2, context1, context0)); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderLibrary_partial_typedef_11_partial_callable_0( + FunctionTypedef context4, + Typedef context3, + Library context2, + Library context1, + LibraryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context4.linkedName.toString()); + buffer.write(''''''); + buffer.write(context4.linkedGenericParameters.toString()); + buffer.write('''('''); + buffer.write(context4.linkedParamsNoMetadata.toString()); + buffer.write(''') + → '''); + buffer.write(context4.modelType.returnType.linkedName.toString()); + buffer.write(''' + + '''); + buffer.write( + ___renderLibrary_partial_typedef_11_partial_callable_0_partial_categorization_0( + context4, context3, context2, context1, context0)); + buffer.write(''' +
+ + '''); + buffer.write(context4.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context4.extendedDocLink.toString()); + buffer.write('\n '); + buffer.write( + ___renderLibrary_partial_typedef_11_partial_callable_0_partial_features_1( + context4, context3, context2, context1, context0)); + buffer.write(''' + +'''); + return buffer.toString(); +} + +String + ___renderLibrary_partial_typedef_11_partial_callable_0_partial_categorization_0( + FunctionTypedef context4, + Typedef context3, + Library context2, + Library context1, + LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context4.hasCategoryNames == true) { + for (var context5 in context4.displayedCategories) { + buffer.write('\n '); + buffer.write(context5.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String + ___renderLibrary_partial_typedef_11_partial_callable_0_partial_features_1( + FunctionTypedef context4, + Typedef context3, + Library context2, + Library context1, + LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context4.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context4.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderLibrary_partial_typedef_11_partial_type_1(Typedef context3, + Library context2, Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context3.linkedName.toString()); + buffer.write(''''''); + buffer.write(context3.linkedGenericParameters.toString()); + buffer.write(''' + = '''); + buffer.write(context3.modelType.linkedName.toString()); + buffer.write(''' + + '''); + buffer.write( + ___renderLibrary_partial_typedef_11_partial_type_1_partial_categorization_0( + context3, context2, context1, context0)); + buffer.write(''' +
+ + '''); + buffer.write(context3.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context3.extendedDocLink.toString()); + buffer.write('\n '); + buffer.write( + ___renderLibrary_partial_typedef_11_partial_type_1_partial_features_1( + context3, context2, context1, context0)); + buffer.write(''' + +'''); + return buffer.toString(); +} + +String + ___renderLibrary_partial_typedef_11_partial_type_1_partial_categorization_0( + Typedef context3, + Library context2, + Library context1, + LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasCategoryNames == true) { + for (var context4 in context3.displayedCategories) { + buffer.write('\n '); + buffer.write(context4.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String ___renderLibrary_partial_typedef_11_partial_type_1_partial_features_1( + Typedef context3, + Library context2, + Library context1, + LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context3.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderLibrary_partial_search_sidebar_12(LibraryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + + +'''); + return buffer.toString(); +} + +String _renderLibrary_partial_packages_13(LibraryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
    '''); + for (var context1 in context0.localPackages) { + if (context1.isFirstPackage == true) { + if (context1.hasDocumentedCategories == true) { + buffer.write(''' +
  1. Topics
  2. '''); + for (var context2 in context1.documentedCategoriesSorted) { + buffer.write(''' +
  3. '''); + buffer.write(context2.linkedName.toString()); + buffer.write('''
  4. '''); + } + } + buffer.write(''' +
  5. Libraries
  6. '''); + } + if (context1.isFirstPackage != true) { + buffer.write(''' +
  7. '''); + buffer.write(htmlEscape.convert(context1.name.toString())); + buffer.write('''
  8. '''); + } + if (context1.defaultCategory != null) { + var context3 = context1.defaultCategory; + for (var context4 in context3.publicLibrariesSorted) { + buffer.write(''' +
  9. '''); + buffer.write(context4.linkedName.toString()); + buffer.write('''
  10. '''); + } + } + for (var context5 in context1.categoriesWithPublicLibraries) { + buffer.write(''' +
  11. '''); + buffer.write(htmlEscape.convert(context5.name.toString())); + buffer.write('''
  12. '''); + for (var context6 in context5.publicLibrariesSorted) { + buffer.write(''' +
  13. '''); + buffer.write(context6.linkedName.toString()); + buffer.write('''
  14. '''); + } + } + } + buffer.write(''' +
+'''); + return buffer.toString(); +} + +String _renderLibrary_partial_footer_14(LibraryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + '''); + buffer.write(htmlEscape.convert(context0.defaultPackage.name.toString())); + if (context0.hasFooterVersion == true) { + buffer.write('\n '); + buffer + .write(htmlEscape.convert(context0.defaultPackage.version.toString())); + } + buffer.write(''' + + + '''); + buffer.write(context0.customInnerFooter.toString()); + buffer.write(''' +
+ +'''); + buffer.write(''' + + + +'''); + buffer.write(context0.customFooter.toString()); + buffer.write(''' + + + + +'''); + return buffer.toString(); +} + +String renderMethod(MethodTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderMethod_partial_head_0(context0)); + buffer.write(''' + +
'''); + if (context0.self != null) { + var context1 = context0.self; + buffer.write(''' +
'''); + buffer.write(_renderMethod_partial_source_link_1(context1, context0)); + buffer.write('''

'''); + buffer.write(context1.nameWithGenerics.toString()); + buffer.write(''' '''); + buffer.write(htmlEscape.convert(context1.kind.toString())); + buffer.write(' '); + buffer.write(_renderMethod_partial_feature_set_2(context1, context0)); + buffer.write('''

'''); + } + buffer.writeln(); + if (context0.method != null) { + var context2 = context0.method; + buffer.write(''' +
+ '''); + buffer + .write(_renderMethod_partial_callable_multiline_3(context2, context0)); + buffer.write('\n '); + buffer.write(_renderMethod_partial_features_4(context2, context0)); + buffer.write(''' +
+ '''); + buffer.write(_renderMethod_partial_documentation_5(context2, context0)); + buffer.write('\n\n '); + buffer.write(_renderMethod_partial_source_code_6(context2, context0)); + buffer.writeln(); + } + buffer.write(''' +
+ + + + + +'''); + buffer.write(_renderMethod_partial_footer_8(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderMethod_partial_head_0(MethodTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(''' + + + + + '''); + if (context0.includeVersion == true) { + buffer.write(''' + '''); + } + buffer.write(''' + + '''); + buffer.write(htmlEscape.convert(context0.title.toString())); + buffer.write(''''''); + if (context0.relCanonicalPrefix != null) { + var context1 = context0.relCanonicalPrefix; + buffer.write(''' + '''); + } + buffer.writeln(); + if (context0.useBaseHref == true) { + if (context0.htmlBase != null) { + var context2 = context0.htmlBase; + buffer.write(''' + + '''); + } + } + buffer.write('\n\n '); + buffer.write(''' + + + + + + + + '''); + buffer.write(context0.customHeader.toString()); + buffer.write(''' + + +'''); + buffer.write(''' + + +
+ +
+ + +
'''); + buffer.write(htmlEscape.convert(context0.self.name.toString())); + buffer.write('''
+ +
+ +
+'''); + return buffer.toString(); +} + +String _renderMethod_partial_source_link_1( + Method context1, MethodTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceHref == true) { + buffer.write(''' + '''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderMethod_partial_feature_set_2( + Method context1, MethodTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatureSet == true) { + for (var context2 in context1.displayedLanguageFeatures) { + buffer.write('\n '); + buffer.write(context2.featureLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderMethod_partial_callable_multiline_3( + Method context1, MethodTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasAnnotations == true) { + buffer.write(''' +
+
    '''); + for (var context2 in context1.annotations) { + buffer.write(''' +
  1. '''); + buffer.write(context2.linkedNameWithParameters.toString()); + buffer.write('''
  2. '''); + } + buffer.write(''' +
+
'''); + } + buffer.write(''' + +'''); + buffer.write(context1.modelType.returnType.linkedName.toString()); + buffer.write(''' +'''); + buffer.write( + __renderMethod_partial_callable_multiline_3_partial_name_summary_0( + context1, context0)); + buffer.write(context1.genericParameters.toString()); + buffer.write('''('''); + if (context1.hasParameters == true) { + buffer.write(context1.linkedParamsLines.toString()); + } + buffer.write(''') +'''); + return buffer.toString(); +} + +String __renderMethod_partial_callable_multiline_3_partial_name_summary_0( + Method context1, MethodTemplateData context0) { + final buffer = StringBuffer(); + if (context1.isConst == true) { + buffer.write('''const '''); + } + buffer.write(''''''); + buffer.write(htmlEscape.convert(context1.name.toString())); + buffer.write(''''''); + return buffer.toString(); +} + +String _renderMethod_partial_features_4( + Method context1, MethodTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context1.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderMethod_partial_documentation_5( + Method context1, MethodTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.write(''' +
+ '''); + buffer.write(context1.documentationAsHtml.toString()); + buffer.write(''' +
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderMethod_partial_source_code_6( + Method context1, MethodTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceCode == true) { + buffer.write(''' +
+

Implementation

+
''');
+    buffer.write(context1.sourceCode.toString());
+    buffer.write('''
+
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderMethod_partial_search_sidebar_7(MethodTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + + +'''); + return buffer.toString(); +} + +String _renderMethod_partial_footer_8(MethodTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + '''); + buffer.write(htmlEscape.convert(context0.defaultPackage.name.toString())); + if (context0.hasFooterVersion == true) { + buffer.write('\n '); + buffer + .write(htmlEscape.convert(context0.defaultPackage.version.toString())); + } + buffer.write(''' + + + '''); + buffer.write(context0.customInnerFooter.toString()); + buffer.write(''' +
+ +'''); + buffer.write(''' + + + +'''); + buffer.write(context0.customFooter.toString()); + buffer.write(''' + + + + +'''); + return buffer.toString(); +} + +String renderMixin(MixinTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderMixin_partial_head_0(context0)); + buffer.write(''' + +
'''); + if (context0.self != null) { + var context1 = context0.self; + buffer.write(''' +
'''); + buffer.write(_renderMixin_partial_source_link_1(context1, context0)); + buffer.write('''

'''); + buffer.write(context1.nameWithGenerics.toString()); + buffer.write(''' '''); + buffer.write(htmlEscape.convert(context1.kind.toString())); + buffer.write(' '); + buffer.write(_renderMixin_partial_feature_set_2(context1, context0)); + buffer.write(' '); + buffer.write(_renderMixin_partial_categorization_3(context1, context0)); + buffer.write('''

'''); + } + buffer.writeln(); + if (context0.mixin != null) { + var context2 = context0.mixin; + buffer.write('\n '); + buffer.write(_renderMixin_partial_documentation_4(context2, context0)); + buffer.writeln(); + if (context2.hasModifiers == true) { + buffer.write(''' +
+
'''); + if (context2.hasPublicSuperclassConstraints == true) { + buffer.write(''' +
Superclass Constraints
+
    '''); + for (var context3 in context2.publicSuperclassConstraints) { + buffer.write(''' +
  • '''); + buffer.write(context3.linkedName.toString()); + buffer.write('''
  • '''); + } + buffer.write(''' +
'''); + } + buffer.writeln(); + if (context2.hasPublicSuperChainReversed == true) { + buffer.write(''' +
Inheritance
+
    +
  • '''); + buffer.write(context0.linkedObjectType.toString()); + buffer.write('''
  • '''); + for (var context4 in context2.publicSuperChainReversed) { + buffer.write(''' +
  • '''); + buffer.write(context4.linkedName.toString()); + buffer.write('''
  • '''); + } + buffer.write(''' +
  • '''); + buffer.write(context2.name.toString()); + buffer.write('''
  • +
'''); + } + buffer.writeln(); + if (context2.hasPublicInterfaces == true) { + buffer.write(''' +
Implements
+
+
    '''); + for (var context5 in context2.publicInterfaces) { + buffer.write(''' +
  • '''); + buffer.write(context5.linkedName.toString()); + buffer.write('''
  • '''); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicMixedInTypes == true) { + buffer.write(''' +
Mixes-in
+
    '''); + for (var context6 in context2.publicMixedInTypes) { + buffer.write(''' +
  • '''); + buffer.write(context6.linkedName.toString()); + buffer.write('''
  • '''); + } + buffer.write(''' +
'''); + } + buffer.writeln(); + if (context2.hasPublicImplementors == true) { + buffer.write(''' +
Implemented by
+
    '''); + for (var context7 in context2.publicImplementorsSorted) { + buffer.write(''' +
  • '''); + buffer.write(context7.linkedName.toString()); + buffer.write('''
  • '''); + } + buffer.write(''' +
'''); + } + buffer.writeln(); + if (context2.hasAnnotations == true) { + buffer.write(''' +
Annotations
+
    '''); + for (var context8 in context2.annotations) { + buffer.write(''' +
  • '''); + buffer.write(context8.linkedNameWithParameters.toString()); + buffer.write('''
  • '''); + } + buffer.write(''' +
'''); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicConstructors == true) { + buffer.write(''' +
+

Constructors

+ +
'''); + for (var context9 in context2.publicConstructorsSorted) { + buffer.write(''' +
+ '''); + buffer.write(context9.linkedName.toString()); + buffer.write('''('''); + buffer.write(context9.linkedParams.toString()); + buffer.write(''') +
+
+ '''); + buffer.write(context9.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context9.extendedDocLink.toString()); + if (context9.isConst == true) { + buffer.write(''' +
const
'''); + } + if (context9.isFactory == true) { + buffer.write(''' +
factory
'''); + } + buffer.write(''' +
'''); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicInstanceFields == true) { + buffer.write(''' +
+

Properties

+ +
'''); + for (var context10 in context2.publicInstanceFields) { + buffer.write('\n '); + buffer.write( + _renderMixin_partial_property_5(context10, context2, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicInstanceMethods == true) { + buffer.write(''' +
+

Methods

+
'''); + for (var context11 in context2.publicInstanceMethods) { + buffer.write('\n '); + buffer.write( + _renderMixin_partial_callable_6(context11, context2, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicInstanceOperators == true) { + buffer.write(''' +
+

Operators

+
'''); + for (var context12 in context2.publicInstanceOperatorsSorted) { + buffer.write('\n '); + buffer.write( + _renderMixin_partial_callable_6(context12, context2, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicVariableStaticFields == true) { + buffer.write(''' +
+

Static Properties

+ +
'''); + for (var context13 in context2.publicVariableStaticFieldsSorted) { + buffer.write('\n '); + buffer.write( + _renderMixin_partial_property_5(context13, context2, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicStaticMethods == true) { + buffer.write(''' +
+

Static Methods

+
'''); + for (var context14 in context2.publicStaticMethods) { + buffer.write('\n '); + buffer.write( + _renderMixin_partial_callable_6(context14, context2, context0)); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + if (context2.hasPublicConstantFields == true) { + buffer.write(''' +
+

Constants

+ +
'''); + for (var context15 in context2.publicConstantFieldsSorted) { + buffer.write('\n '); + buffer.write( + _renderMixin_partial_constant_7(context15, context2, context0)); + } + buffer.write(''' +
+
'''); + } + } + buffer.write(''' +
+ + + + + +'''); + buffer.write(_renderMixin_partial_footer_9(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderMixin_partial_head_0(MixinTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(''' + + + + + '''); + if (context0.includeVersion == true) { + buffer.write(''' + '''); + } + buffer.write(''' + + '''); + buffer.write(htmlEscape.convert(context0.title.toString())); + buffer.write(''''''); + if (context0.relCanonicalPrefix != null) { + var context1 = context0.relCanonicalPrefix; + buffer.write(''' + '''); + } + buffer.writeln(); + if (context0.useBaseHref == true) { + if (context0.htmlBase != null) { + var context2 = context0.htmlBase; + buffer.write(''' + + '''); + } + } + buffer.write('\n\n '); + buffer.write(''' + + + + + + + + '''); + buffer.write(context0.customHeader.toString()); + buffer.write(''' + + +'''); + buffer.write(''' + + +
+ +
+ + +
'''); + buffer.write(htmlEscape.convert(context0.self.name.toString())); + buffer.write('''
+ +
+ +
+'''); + return buffer.toString(); +} + +String _renderMixin_partial_source_link_1( + Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceHref == true) { + buffer.write(''' + '''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderMixin_partial_feature_set_2( + Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatureSet == true) { + for (var context2 in context1.displayedLanguageFeatures) { + buffer.write('\n '); + buffer.write(context2.featureLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderMixin_partial_categorization_3( + Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasCategoryNames == true) { + for (var context2 in context1.displayedCategories) { + buffer.write('\n '); + buffer.write(context2.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderMixin_partial_documentation_4( + Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.write(''' +
+ '''); + buffer.write(context1.documentationAsHtml.toString()); + buffer.write(''' +
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderMixin_partial_property_5( + Field context2, Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context2.linkedName.toString()); + buffer.write(''' + '''); + buffer.write(context2.arrow.toString()); + buffer.write(' '); + buffer.write(context2.modelType.linkedName.toString()); + buffer.write(''' '''); + buffer.write(__renderMixin_partial_property_5_partial_categorization_0( + context2, context1, context0)); + buffer.write(''' +
+ + '''); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write('\n '); + buffer.write(__renderMixin_partial_property_5_partial_features_1( + context2, context1, context0)); + buffer.write(''' + +'''); + return buffer.toString(); +} + +String __renderMixin_partial_property_5_partial_categorization_0( + Field context2, Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + for (var context3 in context2.displayedCategories) { + buffer.write('\n '); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderMixin_partial_property_5_partial_features_1( + Field context2, Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderMixin_partial_callable_6( + Method context2, Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context2.linkedName.toString()); + buffer.write(''''''); + buffer.write(context2.linkedGenericParameters.toString()); + buffer.write('''('''); + buffer.write(context2.linkedParamsNoMetadata.toString()); + buffer.write(''') + → '''); + buffer.write(context2.modelType.returnType.linkedName.toString()); + buffer.write(''' + + '''); + buffer.write(__renderMixin_partial_callable_6_partial_categorization_0( + context2, context1, context0)); + buffer.write(''' +
+ + '''); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write('\n '); + buffer.write(__renderMixin_partial_callable_6_partial_features_1( + context2, context1, context0)); + buffer.write(''' + +'''); + return buffer.toString(); +} + +String __renderMixin_partial_callable_6_partial_categorization_0( + Method context2, Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + for (var context3 in context2.displayedCategories) { + buffer.write('\n '); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderMixin_partial_callable_6_partial_features_1( + Method context2, Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderMixin_partial_constant_7( + Field context2, Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ '''); + buffer.write(context2.linkedName.toString()); + buffer.write(''' + → const '''); + buffer.write(context2.modelType.linkedName.toString()); + buffer.write(''' + '''); + buffer.write(__renderMixin_partial_constant_7_partial_categorization_0( + context2, context1, context0)); + buffer.write(''' +
+
+ '''); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write('\n '); + buffer.write(__renderMixin_partial_constant_7_partial_features_1( + context2, context1, context0)); + buffer.write(''' +
+ '''); + buffer.write(context2.constantValueTruncated.toString()); + buffer.write(''' +
+
+'''); + return buffer.toString(); +} + +String __renderMixin_partial_constant_7_partial_categorization_0( + Field context2, Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + for (var context3 in context2.displayedCategories) { + buffer.write('\n '); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderMixin_partial_constant_7_partial_features_1( + Field context2, Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderMixin_partial_search_sidebar_8(MixinTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + + +'''); + return buffer.toString(); +} + +String _renderMixin_partial_footer_9(MixinTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + '''); + buffer.write(htmlEscape.convert(context0.defaultPackage.name.toString())); + if (context0.hasFooterVersion == true) { + buffer.write('\n '); + buffer + .write(htmlEscape.convert(context0.defaultPackage.version.toString())); + } + buffer.write(''' + + + '''); + buffer.write(context0.customInnerFooter.toString()); + buffer.write(''' +
+ +'''); + buffer.write(''' + + + +'''); + buffer.write(context0.customFooter.toString()); + buffer.write(''' + + + + +'''); + return buffer.toString(); +} + +String renderProperty(PropertyTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderProperty_partial_head_0(context0)); + buffer.write(''' + +
'''); + if (context0.self != null) { + var context1 = context0.self; + buffer.write(''' +
'''); + buffer.write(_renderProperty_partial_source_link_1(context1, context0)); + buffer.write('''

'''); + buffer.write(htmlEscape.convert(context1.name.toString())); + buffer.write(''' '''); + buffer.write(htmlEscape.convert(context1.kind.toString())); + buffer.write(' '); + buffer.write(_renderProperty_partial_feature_set_2(context1, context0)); + buffer.write('''

'''); + } + buffer.writeln(); + if (context0.self != null) { + var context2 = context0.self; + if (context2.hasNoGetterSetter == true) { + buffer.write(''' +
+ '''); + buffer.write(context2.modelType.linkedName.toString()); + buffer.write('\n '); + buffer.write(_renderProperty_partial_name_summary_3(context2, context0)); + buffer.write('\n '); + buffer.write(_renderProperty_partial_features_4(context2, context0)); + buffer.write(''' +
+ '''); + buffer.write(_renderProperty_partial_documentation_5(context2, context0)); + buffer.write('\n '); + buffer.write(_renderProperty_partial_source_code_6(context2, context0)); + } + buffer.writeln(); + if (context2.hasGetterOrSetter == true) { + if (context2.hasGetter == true) { + buffer.write('\n '); + buffer.write( + _renderProperty_partial_accessor_getter_7(context2, context0)); + } + buffer.writeln(); + if (context2.hasSetter == true) { + buffer.write('\n '); + buffer.write( + _renderProperty_partial_accessor_setter_8(context2, context0)); + } + } + } + buffer.write(''' +
+ + + + + +'''); + buffer.write(_renderProperty_partial_footer_10(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderProperty_partial_head_0(PropertyTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(''' + + + + + '''); + if (context0.includeVersion == true) { + buffer.write(''' + '''); + } + buffer.write(''' + + '''); + buffer.write(htmlEscape.convert(context0.title.toString())); + buffer.write(''''''); + if (context0.relCanonicalPrefix != null) { + var context1 = context0.relCanonicalPrefix; + buffer.write(''' + '''); + } + buffer.writeln(); + if (context0.useBaseHref == true) { + if (context0.htmlBase != null) { + var context2 = context0.htmlBase; + buffer.write(''' + + '''); + } + } + buffer.write('\n\n '); + buffer.write(''' + + + + + + + + '''); + buffer.write(context0.customHeader.toString()); + buffer.write(''' + + +'''); + buffer.write(''' + + +
+ +
+ + +
'''); + buffer.write(htmlEscape.convert(context0.self.name.toString())); + buffer.write('''
+ +
+ +
+'''); + return buffer.toString(); +} + +String _renderProperty_partial_source_link_1( + Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceHref == true) { + buffer.write(''' + '''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderProperty_partial_feature_set_2( + Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatureSet == true) { + for (var context2 in context1.displayedLanguageFeatures) { + buffer.write('\n '); + buffer.write(context2.featureLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderProperty_partial_name_summary_3( + Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.isConst == true) { + buffer.write('''const '''); + } + buffer.write(''''''); + buffer.write(htmlEscape.convert(context1.name.toString())); + buffer.write(''''''); + return buffer.toString(); +} + +String _renderProperty_partial_features_4( + Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context1.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderProperty_partial_documentation_5( + Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.write(''' +
+ '''); + buffer.write(context1.documentationAsHtml.toString()); + buffer.write(''' +
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderProperty_partial_source_code_6( + Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceCode == true) { + buffer.write(''' +
+

Implementation

+
''');
+    buffer.write(context1.sourceCode.toString());
+    buffer.write('''
+
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderProperty_partial_accessor_getter_7( + Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.getter != null) { + var context2 = context1.getter; + buffer.write(''' +
+ +
+ '''); + buffer.write(context2.modelType.returnType.linkedName.toString()); + buffer.write(''' + '''); + buffer.write( + __renderProperty_partial_accessor_getter_7_partial_name_summary_0( + context2, context1, context0)); + buffer.write('\n '); + buffer.write(__renderProperty_partial_accessor_getter_7_partial_features_1( + context2, context1, context0)); + buffer.write(''' +
+ +'''); + buffer.write( + __renderProperty_partial_accessor_getter_7_partial_documentation_2( + context2, context1, context0)); + buffer.writeln(); + buffer.write( + __renderProperty_partial_accessor_getter_7_partial_source_code_3( + context2, context1, context0)); + buffer.write(''' +
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderProperty_partial_accessor_getter_7_partial_name_summary_0( + ContainerAccessor context2, Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.isConst == true) { + buffer.write('''const '''); + } + buffer.write(''''''); + buffer.write(htmlEscape.convert(context2.name.toString())); + buffer.write(''''''); + return buffer.toString(); +} + +String __renderProperty_partial_accessor_getter_7_partial_features_1( + ContainerAccessor context2, Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderProperty_partial_accessor_getter_7_partial_documentation_2( + ContainerAccessor context2, Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasDocumentation == true) { + buffer.write(''' +
+ '''); + buffer.write(context2.documentationAsHtml.toString()); + buffer.write(''' +
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderProperty_partial_accessor_getter_7_partial_source_code_3( + ContainerAccessor context2, Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasSourceCode == true) { + buffer.write(''' +
+

Implementation

+
''');
+    buffer.write(context2.sourceCode.toString());
+    buffer.write('''
+
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderProperty_partial_accessor_setter_8( + Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.setter != null) { + var context2 = context1.setter; + buffer.write(''' +
+ +
+ void + '''); + buffer.write( + __renderProperty_partial_accessor_setter_8_partial_name_summary_0( + context2, context1, context0)); + buffer.write('''('''); + buffer.write(context2.linkedParamsNoMetadata.toString()); + buffer.write(''') + '''); + buffer.write(__renderProperty_partial_accessor_setter_8_partial_features_1( + context2, context1, context0)); + buffer.write(''' +
+ +'''); + buffer.write( + __renderProperty_partial_accessor_setter_8_partial_documentation_2( + context2, context1, context0)); + buffer.writeln(); + buffer.write( + __renderProperty_partial_accessor_setter_8_partial_source_code_3( + context2, context1, context0)); + buffer.write(''' +
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderProperty_partial_accessor_setter_8_partial_name_summary_0( + ContainerAccessor context2, Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.isConst == true) { + buffer.write('''const '''); + } + buffer.write(''''''); + buffer.write(htmlEscape.convert(context2.name.toString())); + buffer.write(''''''); + return buffer.toString(); +} + +String __renderProperty_partial_accessor_setter_8_partial_features_1( + ContainerAccessor context2, Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderProperty_partial_accessor_setter_8_partial_documentation_2( + ContainerAccessor context2, Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasDocumentation == true) { + buffer.write(''' +
+ '''); + buffer.write(context2.documentationAsHtml.toString()); + buffer.write(''' +
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderProperty_partial_accessor_setter_8_partial_source_code_3( + ContainerAccessor context2, Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasSourceCode == true) { + buffer.write(''' +
+

Implementation

+
''');
+    buffer.write(context2.sourceCode.toString());
+    buffer.write('''
+
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderProperty_partial_search_sidebar_9(PropertyTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + + +'''); + return buffer.toString(); +} + +String _renderProperty_partial_footer_10(PropertyTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + '''); + buffer.write(htmlEscape.convert(context0.defaultPackage.name.toString())); + if (context0.hasFooterVersion == true) { + buffer.write('\n '); + buffer + .write(htmlEscape.convert(context0.defaultPackage.version.toString())); + } + buffer.write(''' + + + '''); + buffer.write(context0.customInnerFooter.toString()); + buffer.write(''' +
+ +'''); + buffer.write(''' + + + +'''); + buffer.write(context0.customFooter.toString()); + buffer.write(''' + + + + +'''); + return buffer.toString(); +} + +String renderSidebarForContainer( + TemplateDataWithContainer context0) { + final buffer = StringBuffer(); + buffer.write('''
    '''); + if (context0.container != null) { + var context1 = context0.container; + buffer.writeln(); + if (context1.isClass == true) { + if (context1.hasPublicConstructors == true) { + buffer.write(''' +
  1. Constructors
  2. '''); + for (var context2 in context1.publicConstructorsSorted) { + buffer.write(''' +
  3. '''); + buffer.write(htmlEscape.convert(context2.shortName.toString())); + buffer.write('''
  4. '''); + } + } + } + buffer.writeln(); + if (context1.isEnum == true) { + if (context1.hasPublicConstantFields == true) { + buffer.write(''' +
  5. Constants
  6. '''); + for (var context3 in context1.publicConstantFieldsSorted) { + buffer.write(''' +
  7. '''); + buffer.write(context3.linkedName.toString()); + buffer.write('''
  8. '''); + } + } + } + buffer.writeln(); + if (context1.isClassOrEnum == true) { + if (context1.hasPublicInstanceFields == true) { + buffer.write(''' +
  9. + Properties +
  10. '''); + for (var context4 in context1.publicInstanceFieldsSorted) { + buffer.write(''' + '''); + buffer.write(context4.linkedName.toString()); + buffer.write(''''''); + } + } + buffer.writeln(); + if (context1.hasPublicInstanceMethods == true) { + buffer.write(''' +
  11. Methods
  12. '''); + for (var context5 in context1.publicInstanceMethodsSorted) { + buffer.write(''' + '''); + buffer.write(context5.linkedName.toString()); + buffer.write(''''''); + } + } + buffer.writeln(); + if (context1.hasPublicInstanceOperators == true) { + buffer.write(''' +
  13. Operators
  14. '''); + for (var context6 in context1.publicInstanceOperatorsSorted) { + buffer.write(''' + '''); + buffer.write(context6.linkedName.toString()); + buffer.write(''''''); + } + } + } + buffer.writeln(); + if (context1.isExtension == true) { + if (context1.hasPublicInstanceFields == true) { + buffer.write(''' +
  15. Properties +
  16. '''); + for (var context7 in context1.publicInstanceFieldsSorted) { + buffer.write(''' +
  17. '''); + buffer.write(context7.linkedName.toString()); + buffer.write('''
  18. '''); + } + } + buffer.writeln(); + if (context1.hasPublicInstanceMethods == true) { + buffer.write(''' +
  19. Methods
  20. '''); + for (var context8 in context1.publicInstanceMethodsSorted) { + buffer.write(''' +
  21. '''); + buffer.write(context8.linkedName.toString()); + buffer.write('''
  22. '''); + } + } + buffer.writeln(); + if (context1.hasPublicInstanceOperators == true) { + buffer.write(''' +
  23. Operators
  24. '''); + for (var context9 in context1.publicInstanceOperatorsSorted) { + buffer.write(''' +
  25. '''); + buffer.write(context9.linkedName.toString()); + buffer.write('''
  26. '''); + } + } + } + buffer.writeln(); + if (context1.isClassOrExtension == true) { + if (context1.hasPublicVariableStaticFields == true) { + buffer.write(''' +
  27. Static properties
  28. '''); + for (var context10 in context1.publicVariableStaticFieldsSorted) { + buffer.write(''' +
  29. '''); + buffer.write(context10.linkedName.toString()); + buffer.write('''
  30. '''); + } + } + buffer.writeln(); + if (context1.hasPublicStaticMethods == true) { + buffer.write(''' +
  31. Static methods
  32. '''); + for (var context11 in context1.publicStaticMethodsSorted) { + buffer.write(''' +
  33. '''); + buffer.write(context11.linkedName.toString()); + buffer.write('''
  34. '''); + } + } + buffer.writeln(); + if (context1.hasPublicConstantFields == true) { + buffer.write(''' +
  35. Constants
  36. '''); + for (var context12 in context1.publicConstantFieldsSorted) { + buffer.write(''' +
  37. '''); + buffer.write(context12.linkedName.toString()); + buffer.write('''
  38. '''); + } + } + } + } + buffer.write(''' +
+'''); + return buffer.toString(); +} + +String renderSidebarForLibrary( + TemplateDataWithLibrary context0) { + final buffer = StringBuffer(); + buffer.write('''
    '''); + if (context0.library != null) { + var context1 = context0.library; + if (context1.hasPublicClasses == true) { + buffer.write(''' +
  1. Classes
  2. '''); + for (var context2 in context1.publicClassesSorted) { + buffer.write(''' +
  3. '''); + buffer.write(context2.linkedName.toString()); + buffer.write('''
  4. '''); + } + } + buffer.writeln(); + if (context1.hasPublicExtensions == true) { + buffer.write(''' +
  5. Extensions
  6. '''); + for (var context3 in context1.publicExtensionsSorted) { + buffer.write(''' +
  7. '''); + buffer.write(context3.linkedName.toString()); + buffer.write('''
  8. '''); + } + } + buffer.writeln(); + if (context1.hasPublicMixins == true) { + buffer.write(''' +
  9. Mixins
  10. '''); + for (var context4 in context1.publicMixinsSorted) { + buffer.write(''' +
  11. '''); + buffer.write(context4.linkedName.toString()); + buffer.write('''
  12. '''); + } + } + buffer.writeln(); + if (context1.hasPublicConstants == true) { + buffer.write(''' +
  13. Constants
  14. '''); + for (var context5 in context1.publicConstantsSorted) { + buffer.write(''' +
  15. '''); + buffer.write(context5.linkedName.toString()); + buffer.write('''
  16. '''); + } + } + buffer.writeln(); + if (context1.hasPublicProperties == true) { + buffer.write(''' +
  17. Properties
  18. '''); + for (var context6 in context1.publicPropertiesSorted) { + buffer.write(''' +
  19. '''); + buffer.write(context6.linkedName.toString()); + buffer.write('''
  20. '''); + } + } + buffer.writeln(); + if (context1.hasPublicFunctions == true) { + buffer.write(''' +
  21. Functions
  22. '''); + for (var context7 in context1.publicFunctionsSorted) { + buffer.write(''' +
  23. '''); + buffer.write(context7.linkedName.toString()); + buffer.write('''
  24. '''); + } + } + buffer.writeln(); + if (context1.hasPublicEnums == true) { + buffer.write(''' +
  25. Enums
  26. '''); + for (var context8 in context1.publicEnumsSorted) { + buffer.write(''' +
  27. '''); + buffer.write(context8.linkedName.toString()); + buffer.write('''
  28. '''); + } + } + buffer.writeln(); + if (context1.hasPublicTypedefs == true) { + buffer.write(''' +
  29. Typedefs
  30. '''); + for (var context9 in context1.publicTypedefsSorted) { + buffer.write(''' +
  31. '''); + buffer.write(context9.linkedName.toString()); + buffer.write('''
  32. '''); + } + } + buffer.writeln(); + if (context1.hasPublicExceptions == true) { + buffer.write(''' +
  33. Exceptions
  34. '''); + for (var context10 in context1.publicExceptionsSorted) { + buffer.write(''' +
  35. '''); + buffer.write(context10.linkedName.toString()); + buffer.write('''
  36. '''); + } + } + } + buffer.write(''' +
+'''); + return buffer.toString(); +} + +String renderTopLevelProperty(TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderTopLevelProperty_partial_head_0(context0)); + buffer.write(''' + +
'''); + if (context0.self != null) { + var context1 = context0.self; + buffer.write(''' +
'''); + buffer.write( + _renderTopLevelProperty_partial_source_link_1(context1, context0)); + buffer.write('''

'''); + buffer.write(context1.name.toString()); + buffer.write(''' '''); + buffer.write(htmlEscape.convert(context1.kind.toString())); + buffer.write(' '); + buffer.write( + _renderTopLevelProperty_partial_feature_set_2(context1, context0)); + buffer.write(' '); + buffer.write( + _renderTopLevelProperty_partial_categorization_3(context1, context0)); + buffer.write('''

+'''); + if (context1.hasNoGetterSetter == true) { + buffer.write(''' +
+ '''); + buffer.write(context1.modelType.linkedName.toString()); + buffer.write('\n '); + buffer.write( + _renderTopLevelProperty_partial_name_summary_4(context1, context0)); + buffer.write('\n '); + buffer.write( + _renderTopLevelProperty_partial_features_5(context1, context0)); + buffer.write(''' +
+ '''); + buffer.write( + _renderTopLevelProperty_partial_documentation_6(context1, context0)); + buffer.write('\n '); + buffer.write( + _renderTopLevelProperty_partial_source_code_7(context1, context0)); + } + buffer.writeln(); + if (context1.hasExplicitGetter == true) { + buffer.write('\n '); + buffer.write(_renderTopLevelProperty_partial_accessor_getter_8( + context1, context0)); + } + buffer.writeln(); + if (context1.hasExplicitSetter == true) { + buffer.write('\n '); + buffer.write(_renderTopLevelProperty_partial_accessor_setter_9( + context1, context0)); + } + } + buffer.write(''' +
+ + + + + +'''); + buffer.write(_renderTopLevelProperty_partial_footer_11(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderTopLevelProperty_partial_head_0( + TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(''' + + + + + '''); + if (context0.includeVersion == true) { + buffer.write(''' + '''); + } + buffer.write(''' + + '''); + buffer.write(htmlEscape.convert(context0.title.toString())); + buffer.write(''''''); + if (context0.relCanonicalPrefix != null) { + var context1 = context0.relCanonicalPrefix; + buffer.write(''' + '''); + } + buffer.writeln(); + if (context0.useBaseHref == true) { + if (context0.htmlBase != null) { + var context2 = context0.htmlBase; + buffer.write(''' + + '''); + } + } + buffer.write('\n\n '); + buffer.write(''' + + + + + + + + '''); + buffer.write(context0.customHeader.toString()); + buffer.write(''' + + +'''); + buffer.write(''' + + +
+ +
+ + +
'''); + buffer.write(htmlEscape.convert(context0.self.name.toString())); + buffer.write('''
+ +
+ +
+'''); + return buffer.toString(); +} + +String _renderTopLevelProperty_partial_source_link_1( + TopLevelVariable context1, TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceHref == true) { + buffer.write(''' + '''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTopLevelProperty_partial_feature_set_2( + TopLevelVariable context1, TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatureSet == true) { + for (var context2 in context1.displayedLanguageFeatures) { + buffer.write('\n '); + buffer.write(context2.featureLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTopLevelProperty_partial_categorization_3( + TopLevelVariable context1, TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasCategoryNames == true) { + for (var context2 in context1.displayedCategories) { + buffer.write('\n '); + buffer.write(context2.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTopLevelProperty_partial_name_summary_4( + TopLevelVariable context1, TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.isConst == true) { + buffer.write('''const '''); + } + buffer.write(''''''); + buffer.write(htmlEscape.convert(context1.name.toString())); + buffer.write(''''''); + return buffer.toString(); +} + +String _renderTopLevelProperty_partial_features_5( + TopLevelVariable context1, TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context1.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTopLevelProperty_partial_documentation_6( + TopLevelVariable context1, TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.write(''' +
+ '''); + buffer.write(context1.documentationAsHtml.toString()); + buffer.write(''' +
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTopLevelProperty_partial_source_code_7( + TopLevelVariable context1, TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceCode == true) { + buffer.write(''' +
+

Implementation

+
''');
+    buffer.write(context1.sourceCode.toString());
+    buffer.write('''
+
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTopLevelProperty_partial_accessor_getter_8( + TopLevelVariable context1, TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.getter != null) { + var context2 = context1.getter; + buffer.write(''' +
+ +
+ '''); + buffer.write(context2.modelType.returnType.linkedName.toString()); + buffer.write(''' + '''); + buffer.write( + __renderTopLevelProperty_partial_accessor_getter_8_partial_name_summary_0( + context2, context1, context0)); + buffer.write('\n '); + buffer.write( + __renderTopLevelProperty_partial_accessor_getter_8_partial_features_1( + context2, context1, context0)); + buffer.write(''' +
+ +'''); + buffer.write( + __renderTopLevelProperty_partial_accessor_getter_8_partial_documentation_2( + context2, context1, context0)); + buffer.writeln(); + buffer.write( + __renderTopLevelProperty_partial_accessor_getter_8_partial_source_code_3( + context2, context1, context0)); + buffer.write(''' +
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String + __renderTopLevelProperty_partial_accessor_getter_8_partial_name_summary_0( + Accessor context2, + TopLevelVariable context1, + TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.isConst == true) { + buffer.write('''const '''); + } + buffer.write(''''''); + buffer.write(htmlEscape.convert(context2.name.toString())); + buffer.write(''''''); + return buffer.toString(); +} + +String __renderTopLevelProperty_partial_accessor_getter_8_partial_features_1( + Accessor context2, + TopLevelVariable context1, + TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String + __renderTopLevelProperty_partial_accessor_getter_8_partial_documentation_2( + Accessor context2, + TopLevelVariable context1, + TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasDocumentation == true) { + buffer.write(''' +
+ '''); + buffer.write(context2.documentationAsHtml.toString()); + buffer.write(''' +
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderTopLevelProperty_partial_accessor_getter_8_partial_source_code_3( + Accessor context2, + TopLevelVariable context1, + TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasSourceCode == true) { + buffer.write(''' +
+

Implementation

+
''');
+    buffer.write(context2.sourceCode.toString());
+    buffer.write('''
+
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTopLevelProperty_partial_accessor_setter_9( + TopLevelVariable context1, TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.setter != null) { + var context2 = context1.setter; + buffer.write(''' +
+ +
+ void + '''); + buffer.write( + __renderTopLevelProperty_partial_accessor_setter_9_partial_name_summary_0( + context2, context1, context0)); + buffer.write('''('''); + buffer.write(context2.linkedParamsNoMetadata.toString()); + buffer.write(''') + '''); + buffer.write( + __renderTopLevelProperty_partial_accessor_setter_9_partial_features_1( + context2, context1, context0)); + buffer.write(''' +
+ +'''); + buffer.write( + __renderTopLevelProperty_partial_accessor_setter_9_partial_documentation_2( + context2, context1, context0)); + buffer.writeln(); + buffer.write( + __renderTopLevelProperty_partial_accessor_setter_9_partial_source_code_3( + context2, context1, context0)); + buffer.write(''' +
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String + __renderTopLevelProperty_partial_accessor_setter_9_partial_name_summary_0( + Accessor context2, + TopLevelVariable context1, + TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.isConst == true) { + buffer.write('''const '''); + } + buffer.write(''''''); + buffer.write(htmlEscape.convert(context2.name.toString())); + buffer.write(''''''); + return buffer.toString(); +} + +String __renderTopLevelProperty_partial_accessor_setter_9_partial_features_1( + Accessor context2, + TopLevelVariable context1, + TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''
'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String + __renderTopLevelProperty_partial_accessor_setter_9_partial_documentation_2( + Accessor context2, + TopLevelVariable context1, + TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasDocumentation == true) { + buffer.write(''' +
+ '''); + buffer.write(context2.documentationAsHtml.toString()); + buffer.write(''' +
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderTopLevelProperty_partial_accessor_setter_9_partial_source_code_3( + Accessor context2, + TopLevelVariable context1, + TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasSourceCode == true) { + buffer.write(''' +
+

Implementation

+
''');
+    buffer.write(context2.sourceCode.toString());
+    buffer.write('''
+
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTopLevelProperty_partial_search_sidebar_10( + TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + + +'''); + return buffer.toString(); +} + +String _renderTopLevelProperty_partial_footer_11( + TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + '''); + buffer.write(htmlEscape.convert(context0.defaultPackage.name.toString())); + if (context0.hasFooterVersion == true) { + buffer.write('\n '); + buffer + .write(htmlEscape.convert(context0.defaultPackage.version.toString())); + } + buffer.write(''' + + + '''); + buffer.write(context0.customInnerFooter.toString()); + buffer.write(''' +
+ +'''); + buffer.write(''' + + + +'''); + buffer.write(context0.customFooter.toString()); + buffer.write(''' + + + + +'''); + return buffer.toString(); +} + +String renderTypedef(TypedefTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderTypedef_partial_head_0(context0)); + buffer.write(''' + +
'''); + if (context0.self != null) { + var context1 = context0.self; + buffer.write(''' +
'''); + buffer.write(_renderTypedef_partial_source_link_1(context1, context0)); + buffer.write('''

'''); + buffer.write(context1.nameWithGenerics.toString()); + buffer.write(''' '''); + buffer.write(htmlEscape.convert(context1.kind.toString())); + buffer.write(' '); + buffer.write(_renderTypedef_partial_feature_set_2(context1, context0)); + buffer.write(' '); + buffer.write(_renderTypedef_partial_categorization_3(context1, context0)); + buffer.write('''

'''); + } + buffer.write(''' + +
'''); + if (context0.typeDef != null) { + var context2 = context0.typeDef; + buffer.write('\n '); + buffer + .write(_renderTypedef_partial_typedef_multiline_4(context2, context0)); + } + buffer.write(''' +
+'''); + if (context0.typeDef != null) { + var context3 = context0.typeDef; + buffer.write('\n '); + buffer.write(_renderTypedef_partial_documentation_5(context3, context0)); + buffer.write('\n '); + buffer.write(_renderTypedef_partial_source_code_6(context3, context0)); + } + buffer.write(''' + +
+ + + + + +'''); + buffer.write(_renderTypedef_partial_footer_8(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderTypedef_partial_head_0(TypedefTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(''' + + + + + '''); + if (context0.includeVersion == true) { + buffer.write(''' + '''); + } + buffer.write(''' + + '''); + buffer.write(htmlEscape.convert(context0.title.toString())); + buffer.write(''''''); + if (context0.relCanonicalPrefix != null) { + var context1 = context0.relCanonicalPrefix; + buffer.write(''' + '''); + } + buffer.writeln(); + if (context0.useBaseHref == true) { + if (context0.htmlBase != null) { + var context2 = context0.htmlBase; + buffer.write(''' + + '''); + } + } + buffer.write('\n\n '); + buffer.write(''' + + + + + + + + '''); + buffer.write(context0.customHeader.toString()); + buffer.write(''' + + +'''); + buffer.write(''' + + +
+ +
+ + +
'''); + buffer.write(htmlEscape.convert(context0.self.name.toString())); + buffer.write('''
+ +
+ +
+'''); + return buffer.toString(); +} + +String _renderTypedef_partial_source_link_1( + Typedef context1, TypedefTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceHref == true) { + buffer.write(''' + '''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTypedef_partial_feature_set_2( + Typedef context1, TypedefTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatureSet == true) { + for (var context2 in context1.displayedLanguageFeatures) { + buffer.write('\n '); + buffer.write(context2.featureLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTypedef_partial_categorization_3( + Typedef context1, TypedefTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasCategoryNames == true) { + for (var context2 in context1.displayedCategories) { + buffer.write('\n '); + buffer.write(context2.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTypedef_partial_typedef_multiline_4( + Typedef context1, TypedefTemplateData context0) { + final buffer = StringBuffer(); + if (context1.isCallable == true) { + if (context1.asCallable != null) { + var context2 = context1.asCallable; + buffer.write('\n '); + buffer.write( + __renderTypedef_partial_typedef_multiline_4_partial_callable_multiline_0( + context2, context1, context0)); + } + } + if (context1.isCallable != true) { + buffer.write('\n '); + buffer.write( + __renderTypedef_partial_typedef_multiline_4_partial_type_multiline_1( + context1, context0)); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderTypedef_partial_typedef_multiline_4_partial_callable_multiline_0( + FunctionTypedef context2, Typedef context1, TypedefTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasAnnotations == true) { + buffer.write(''' +
+
    '''); + for (var context3 in context2.annotations) { + buffer.write(''' +
  1. '''); + buffer.write(context3.linkedNameWithParameters.toString()); + buffer.write('''
  2. '''); + } + buffer.write(''' +
+
'''); + } + buffer.write(''' + +'''); + buffer.write(context2.modelType.returnType.linkedName.toString()); + buffer.write(''' +'''); + buffer.write( + ___renderTypedef_partial_typedef_multiline_4_partial_callable_multiline_0_partial_name_summary_0( + context2, context1, context0)); + buffer.write(context2.genericParameters.toString()); + buffer.write('''('''); + if (context2.hasParameters == true) { + buffer.write(context2.linkedParamsLines.toString()); + } + buffer.write(''') +'''); + return buffer.toString(); +} + +String + ___renderTypedef_partial_typedef_multiline_4_partial_callable_multiline_0_partial_name_summary_0( + FunctionTypedef context2, + Typedef context1, + TypedefTemplateData context0) { + final buffer = StringBuffer(); + if (context2.isConst == true) { + buffer.write('''const '''); + } + buffer.write(''''''); + buffer.write(htmlEscape.convert(context2.name.toString())); + buffer.write(''''''); + return buffer.toString(); +} + +String __renderTypedef_partial_typedef_multiline_4_partial_type_multiline_1( + Typedef context1, TypedefTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasAnnotations == true) { + buffer.write(''' +
+
    '''); + for (var context2 in context1.annotations) { + buffer.write(''' +
  1. '''); + buffer.write(context2.linkedNameWithParameters.toString()); + buffer.write('''
  2. '''); + } + buffer.write(''' +
+
'''); + } + buffer.writeln(); + buffer.write( + ___renderTypedef_partial_typedef_multiline_4_partial_type_multiline_1_partial_name_summary_0( + context1, context0)); + buffer.write(context1.genericParameters.toString()); + buffer.write(''' = '''); + buffer.write(context1.modelType.linkedName.toString()); + buffer.write(''' +'''); + return buffer.toString(); +} + +String + ___renderTypedef_partial_typedef_multiline_4_partial_type_multiline_1_partial_name_summary_0( + Typedef context1, TypedefTemplateData context0) { + final buffer = StringBuffer(); + if (context1.isConst == true) { + buffer.write('''const '''); + } + buffer.write(''''''); + buffer.write(htmlEscape.convert(context1.name.toString())); + buffer.write(''''''); + return buffer.toString(); +} + +String _renderTypedef_partial_documentation_5( + Typedef context1, TypedefTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.write(''' +
+ '''); + buffer.write(context1.documentationAsHtml.toString()); + buffer.write(''' +
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTypedef_partial_source_code_6( + Typedef context1, TypedefTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceCode == true) { + buffer.write(''' +
+

Implementation

+
''');
+    buffer.write(context1.sourceCode.toString());
+    buffer.write('''
+
'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTypedef_partial_search_sidebar_7(TypedefTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + + +'''); + return buffer.toString(); +} + +String _renderTypedef_partial_footer_8(TypedefTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''
+ +
+ + '''); + buffer.write(htmlEscape.convert(context0.defaultPackage.name.toString())); + if (context0.hasFooterVersion == true) { + buffer.write('\n '); + buffer + .write(htmlEscape.convert(context0.defaultPackage.version.toString())); + } + buffer.write(''' + + + '''); + buffer.write(context0.customInnerFooter.toString()); + buffer.write(''' +
+ +'''); + buffer.write(''' + + + +'''); + buffer.write(context0.customFooter.toString()); + buffer.write(''' + + + + +'''); + return buffer.toString(); +} diff --git a/lib/src/generator/templates.aot_renderers_for_md.dart b/lib/src/generator/templates.aot_renderers_for_md.dart new file mode 100644 index 0000000000..9a19270d08 --- /dev/null +++ b/lib/src/generator/templates.aot_renderers_for_md.dart @@ -0,0 +1,4305 @@ +// GENERATED CODE. DO NOT EDIT. +// +// To change the contents of this library, make changes to the builder source +// files in the tool/mustachio/ directory. + +// Sometimes we enter a new section which triggers creating a new variable, but +// the variable is not used; generally when the section is checking if a +// non-bool, non-Iterable field is non-null. +// ignore_for_file: unused_local_variable + +// It is hard to track exact imports without using package:code_builder. +// ignore_for_file: unused_import + +import 'dart:convert' show htmlEscape; + +import 'package:dartdoc/dartdoc.dart'; +import 'package:dartdoc/src/generator/template_data.dart'; +import 'templates.dart'; + +String renderCategory(CategoryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderCategory_partial_head_0(context0)); + buffer.writeln(); + if (context0.self != null) { + var context1 = context0.self; + buffer.write(''' +# '''); + buffer.write(htmlEscape.convert(context1.name.toString())); + buffer.write(' '); + buffer.write(htmlEscape.convert(context1.kind.toString())); + buffer.write('\n\n'); + buffer.write(_renderCategory_partial_documentation_1(context1, context0)); + buffer.writeln(); + if (context1.hasPublicLibraries == true) { + buffer.write(''' +## Libraries +'''); + for (var context2 in context1.publicLibrariesSorted) { + buffer.writeln(); + buffer.write( + _renderCategory_partial_library_2(context2, context1, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context1.hasPublicClasses == true) { + buffer.write(''' +## Classes +'''); + for (var context3 in context1.publicClassesSorted) { + buffer.writeln(); + buffer.write( + _renderCategory_partial_class_3(context3, context1, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context1.hasPublicMixins == true) { + buffer.write(''' +## Mixins +'''); + for (var context4 in context1.publicMixinsSorted) { + buffer.writeln(); + buffer.write( + _renderCategory_partial_mixin_4(context4, context1, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context1.hasPublicConstants == true) { + buffer.write(''' +## Constants +'''); + for (var context5 in context1.publicConstantsSorted) { + buffer.writeln(); + buffer.write( + _renderCategory_partial_constant_5(context5, context1, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context1.hasPublicProperties == true) { + buffer.write(''' +## Properties +'''); + for (var context6 in context1.publicPropertiesSorted) { + buffer.writeln(); + buffer.write( + _renderCategory_partial_property_6(context6, context1, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context1.hasPublicFunctions == true) { + buffer.write(''' +## Functions +'''); + for (var context7 in context1.publicFunctionsSorted) { + buffer.writeln(); + buffer.write( + _renderCategory_partial_callable_7(context7, context1, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context1.hasPublicEnums == true) { + buffer.write(''' +## Enums +'''); + for (var context8 in context1.publicEnumsSorted) { + buffer.writeln(); + buffer.write( + _renderCategory_partial_class_3(context8, context1, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context1.hasPublicTypedefs == true) { + buffer.write(''' +## Typedefs +'''); + for (var context9 in context1.publicTypedefsSorted) { + buffer.writeln(); + buffer.write( + _renderCategory_partial_typedef_8(context9, context1, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context1.hasPublicExceptions == true) { + buffer.write(''' +## Exceptions / Errors +'''); + for (var context10 in context1.publicExceptionsSorted) { + buffer.writeln(); + buffer.write( + _renderCategory_partial_class_3(context10, context1, context0)); + buffer.writeln(); + } + } + } + buffer.write('\n\n'); + buffer.write(_renderCategory_partial_footer_9(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderCategory_partial_head_0(CategoryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(context0.customHeader.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String _renderCategory_partial_documentation_1( + Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.writeln(); + buffer.write(context1.documentationAsHtml.toString()); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderCategory_partial_library_2( + Library context2, Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context2.linkedName.toString()); + if (context2.isDocumented == true) { + buffer.writeln(); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.writeln(); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderCategory_partial_class_3( + Class context2, Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context2.linkedName.toString()); + buffer.write(context2.linkedGenericParameters.toString()); + buffer.writeln(); + buffer.write(__renderCategory_partial_class_3_partial_categorization_0( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String __renderCategory_partial_class_3_partial_categorization_0( + Class context2, Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context3 in context2.displayedCategories) { + buffer.writeln(); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderCategory_partial_mixin_4( + Mixin context2, Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context2.linkedName.toString()); + buffer.write(context2.linkedGenericParameters.toString()); + buffer.writeln(); + buffer.write(__renderCategory_partial_mixin_4_partial_categorization_0( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String __renderCategory_partial_mixin_4_partial_categorization_0( + Mixin context2, Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context3 in context2.displayedCategories) { + buffer.writeln(); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderCategory_partial_constant_5(TopLevelVariable context2, + Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context2.linkedName.toString()); + buffer.write(''' const '''); + buffer.write(context2.modelType.linkedName.toString()); + buffer.writeln(); + buffer.write(__renderCategory_partial_constant_5_partial_categorization_0( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write(' '); + buffer.writeln(); + buffer.write(__renderCategory_partial_constant_5_partial_features_1( + context2, context1, context0)); + buffer.writeln(); + return buffer.toString(); +} + +String __renderCategory_partial_constant_5_partial_categorization_0( + TopLevelVariable context2, + Category context1, + CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context3 in context2.displayedCategories) { + buffer.writeln(); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderCategory_partial_constant_5_partial_features_1( + TopLevelVariable context2, + Category context1, + CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderCategory_partial_property_6(TopLevelVariable context2, + Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context2.linkedName.toString()); + buffer.write(' '); + buffer.write(context2.arrow.toString()); + buffer.write(' '); + buffer.write(context2.modelType.linkedName.toString()); + buffer.writeln(); + buffer.write(__renderCategory_partial_property_6_partial_categorization_0( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write(' '); + buffer.writeln(); + buffer.write(__renderCategory_partial_property_6_partial_features_1( + context2, context1, context0)); + buffer.writeln(); + return buffer.toString(); +} + +String __renderCategory_partial_property_6_partial_categorization_0( + TopLevelVariable context2, + Category context1, + CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context3 in context2.displayedCategories) { + buffer.writeln(); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderCategory_partial_property_6_partial_features_1( + TopLevelVariable context2, + Category context1, + CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderCategory_partial_callable_7(ModelFunctionTyped context2, + Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context2.linkedName.toString()); + buffer.write(context2.linkedGenericParameters.toString()); + buffer.write('''('''); + buffer.write(context2.linkedParamsNoMetadata.toString()); + buffer.write(''') '''); + buffer.write(context2.modelType.returnType.linkedName.toString()); + buffer.writeln(); + buffer.write(__renderCategory_partial_callable_7_partial_categorization_0( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write(' '); + buffer.writeln(); + buffer.write(__renderCategory_partial_callable_7_partial_features_1( + context2, context1, context0)); + buffer.writeln(); + return buffer.toString(); +} + +String __renderCategory_partial_callable_7_partial_categorization_0( + ModelFunctionTyped context2, + Category context1, + CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context3 in context2.displayedCategories) { + buffer.writeln(); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderCategory_partial_callable_7_partial_features_1( + ModelFunctionTyped context2, + Category context1, + CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderCategory_partial_typedef_8( + Typedef context2, Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context2.isCallable == true) { + if (context2.asCallable != null) { + var context3 = context2.asCallable; + buffer.write('\n '); + buffer.write(__renderCategory_partial_typedef_8_partial_callable_0( + context3, context2, context1, context0)); + } + } + if (context2.isCallable != true) { + buffer.write('\n '); + buffer.write(__renderCategory_partial_typedef_8_partial_type_1( + context2, context1, context0)); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderCategory_partial_typedef_8_partial_callable_0( + FunctionTypedef context3, + Typedef context2, + Category context1, + CategoryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context3.linkedName.toString()); + buffer.write(context3.linkedGenericParameters.toString()); + buffer.write('''('''); + buffer.write(context3.linkedParamsNoMetadata.toString()); + buffer.write(''') '''); + buffer.write(context3.modelType.returnType.linkedName.toString()); + buffer.writeln(); + buffer.write( + ___renderCategory_partial_typedef_8_partial_callable_0_partial_categorization_0( + context3, context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context3.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context3.extendedDocLink.toString()); + buffer.write(' '); + buffer.writeln(); + buffer.write( + ___renderCategory_partial_typedef_8_partial_callable_0_partial_features_1( + context3, context2, context1, context0)); + buffer.writeln(); + return buffer.toString(); +} + +String + ___renderCategory_partial_typedef_8_partial_callable_0_partial_categorization_0( + FunctionTypedef context3, + Typedef context2, + Category context1, + CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context4 in context3.displayedCategories) { + buffer.writeln(); + buffer.write(context4.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String + ___renderCategory_partial_typedef_8_partial_callable_0_partial_features_1( + FunctionTypedef context3, + Typedef context2, + Category context1, + CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context3.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderCategory_partial_typedef_8_partial_type_1( + Typedef context2, Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context2.linkedName.toString()); + buffer.write(context2.linkedGenericParameters.toString()); + buffer.write('''('''); + buffer.write(context2.linkedParamsNoMetadata.toString()); + buffer.write(''') '''); + buffer.write(context2.modelType.linkedName.toString()); + buffer.writeln(); + buffer.write( + ___renderCategory_partial_typedef_8_partial_type_1_partial_categorization_0( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write(' '); + buffer.writeln(); + buffer.write( + ___renderCategory_partial_typedef_8_partial_type_1_partial_features_1( + context2, context1, context0)); + buffer.writeln(); + return buffer.toString(); +} + +String + ___renderCategory_partial_typedef_8_partial_type_1_partial_categorization_0( + Typedef context2, Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context3 in context2.displayedCategories) { + buffer.writeln(); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String ___renderCategory_partial_typedef_8_partial_type_1_partial_features_1( + Typedef context2, Category context1, CategoryTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderCategory_partial_footer_9(CategoryTemplateData context0) { + final buffer = StringBuffer(); + buffer.writeln(); + buffer.write(context0.customInnerFooter.toString()); + buffer.writeln(); + buffer.write(context0.customFooter.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String renderClass(ClassTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderClass_partial_head_0(context0)); + buffer.writeln(); + if (context0.self != null) { + var context1 = context0.self; + buffer.write(''' +# '''); + buffer.write(context1.nameWithGenerics.toString()); + buffer.write(' '); + buffer.write(htmlEscape.convert(context1.kind.toString())); + buffer.write('\n\n'); + buffer.write(_renderClass_partial_source_link_1(context1, context0)); + buffer.writeln(); + buffer.write(_renderClass_partial_categorization_2(context1, context0)); + buffer.writeln(); + buffer.write(_renderClass_partial_feature_set_3(context1, context0)); + } + buffer.writeln(); + if (context0.clazz != null) { + var context2 = context0.clazz; + buffer.writeln(); + buffer.write(_renderClass_partial_documentation_4(context2, context0)); + buffer.writeln(); + if (context2.hasModifiers == true) { + if (context2.hasPublicSuperChainReversed == true) { + buffer.write(''' +**Inheritance** + +- '''); + buffer.write(context0.linkedObjectType.toString()); + for (var context3 in context2.publicSuperChainReversed) { + buffer.write(''' +- '''); + buffer.write(context3.linkedName.toString()); + } + buffer.write(''' +- '''); + buffer.write(context2.name.toString()); + } + buffer.writeln(); + if (context2.hasPublicInterfaces == true) { + buffer.write(''' +**Implemented types** +'''); + for (var context4 in context2.publicInterfaces) { + buffer.write(''' +- '''); + buffer.write(context4.linkedName.toString()); + } + } + buffer.writeln(); + if (context2.hasPublicMixedInTypes == true) { + buffer.write(''' +**Mixed in types** +'''); + for (var context5 in context2.publicMixedInTypes) { + buffer.write(''' +- '''); + buffer.write(context5.linkedName.toString()); + } + } + buffer.writeln(); + if (context2.hasPublicImplementors == true) { + buffer.write(''' +**Implementers** +'''); + for (var context6 in context2.publicImplementorsSorted) { + buffer.write(''' +- '''); + buffer.write(context6.linkedName.toString()); + } + } + buffer.writeln(); + if (context2.hasPotentiallyApplicableExtensions == true) { + buffer.write(''' +**Available Extensions** +'''); + for (var context7 in context2.potentiallyApplicableExtensions) { + buffer.write(''' +- '''); + buffer.write(context7.linkedName.toString()); + } + } + buffer.writeln(); + if (context2.hasAnnotations == true) { + buffer.write(''' +**Annotations** +'''); + for (var context8 in context2.annotations) { + buffer.write(''' +- '''); + buffer.write(context8.linkedNameWithParameters.toString()); + } + } + } + buffer.writeln(); + if (context2.hasPublicConstructors == true) { + buffer.write(''' +## Constructors +'''); + for (var context9 in context2.publicConstructorsSorted) { + buffer.writeln(); + buffer.write(context9.linkedName.toString()); + buffer.write(''' ('''); + buffer.write(context9.linkedParams.toString()); + buffer.write(''') + +'''); + buffer.write(context9.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context9.extendedDocLink.toString()); + buffer.write(' '); + if (context9.isConst == true) { + buffer.write('''_const_'''); + } + buffer.write(' '); + if (context9.isFactory == true) { + buffer.write('''_factory_'''); + } + buffer.writeln(); + } + } + buffer.writeln(); + if (context2.hasPublicInstanceFields == true) { + buffer.write(''' +## Properties +'''); + for (var context10 in context2.publicInstanceFieldsSorted) { + buffer.writeln(); + buffer.write( + _renderClass_partial_property_5(context10, context2, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context2.hasPublicInstanceMethods == true) { + buffer.write(''' +## Methods +'''); + for (var context11 in context2.publicInstanceMethodsSorted) { + buffer.writeln(); + buffer.write( + _renderClass_partial_callable_6(context11, context2, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context2.hasPublicInstanceOperators == true) { + buffer.write(''' +## Operators +'''); + for (var context12 in context2.publicInstanceOperatorsSorted) { + buffer.writeln(); + buffer.write( + _renderClass_partial_callable_6(context12, context2, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context2.hasPublicVariableStaticFields == true) { + buffer.write(''' +## Static Properties +'''); + for (var context13 in context2.publicVariableStaticFieldsSorted) { + buffer.writeln(); + buffer.write( + _renderClass_partial_property_5(context13, context2, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context2.hasPublicStaticMethods == true) { + buffer.write(''' +## Static Methods +'''); + for (var context14 in context2.publicStaticMethodsSorted) { + buffer.writeln(); + buffer.write( + _renderClass_partial_callable_6(context14, context2, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context2.hasPublicConstantFields == true) { + buffer.write(''' +## Constants +'''); + for (var context15 in context2.publicConstantFieldsSorted) { + buffer.writeln(); + buffer.write( + _renderClass_partial_constant_7(context15, context2, context0)); + buffer.writeln(); + } + } + } + buffer.write('\n\n'); + buffer.write(_renderClass_partial_footer_8(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderClass_partial_head_0( + ClassTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(context0.customHeader.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String _renderClass_partial_source_link_1( + Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceHref == true) { + buffer.write(''' +[view source]('''); + buffer.write(context1.sourceHref.toString()); + buffer.write(''')'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderClass_partial_categorization_2( + Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context2 in context1.displayedCategories) { + buffer.writeln(); + buffer.write(context2.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderClass_partial_feature_set_3( + Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatureSet == true) { + for (var context2 in context1.displayedLanguageFeatures) { + buffer.write('\n '); + buffer.write(context2.featureLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderClass_partial_documentation_4( + Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.writeln(); + buffer.write(context1.documentationAsHtml.toString()); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderClass_partial_property_5( + Field context2, Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context2.linkedName.toString()); + buffer.write(' '); + buffer.write(context2.arrow.toString()); + buffer.write(' '); + buffer.write(context2.modelType.linkedName.toString()); + buffer.writeln(); + buffer.write(__renderClass_partial_property_5_partial_categorization_0( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write(' '); + buffer.writeln(); + buffer.write(__renderClass_partial_property_5_partial_features_1( + context2, context1, context0)); + buffer.writeln(); + return buffer.toString(); +} + +String + __renderClass_partial_property_5_partial_categorization_0( + Field context2, Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context3 in context2.displayedCategories) { + buffer.writeln(); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderClass_partial_property_5_partial_features_1( + Field context2, Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderClass_partial_callable_6( + Method context2, Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context2.linkedName.toString()); + buffer.write(context2.linkedGenericParameters.toString()); + buffer.write('''('''); + buffer.write(context2.linkedParamsNoMetadata.toString()); + buffer.write(''') '''); + buffer.write(context2.modelType.returnType.linkedName.toString()); + buffer.writeln(); + buffer.write(__renderClass_partial_callable_6_partial_categorization_0( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write(' '); + buffer.writeln(); + buffer.write(__renderClass_partial_callable_6_partial_features_1( + context2, context1, context0)); + buffer.writeln(); + return buffer.toString(); +} + +String + __renderClass_partial_callable_6_partial_categorization_0( + Method context2, Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context3 in context2.displayedCategories) { + buffer.writeln(); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderClass_partial_callable_6_partial_features_1( + Method context2, Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderClass_partial_constant_7( + Field context2, Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context2.linkedName.toString()); + buffer.write(''' const '''); + buffer.write(context2.modelType.linkedName.toString()); + buffer.writeln(); + buffer.write(__renderClass_partial_constant_7_partial_categorization_0( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write(' '); + buffer.writeln(); + buffer.write(__renderClass_partial_constant_7_partial_features_1( + context2, context1, context0)); + buffer.writeln(); + return buffer.toString(); +} + +String + __renderClass_partial_constant_7_partial_categorization_0( + Field context2, Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context3 in context2.displayedCategories) { + buffer.writeln(); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderClass_partial_constant_7_partial_features_1( + Field context2, Class context1, ClassTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderClass_partial_footer_8( + ClassTemplateData context0) { + final buffer = StringBuffer(); + buffer.writeln(); + buffer.write(context0.customInnerFooter.toString()); + buffer.writeln(); + buffer.write(context0.customFooter.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String renderConstructor(ConstructorTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderConstructor_partial_head_0(context0)); + buffer.writeln(); + if (context0.self != null) { + var context1 = context0.self; + buffer.write(''' +# '''); + buffer.write(context1.nameWithGenerics.toString()); + buffer.write(' '); + buffer.write(htmlEscape.convert(context1.kind.toString())); + buffer.write('\n\n'); + buffer.write(_renderConstructor_partial_source_link_1(context1, context0)); + buffer.writeln(); + buffer.write(_renderConstructor_partial_feature_set_2(context1, context0)); + } + buffer.writeln(); + if (context0.constructor != null) { + var context2 = context0.constructor; + if (context2.hasAnnotations == true) { + for (var context3 in context2.annotations) { + buffer.write(''' +- '''); + buffer.write(context3.linkedNameWithParameters.toString()); + } + } + buffer.writeln(); + if (context2.isConst == true) { + buffer.write('''const'''); + } + buffer.writeln(); + buffer.write(context2.nameWithGenerics.toString()); + buffer.write('''('''); + if (context2.hasParameters == true) { + buffer.write(context2.linkedParamsLines.toString()); + } + buffer.write(''') + +'''); + buffer + .write(_renderConstructor_partial_documentation_3(context2, context0)); + buffer.write('\n\n'); + buffer.write(_renderConstructor_partial_source_code_4(context2, context0)); + buffer.writeln(); + } + buffer.write('\n\n'); + buffer.write(_renderConstructor_partial_footer_5(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderConstructor_partial_head_0(ConstructorTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(context0.customHeader.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String _renderConstructor_partial_source_link_1( + Constructor context1, ConstructorTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceHref == true) { + buffer.write(''' +[view source]('''); + buffer.write(context1.sourceHref.toString()); + buffer.write(''')'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderConstructor_partial_feature_set_2( + Constructor context1, ConstructorTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatureSet == true) { + for (var context2 in context1.displayedLanguageFeatures) { + buffer.write('\n '); + buffer.write(context2.featureLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderConstructor_partial_documentation_3( + Constructor context1, ConstructorTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.writeln(); + buffer.write(context1.documentationAsHtml.toString()); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderConstructor_partial_source_code_4( + Constructor context1, ConstructorTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceCode == true) { + buffer.write(''' +## Implementation + +```dart +'''); + buffer.write(context1.sourceCode.toString()); + buffer.write(''' +```'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderConstructor_partial_footer_5(ConstructorTemplateData context0) { + final buffer = StringBuffer(); + buffer.writeln(); + buffer.write(context0.customInnerFooter.toString()); + buffer.writeln(); + buffer.write(context0.customFooter.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String renderEnum(EnumTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderEnum_partial_head_0(context0)); + buffer.writeln(); + if (context0.self != null) { + var context1 = context0.self; + buffer.write(''' +# '''); + buffer.write(context1.name.toString()); + buffer.write(' '); + buffer.write(htmlEscape.convert(context1.kind.toString())); + buffer.write('\n\n'); + buffer.write(_renderEnum_partial_source_link_1(context1, context0)); + buffer.writeln(); + buffer.write(_renderEnum_partial_feature_set_2(context1, context0)); + } + buffer.writeln(); + if (context0.eNum != null) { + var context2 = context0.eNum; + buffer.writeln(); + buffer.write(_renderEnum_partial_documentation_3(context2, context0)); + buffer.writeln(); + if (context2.hasModifiers == true) { + if (context2.hasPublicSuperChainReversed == true) { + buffer.write(''' +**Inheritance** + +- '''); + buffer.write(context0.linkedObjectType.toString()); + for (var context3 in context2.publicSuperChainReversed) { + buffer.write(''' +- '''); + buffer.write(context3.linkedName.toString()); + } + buffer.write(''' +- '''); + buffer.write(context2.name.toString()); + } + buffer.writeln(); + if (context2.hasPublicInterfaces == true) { + buffer.write(''' +**Implemented types** +'''); + for (var context4 in context2.publicInterfaces) { + buffer.write(''' +- '''); + buffer.write(context4.linkedName.toString()); + } + } + buffer.writeln(); + if (context2.hasPublicMixedInTypes == true) { + buffer.write(''' +**Mixed in types** +'''); + for (var context5 in context2.publicMixedInTypes) { + buffer.write(''' +- '''); + buffer.write(context5.linkedName.toString()); + } + } + buffer.writeln(); + if (context2.hasPublicImplementors == true) { + buffer.write(''' +**Implementers** +'''); + for (var context6 in context2.publicImplementorsSorted) { + buffer.write(''' +- '''); + buffer.write(context6.linkedName.toString()); + } + } + buffer.writeln(); + if (context2.hasAnnotations == true) { + buffer.write(''' +**Annotations** +'''); + for (var context7 in context2.annotations) { + buffer.write(''' +- '''); + buffer.write(context7.linkedNameWithParameters.toString()); + } + } + } + buffer.writeln(); + if (context2.hasPublicConstantFields == true) { + buffer.write(''' +## Constants +'''); + for (var context8 in context2.publicConstantFieldsSorted) { + buffer.writeln(); + buffer.write( + _renderEnum_partial_constant_4(context8, context2, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context2.hasPublicConstructors == true) { + buffer.write(''' +## Constructors +'''); + for (var context9 in context2.publicConstructorsSorted) { + buffer.writeln(); + buffer.write(context9.linkedName.toString()); + buffer.write('''('''); + buffer.write(context9.linkedParams.toString()); + buffer.write(''') + +'''); + buffer.write(context9.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context9.extendedDocLink.toString()); + buffer.write(' '); + if (context9.isConst == true) { + buffer.write('''_const_'''); + } + buffer.write(' '); + if (context9.isFactory == true) { + buffer.write('''_factory_'''); + } + buffer.writeln(); + } + } + buffer.writeln(); + if (context2.hasPublicInstanceFields == true) { + buffer.write(''' +## Properties +'''); + for (var context10 in context2.publicInstanceFieldsSorted) { + buffer.writeln(); + buffer.write( + _renderEnum_partial_property_5(context10, context2, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context2.hasPublicInstanceMethods == true) { + buffer.write(''' +## Methods +'''); + for (var context11 in context2.publicInstanceMethodsSorted) { + buffer.writeln(); + buffer.write( + _renderEnum_partial_callable_6(context11, context2, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context2.hasPublicInstanceOperators == true) { + buffer.write(''' +## Operators +'''); + for (var context12 in context2.publicInstanceOperatorsSorted) { + buffer.writeln(); + buffer.write( + _renderEnum_partial_callable_6(context12, context2, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context2.hasPublicVariableStaticFields == true) { + buffer.write(''' +## Static Properties +'''); + for (var context13 in context2.publicVariableStaticFieldsSorted) { + buffer.writeln(); + buffer.write( + _renderEnum_partial_property_5(context13, context2, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context2.hasPublicStaticMethods == true) { + buffer.write(''' +## Static Methods +'''); + for (var context14 in context2.publicStaticMethodsSorted) { + buffer.writeln(); + buffer.write( + _renderEnum_partial_callable_6(context14, context2, context0)); + buffer.writeln(); + } + } + } + buffer.write('\n\n'); + buffer.write(_renderEnum_partial_footer_7(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderEnum_partial_head_0(EnumTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(context0.customHeader.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String _renderEnum_partial_source_link_1( + Enum context1, EnumTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceHref == true) { + buffer.write(''' +[view source]('''); + buffer.write(context1.sourceHref.toString()); + buffer.write(''')'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderEnum_partial_feature_set_2( + Enum context1, EnumTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatureSet == true) { + for (var context2 in context1.displayedLanguageFeatures) { + buffer.write('\n '); + buffer.write(context2.featureLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderEnum_partial_documentation_3( + Enum context1, EnumTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.writeln(); + buffer.write(context1.documentationAsHtml.toString()); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderEnum_partial_constant_4( + Field context2, Enum context1, EnumTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context2.linkedName.toString()); + buffer.write(''' const '''); + buffer.write(context2.modelType.linkedName.toString()); + buffer.writeln(); + buffer.write(__renderEnum_partial_constant_4_partial_categorization_0( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write(' '); + buffer.writeln(); + buffer.write(__renderEnum_partial_constant_4_partial_features_1( + context2, context1, context0)); + buffer.writeln(); + return buffer.toString(); +} + +String __renderEnum_partial_constant_4_partial_categorization_0( + Field context2, Enum context1, EnumTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context3 in context2.displayedCategories) { + buffer.writeln(); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderEnum_partial_constant_4_partial_features_1( + Field context2, Enum context1, EnumTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderEnum_partial_property_5( + Field context2, Enum context1, EnumTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context2.linkedName.toString()); + buffer.write(' '); + buffer.write(context2.arrow.toString()); + buffer.write(' '); + buffer.write(context2.modelType.linkedName.toString()); + buffer.writeln(); + buffer.write(__renderEnum_partial_property_5_partial_categorization_0( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write(' '); + buffer.writeln(); + buffer.write(__renderEnum_partial_property_5_partial_features_1( + context2, context1, context0)); + buffer.writeln(); + return buffer.toString(); +} + +String __renderEnum_partial_property_5_partial_categorization_0( + Field context2, Enum context1, EnumTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context3 in context2.displayedCategories) { + buffer.writeln(); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderEnum_partial_property_5_partial_features_1( + Field context2, Enum context1, EnumTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderEnum_partial_callable_6( + Method context2, Enum context1, EnumTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context2.linkedName.toString()); + buffer.write(context2.linkedGenericParameters.toString()); + buffer.write('''('''); + buffer.write(context2.linkedParamsNoMetadata.toString()); + buffer.write(''') '''); + buffer.write(context2.modelType.returnType.linkedName.toString()); + buffer.writeln(); + buffer.write(__renderEnum_partial_callable_6_partial_categorization_0( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write(' '); + buffer.writeln(); + buffer.write(__renderEnum_partial_callable_6_partial_features_1( + context2, context1, context0)); + buffer.writeln(); + return buffer.toString(); +} + +String __renderEnum_partial_callable_6_partial_categorization_0( + Method context2, Enum context1, EnumTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context3 in context2.displayedCategories) { + buffer.writeln(); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderEnum_partial_callable_6_partial_features_1( + Method context2, Enum context1, EnumTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderEnum_partial_footer_7(EnumTemplateData context0) { + final buffer = StringBuffer(); + buffer.writeln(); + buffer.write(context0.customInnerFooter.toString()); + buffer.writeln(); + buffer.write(context0.customFooter.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String renderError(PackageTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''# 404 + +Oops, something\'s gone wrong :-( + +You\'ve tried to visit a page that doesn\'t exist. Luckily this site has other +[pages](index.md). +'''); + return buffer.toString(); +} + +String renderExtension(ExtensionTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderExtension_partial_head_0(context0)); + buffer.writeln(); + if (context0.self != null) { + var context1 = context0.self; + buffer.write(''' +# '''); + buffer.write(context1.nameWithGenerics.toString()); + buffer.write(' '); + buffer.write(htmlEscape.convert(context1.kind.toString())); + buffer.write(''' +on '''); + if (context1.extendedType != null) { + var context2 = context1.extendedType; + buffer.write(context2.linkedName.toString()); + } + buffer.write('\n\n'); + buffer.write(_renderExtension_partial_source_link_1(context1, context0)); + buffer.write('\n\n'); + buffer.write(_renderExtension_partial_categorization_2(context1, context0)); + buffer.writeln(); + buffer.write(_renderExtension_partial_feature_set_3(context1, context0)); + } + buffer.writeln(); + if (context0.extension != null) { + var context3 = context0.extension; + buffer.writeln(); + buffer.write(_renderExtension_partial_documentation_4(context3, context0)); + buffer.writeln(); + if (context3.hasPublicInstanceFields == true) { + buffer.write(''' +## Properties +'''); + for (var context4 in context3.publicInstanceFieldsSorted) { + buffer.writeln(); + buffer.write( + _renderExtension_partial_property_5(context4, context3, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context3.hasPublicInstanceMethods == true) { + buffer.write(''' +## Methods +'''); + for (var context5 in context3.publicInstanceMethodsSorted) { + buffer.writeln(); + buffer.write( + _renderExtension_partial_callable_6(context5, context3, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context3.hasPublicInstanceOperators == true) { + buffer.write(''' +## Operators +'''); + for (var context6 in context3.publicInstanceOperatorsSorted) { + buffer.writeln(); + buffer.write( + _renderExtension_partial_callable_6(context6, context3, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context3.hasPublicVariableStaticFields == true) { + buffer.write(''' +## Static Properties +'''); + for (var context7 in context3.publicVariableStaticFieldsSorted) { + buffer.writeln(); + buffer.write( + _renderExtension_partial_property_5(context7, context3, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context3.hasPublicStaticMethods == true) { + buffer.write(''' +## Static Methods +'''); + for (var context8 in context3.publicStaticMethodsSorted) { + buffer.writeln(); + buffer.write( + _renderExtension_partial_callable_6(context8, context3, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context3.hasPublicConstantFields == true) { + buffer.write(''' +## Constants +'''); + for (var context9 in context3.publicConstantFieldsSorted) { + buffer.writeln(); + buffer.write( + _renderExtension_partial_constant_7(context9, context3, context0)); + buffer.writeln(); + } + } + } + buffer.write('\n\n'); + buffer.write(_renderExtension_partial_footer_8(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderExtension_partial_head_0( + ExtensionTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(context0.customHeader.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String _renderExtension_partial_source_link_1( + Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceHref == true) { + buffer.write(''' +[view source]('''); + buffer.write(context1.sourceHref.toString()); + buffer.write(''')'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderExtension_partial_categorization_2( + Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context2 in context1.displayedCategories) { + buffer.writeln(); + buffer.write(context2.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderExtension_partial_feature_set_3( + Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatureSet == true) { + for (var context2 in context1.displayedLanguageFeatures) { + buffer.write('\n '); + buffer.write(context2.featureLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderExtension_partial_documentation_4( + Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.writeln(); + buffer.write(context1.documentationAsHtml.toString()); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderExtension_partial_property_5( + Field context2, Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context2.linkedName.toString()); + buffer.write(' '); + buffer.write(context2.arrow.toString()); + buffer.write(' '); + buffer.write(context2.modelType.linkedName.toString()); + buffer.writeln(); + buffer.write(__renderExtension_partial_property_5_partial_categorization_0( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write(' '); + buffer.writeln(); + buffer.write(__renderExtension_partial_property_5_partial_features_1( + context2, context1, context0)); + buffer.writeln(); + return buffer.toString(); +} + +String __renderExtension_partial_property_5_partial_categorization_0< + T extends Extension>( + Field context2, Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context3 in context2.displayedCategories) { + buffer.writeln(); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderExtension_partial_property_5_partial_features_1< + T extends Extension>( + Field context2, Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderExtension_partial_callable_6( + Method context2, Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context2.linkedName.toString()); + buffer.write(context2.linkedGenericParameters.toString()); + buffer.write('''('''); + buffer.write(context2.linkedParamsNoMetadata.toString()); + buffer.write(''') '''); + buffer.write(context2.modelType.returnType.linkedName.toString()); + buffer.writeln(); + buffer.write(__renderExtension_partial_callable_6_partial_categorization_0( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write(' '); + buffer.writeln(); + buffer.write(__renderExtension_partial_callable_6_partial_features_1( + context2, context1, context0)); + buffer.writeln(); + return buffer.toString(); +} + +String __renderExtension_partial_callable_6_partial_categorization_0< + T extends Extension>( + Method context2, Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context3 in context2.displayedCategories) { + buffer.writeln(); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderExtension_partial_callable_6_partial_features_1< + T extends Extension>( + Method context2, Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderExtension_partial_constant_7( + Field context2, Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context2.linkedName.toString()); + buffer.write(''' const '''); + buffer.write(context2.modelType.linkedName.toString()); + buffer.writeln(); + buffer.write(__renderExtension_partial_constant_7_partial_categorization_0( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write(' '); + buffer.writeln(); + buffer.write(__renderExtension_partial_constant_7_partial_features_1( + context2, context1, context0)); + buffer.writeln(); + return buffer.toString(); +} + +String __renderExtension_partial_constant_7_partial_categorization_0< + T extends Extension>( + Field context2, Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context3 in context2.displayedCategories) { + buffer.writeln(); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderExtension_partial_constant_7_partial_features_1< + T extends Extension>( + Field context2, Extension context1, ExtensionTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderExtension_partial_footer_8( + ExtensionTemplateData context0) { + final buffer = StringBuffer(); + buffer.writeln(); + buffer.write(context0.customInnerFooter.toString()); + buffer.writeln(); + buffer.write(context0.customFooter.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String renderFunction(FunctionTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderFunction_partial_head_0(context0)); + buffer.writeln(); + if (context0.self != null) { + var context1 = context0.self; + buffer.write(''' +# '''); + buffer.write(context1.nameWithGenerics.toString()); + buffer.write(' '); + buffer.write(htmlEscape.convert(context1.kind.toString())); + buffer.write('\n\n'); + buffer.write(_renderFunction_partial_source_link_1(context1, context0)); + buffer.writeln(); + buffer.write(_renderFunction_partial_categorization_2(context1, context0)); + buffer.writeln(); + buffer.write(_renderFunction_partial_feature_set_3(context1, context0)); + } + buffer.writeln(); + if (context0.function != null) { + var context2 = context0.function; + buffer.writeln(); + buffer.write( + _renderFunction_partial_callable_multiline_4(context2, context0)); + buffer.write('\n\n'); + buffer.write(_renderFunction_partial_documentation_5(context2, context0)); + buffer.write('\n\n'); + buffer.write(_renderFunction_partial_source_code_6(context2, context0)); + buffer.writeln(); + } + buffer.write('\n\n'); + buffer.write(_renderFunction_partial_footer_7(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderFunction_partial_head_0(FunctionTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(context0.customHeader.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String _renderFunction_partial_source_link_1( + ModelFunction context1, FunctionTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceHref == true) { + buffer.write(''' +[view source]('''); + buffer.write(context1.sourceHref.toString()); + buffer.write(''')'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderFunction_partial_categorization_2( + ModelFunction context1, FunctionTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context2 in context1.displayedCategories) { + buffer.writeln(); + buffer.write(context2.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderFunction_partial_feature_set_3( + ModelFunction context1, FunctionTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatureSet == true) { + for (var context2 in context1.displayedLanguageFeatures) { + buffer.write('\n '); + buffer.write(context2.featureLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderFunction_partial_callable_multiline_4( + ModelFunction context1, FunctionTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasAnnotations == true) { + for (var context2 in context1.annotations) { + buffer.write(''' +- '''); + buffer.write(context2.linkedNameWithParameters.toString()); + } + } + buffer.write('\n\n'); + buffer.write(context1.modelType.returnType.linkedName.toString()); + buffer.write(' '); + buffer.write( + __renderFunction_partial_callable_multiline_4_partial_name_summary_0( + context1, context0)); + buffer.write(context1.genericParameters.toString()); + buffer.write('''('''); + if (context1.hasParameters == true) { + buffer.write(context1.linkedParamsLines.toString()); + } + buffer.write(''') +'''); + return buffer.toString(); +} + +String __renderFunction_partial_callable_multiline_4_partial_name_summary_0( + ModelFunction context1, FunctionTemplateData context0) { + final buffer = StringBuffer(); + if (context1.isConst == true) { + buffer.write('''const '''); + } + if (context1.isDeprecated == true) { + buffer.write('''~~'''); + } + buffer.write(htmlEscape.convert(context1.name.toString())); + if (context1.isDeprecated == true) { + buffer.write('''~~'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderFunction_partial_documentation_5( + ModelFunction context1, FunctionTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.writeln(); + buffer.write(context1.documentationAsHtml.toString()); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderFunction_partial_source_code_6( + ModelFunction context1, FunctionTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceCode == true) { + buffer.write(''' +## Implementation + +```dart +'''); + buffer.write(context1.sourceCode.toString()); + buffer.write(''' +```'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderFunction_partial_footer_7(FunctionTemplateData context0) { + final buffer = StringBuffer(); + buffer.writeln(); + buffer.write(context0.customInnerFooter.toString()); + buffer.writeln(); + buffer.write(context0.customFooter.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String renderIndex(PackageTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderIndex_partial_head_0(context0)); + buffer.write(''' + +# '''); + buffer.write(htmlEscape.convert(context0.title.toString())); + buffer.writeln(); + if (context0.defaultPackage != null) { + var context1 = context0.defaultPackage; + buffer.writeln(); + buffer.write(_renderIndex_partial_documentation_1(context1, context0)); + } + buffer.writeln(); + for (var context2 in context0.localPackages) { + if (context2.isFirstPackage == true) { + buffer.write(''' +## Libraries'''); + } + if (context2.isFirstPackage != true) { + buffer.write(''' +## '''); + buffer.write(htmlEscape.convert(context2.name.toString())); + } + buffer.writeln(); + if (context2.defaultCategory != null) { + var context3 = context2.defaultCategory; + for (var context4 in context3.publicLibrariesSorted) { + buffer.writeln(); + buffer.write(_renderIndex_partial_library_2( + context4, context3, context2, context0)); + } + } + buffer.writeln(); + for (var context5 in context2.categoriesWithPublicLibraries) { + buffer.write(''' +### Category '''); + buffer.write(context5.categoryLabel.toString()); + buffer.writeln(); + for (var context6 in context5.publicLibrariesSorted) { + buffer.writeln(); + buffer.write(_renderIndex_partial_library_2( + context6, context5, context2, context0)); + } + } + } + buffer.write('\n\n'); + buffer.write(_renderIndex_partial_footer_3(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderIndex_partial_head_0(PackageTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(context0.customHeader.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String _renderIndex_partial_documentation_1( + Package context1, PackageTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.writeln(); + buffer.write(context1.documentationAsHtml.toString()); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderIndex_partial_library_2(Library context3, + LibraryContainer context2, Package context1, PackageTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context3.linkedName.toString()); + if (context3.isDocumented == true) { + buffer.writeln(); + buffer.write(context3.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context3.extendedDocLink.toString()); + buffer.writeln(); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderIndex_partial_footer_3(PackageTemplateData context0) { + final buffer = StringBuffer(); + buffer.writeln(); + buffer.write(context0.customInnerFooter.toString()); + buffer.writeln(); + buffer.write(context0.customFooter.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String renderLibrary(LibraryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderLibrary_partial_head_0(context0)); + buffer.writeln(); + if (context0.self != null) { + var context1 = context0.self; + buffer.write(''' +# '''); + buffer.write(context1.name.toString()); + buffer.write(' '); + buffer.write(htmlEscape.convert(context1.kind.toString())); + buffer.write('\n\n'); + buffer.write(_renderLibrary_partial_source_link_1(context1, context0)); + buffer.writeln(); + buffer.write(_renderLibrary_partial_categorization_2(context1, context0)); + buffer.writeln(); + buffer.write(_renderLibrary_partial_feature_set_3(context1, context0)); + } + buffer.writeln(); + if (context0.library != null) { + var context2 = context0.library; + buffer.writeln(); + buffer.write(_renderLibrary_partial_documentation_4(context2, context0)); + } + buffer.writeln(); + if (context0.library != null) { + var context3 = context0.library; + if (context3.hasPublicClasses == true) { + buffer.write(''' +## Classes +'''); + if (context3.library != null) { + var context4 = context3.library; + for (var context5 in context4.publicClassesSorted) { + buffer.writeln(); + buffer.write(_renderLibrary_partial_class_5( + context5, context4, context3, context0)); + buffer.writeln(); + } + } + } + } + buffer.writeln(); + if (context0.library != null) { + var context6 = context0.library; + if (context6.hasPublicMixins == true) { + buffer.write(''' +## Mixins +'''); + if (context6.library != null) { + var context7 = context6.library; + for (var context8 in context7.publicMixinsSorted) { + buffer.writeln(); + buffer.write(_renderLibrary_partial_mixin_6( + context8, context7, context6, context0)); + buffer.writeln(); + } + } + } + } + buffer.writeln(); + if (context0.library != null) { + var context9 = context0.library; + if (context9.hasPublicExtensions == true) { + buffer.write(''' +## Extensions +'''); + if (context9.library != null) { + var context10 = context9.library; + for (var context11 in context10.publicExtensionsSorted) { + buffer.writeln(); + buffer.write(_renderLibrary_partial_extension_7( + context11, context10, context9, context0)); + buffer.writeln(); + } + } + } + } + buffer.writeln(); + if (context0.library != null) { + var context12 = context0.library; + if (context12.hasPublicConstants == true) { + buffer.write(''' +## Constants +'''); + if (context12.library != null) { + var context13 = context12.library; + for (var context14 in context13.publicConstantsSorted) { + buffer.writeln(); + buffer.write(_renderLibrary_partial_constant_8( + context14, context13, context12, context0)); + buffer.writeln(); + } + } + } + } + buffer.writeln(); + if (context0.library != null) { + var context15 = context0.library; + if (context15.hasPublicProperties == true) { + buffer.write(''' +## Properties +'''); + if (context15.library != null) { + var context16 = context15.library; + for (var context17 in context16.publicPropertiesSorted) { + buffer.writeln(); + buffer.write(_renderLibrary_partial_property_9( + context17, context16, context15, context0)); + buffer.writeln(); + } + } + } + } + buffer.writeln(); + if (context0.library != null) { + var context18 = context0.library; + if (context18.hasPublicFunctions == true) { + buffer.write(''' +## Functions +'''); + if (context18.library != null) { + var context19 = context18.library; + for (var context20 in context19.publicFunctionsSorted) { + buffer.writeln(); + buffer.write(_renderLibrary_partial_callable_10( + context20, context19, context18, context0)); + buffer.writeln(); + } + } + } + } + buffer.writeln(); + if (context0.library != null) { + var context21 = context0.library; + if (context21.hasPublicEnums == true) { + buffer.write(''' +## Enums +'''); + if (context21.library != null) { + var context22 = context21.library; + for (var context23 in context22.publicEnumsSorted) { + buffer.writeln(); + buffer.write(_renderLibrary_partial_class_5( + context23, context22, context21, context0)); + buffer.writeln(); + } + } + } + } + buffer.writeln(); + if (context0.library != null) { + var context24 = context0.library; + if (context24.hasPublicTypedefs == true) { + buffer.write(''' +## Typedefs +'''); + if (context24.library != null) { + var context25 = context24.library; + for (var context26 in context25.publicTypedefsSorted) { + buffer.writeln(); + buffer.write(_renderLibrary_partial_typedef_11( + context26, context25, context24, context0)); + buffer.writeln(); + } + } + } + } + buffer.writeln(); + if (context0.library != null) { + var context27 = context0.library; + if (context27.hasPublicExceptions == true) { + buffer.write(''' +## Exceptions / Errors +'''); + if (context27.library != null) { + var context28 = context27.library; + for (var context29 in context28.publicExceptionsSorted) { + buffer.writeln(); + buffer.write(_renderLibrary_partial_class_5( + context29, context28, context27, context0)); + buffer.writeln(); + } + } + } + } + buffer.write('\n\n'); + buffer.write(_renderLibrary_partial_footer_12(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderLibrary_partial_head_0(LibraryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(context0.customHeader.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String _renderLibrary_partial_source_link_1( + Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceHref == true) { + buffer.write(''' +[view source]('''); + buffer.write(context1.sourceHref.toString()); + buffer.write(''')'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderLibrary_partial_categorization_2( + Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context2 in context1.displayedCategories) { + buffer.writeln(); + buffer.write(context2.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderLibrary_partial_feature_set_3( + Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatureSet == true) { + for (var context2 in context1.displayedLanguageFeatures) { + buffer.write('\n '); + buffer.write(context2.featureLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderLibrary_partial_documentation_4( + Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.writeln(); + buffer.write(context1.documentationAsHtml.toString()); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderLibrary_partial_class_5(Class context3, Library context2, + Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context3.linkedName.toString()); + buffer.write(context3.linkedGenericParameters.toString()); + buffer.writeln(); + buffer.write(__renderLibrary_partial_class_5_partial_categorization_0( + context3, context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context3.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context3.extendedDocLink.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String __renderLibrary_partial_class_5_partial_categorization_0(Class context3, + Library context2, Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context4 in context3.displayedCategories) { + buffer.writeln(); + buffer.write(context4.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderLibrary_partial_mixin_6(Mixin context3, Library context2, + Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context3.linkedName.toString()); + buffer.write(context3.linkedGenericParameters.toString()); + buffer.writeln(); + buffer.write(__renderLibrary_partial_mixin_6_partial_categorization_0( + context3, context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context3.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context3.extendedDocLink.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String __renderLibrary_partial_mixin_6_partial_categorization_0(Mixin context3, + Library context2, Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context4 in context3.displayedCategories) { + buffer.writeln(); + buffer.write(context4.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderLibrary_partial_extension_7(Extension context3, Library context2, + Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context3.linkedName.toString()); + buffer.writeln(); + buffer.write(__renderLibrary_partial_extension_7_partial_categorization_0( + context3, context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context3.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context3.extendedDocLink.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String __renderLibrary_partial_extension_7_partial_categorization_0( + Extension context3, + Library context2, + Library context1, + LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context4 in context3.displayedCategories) { + buffer.writeln(); + buffer.write(context4.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderLibrary_partial_constant_8(TopLevelVariable context3, + Library context2, Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context3.linkedName.toString()); + buffer.write(''' const '''); + buffer.write(context3.modelType.linkedName.toString()); + buffer.writeln(); + buffer.write(__renderLibrary_partial_constant_8_partial_categorization_0( + context3, context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context3.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context3.extendedDocLink.toString()); + buffer.write(' '); + buffer.writeln(); + buffer.write(__renderLibrary_partial_constant_8_partial_features_1( + context3, context2, context1, context0)); + buffer.writeln(); + return buffer.toString(); +} + +String __renderLibrary_partial_constant_8_partial_categorization_0( + TopLevelVariable context3, + Library context2, + Library context1, + LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context4 in context3.displayedCategories) { + buffer.writeln(); + buffer.write(context4.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderLibrary_partial_constant_8_partial_features_1( + TopLevelVariable context3, + Library context2, + Library context1, + LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context3.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderLibrary_partial_property_9(TopLevelVariable context3, + Library context2, Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context3.linkedName.toString()); + buffer.write(' '); + buffer.write(context3.arrow.toString()); + buffer.write(' '); + buffer.write(context3.modelType.linkedName.toString()); + buffer.writeln(); + buffer.write(__renderLibrary_partial_property_9_partial_categorization_0( + context3, context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context3.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context3.extendedDocLink.toString()); + buffer.write(' '); + buffer.writeln(); + buffer.write(__renderLibrary_partial_property_9_partial_features_1( + context3, context2, context1, context0)); + buffer.writeln(); + return buffer.toString(); +} + +String __renderLibrary_partial_property_9_partial_categorization_0( + TopLevelVariable context3, + Library context2, + Library context1, + LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context4 in context3.displayedCategories) { + buffer.writeln(); + buffer.write(context4.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderLibrary_partial_property_9_partial_features_1( + TopLevelVariable context3, + Library context2, + Library context1, + LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context3.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderLibrary_partial_callable_10(ModelFunctionTyped context3, + Library context2, Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context3.linkedName.toString()); + buffer.write(context3.linkedGenericParameters.toString()); + buffer.write('''('''); + buffer.write(context3.linkedParamsNoMetadata.toString()); + buffer.write(''') '''); + buffer.write(context3.modelType.returnType.linkedName.toString()); + buffer.writeln(); + buffer.write(__renderLibrary_partial_callable_10_partial_categorization_0( + context3, context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context3.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context3.extendedDocLink.toString()); + buffer.write(' '); + buffer.writeln(); + buffer.write(__renderLibrary_partial_callable_10_partial_features_1( + context3, context2, context1, context0)); + buffer.writeln(); + return buffer.toString(); +} + +String __renderLibrary_partial_callable_10_partial_categorization_0( + ModelFunctionTyped context3, + Library context2, + Library context1, + LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context4 in context3.displayedCategories) { + buffer.writeln(); + buffer.write(context4.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderLibrary_partial_callable_10_partial_features_1( + ModelFunctionTyped context3, + Library context2, + Library context1, + LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context3.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderLibrary_partial_typedef_11(Typedef context3, Library context2, + Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.isCallable == true) { + if (context3.asCallable != null) { + var context4 = context3.asCallable; + buffer.write('\n '); + buffer.write(__renderLibrary_partial_typedef_11_partial_callable_0( + context4, context3, context2, context1, context0)); + } + } + if (context3.isCallable != true) { + buffer.write('\n '); + buffer.write(__renderLibrary_partial_typedef_11_partial_type_1( + context3, context2, context1, context0)); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderLibrary_partial_typedef_11_partial_callable_0( + FunctionTypedef context4, + Typedef context3, + Library context2, + Library context1, + LibraryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context4.linkedName.toString()); + buffer.write(context4.linkedGenericParameters.toString()); + buffer.write('''('''); + buffer.write(context4.linkedParamsNoMetadata.toString()); + buffer.write(''') '''); + buffer.write(context4.modelType.returnType.linkedName.toString()); + buffer.writeln(); + buffer.write( + ___renderLibrary_partial_typedef_11_partial_callable_0_partial_categorization_0( + context4, context3, context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context4.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context4.extendedDocLink.toString()); + buffer.write(' '); + buffer.writeln(); + buffer.write( + ___renderLibrary_partial_typedef_11_partial_callable_0_partial_features_1( + context4, context3, context2, context1, context0)); + buffer.writeln(); + return buffer.toString(); +} + +String + ___renderLibrary_partial_typedef_11_partial_callable_0_partial_categorization_0( + FunctionTypedef context4, + Typedef context3, + Library context2, + Library context1, + LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context4.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context5 in context4.displayedCategories) { + buffer.writeln(); + buffer.write(context5.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String + ___renderLibrary_partial_typedef_11_partial_callable_0_partial_features_1( + FunctionTypedef context4, + Typedef context3, + Library context2, + Library context1, + LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context4.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context4.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderLibrary_partial_typedef_11_partial_type_1(Typedef context3, + Library context2, Library context1, LibraryTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context3.linkedName.toString()); + buffer.write(context3.linkedGenericParameters.toString()); + buffer.write('''('''); + buffer.write(context3.linkedParamsNoMetadata.toString()); + buffer.write(''') '''); + buffer.write(context3.modelType.linkedName.toString()); + buffer.writeln(); + buffer.write( + ___renderLibrary_partial_typedef_11_partial_type_1_partial_categorization_0( + context3, context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context3.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context3.extendedDocLink.toString()); + buffer.write(' '); + buffer.writeln(); + buffer.write( + ___renderLibrary_partial_typedef_11_partial_type_1_partial_features_1( + context3, context2, context1, context0)); + buffer.writeln(); + return buffer.toString(); +} + +String + ___renderLibrary_partial_typedef_11_partial_type_1_partial_categorization_0( + Typedef context3, + Library context2, + Library context1, + LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context4 in context3.displayedCategories) { + buffer.writeln(); + buffer.write(context4.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String ___renderLibrary_partial_typedef_11_partial_type_1_partial_features_1( + Typedef context3, + Library context2, + Library context1, + LibraryTemplateData context0) { + final buffer = StringBuffer(); + if (context3.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context3.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderLibrary_partial_footer_12(LibraryTemplateData context0) { + final buffer = StringBuffer(); + buffer.writeln(); + buffer.write(context0.customInnerFooter.toString()); + buffer.writeln(); + buffer.write(context0.customFooter.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String renderMethod(MethodTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderMethod_partial_head_0(context0)); + buffer.writeln(); + if (context0.self != null) { + var context1 = context0.self; + buffer.write(''' +# '''); + buffer.write(context1.nameWithGenerics.toString()); + buffer.write(' '); + buffer.write(htmlEscape.convert(context1.kind.toString())); + buffer.write('\n\n'); + buffer.write(_renderMethod_partial_source_link_1(context1, context0)); + buffer.writeln(); + buffer.write(_renderMethod_partial_feature_set_2(context1, context0)); + } + buffer.writeln(); + if (context0.method != null) { + var context2 = context0.method; + buffer.writeln(); + buffer + .write(_renderMethod_partial_callable_multiline_3(context2, context0)); + buffer.writeln(); + buffer.write(_renderMethod_partial_features_4(context2, context0)); + buffer.write('\n\n'); + buffer.write(_renderMethod_partial_documentation_5(context2, context0)); + buffer.write('\n\n'); + buffer.write(_renderMethod_partial_source_code_6(context2, context0)); + buffer.writeln(); + } + buffer.write('\n\n'); + buffer.write(_renderMethod_partial_footer_7(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderMethod_partial_head_0(MethodTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(context0.customHeader.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String _renderMethod_partial_source_link_1( + Method context1, MethodTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceHref == true) { + buffer.write(''' +[view source]('''); + buffer.write(context1.sourceHref.toString()); + buffer.write(''')'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderMethod_partial_feature_set_2( + Method context1, MethodTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatureSet == true) { + for (var context2 in context1.displayedLanguageFeatures) { + buffer.write('\n '); + buffer.write(context2.featureLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderMethod_partial_callable_multiline_3( + Method context1, MethodTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasAnnotations == true) { + for (var context2 in context1.annotations) { + buffer.write(''' +- '''); + buffer.write(context2.linkedNameWithParameters.toString()); + } + } + buffer.write('\n\n'); + buffer.write(context1.modelType.returnType.linkedName.toString()); + buffer.write(' '); + buffer.write( + __renderMethod_partial_callable_multiline_3_partial_name_summary_0( + context1, context0)); + buffer.write(context1.genericParameters.toString()); + buffer.write('''('''); + if (context1.hasParameters == true) { + buffer.write(context1.linkedParamsLines.toString()); + } + buffer.write(''') +'''); + return buffer.toString(); +} + +String __renderMethod_partial_callable_multiline_3_partial_name_summary_0( + Method context1, MethodTemplateData context0) { + final buffer = StringBuffer(); + if (context1.isConst == true) { + buffer.write('''const '''); + } + if (context1.isDeprecated == true) { + buffer.write('''~~'''); + } + buffer.write(htmlEscape.convert(context1.name.toString())); + if (context1.isDeprecated == true) { + buffer.write('''~~'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderMethod_partial_features_4( + Method context1, MethodTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context1.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderMethod_partial_documentation_5( + Method context1, MethodTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.writeln(); + buffer.write(context1.documentationAsHtml.toString()); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderMethod_partial_source_code_6( + Method context1, MethodTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceCode == true) { + buffer.write(''' +## Implementation + +```dart +'''); + buffer.write(context1.sourceCode.toString()); + buffer.write(''' +```'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderMethod_partial_footer_7(MethodTemplateData context0) { + final buffer = StringBuffer(); + buffer.writeln(); + buffer.write(context0.customInnerFooter.toString()); + buffer.writeln(); + buffer.write(context0.customFooter.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String renderMixin(MixinTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderMixin_partial_head_0(context0)); + buffer.writeln(); + if (context0.self != null) { + var context1 = context0.self; + buffer.write(''' +# '''); + buffer.write(context1.nameWithGenerics.toString()); + buffer.write(' '); + buffer.write(htmlEscape.convert(context1.kind.toString())); + buffer.write('\n\n'); + buffer.write(_renderMixin_partial_source_link_1(context1, context0)); + buffer.writeln(); + buffer.write(_renderMixin_partial_categorization_2(context1, context0)); + buffer.writeln(); + buffer.write(_renderMixin_partial_feature_set_3(context1, context0)); + } + buffer.writeln(); + if (context0.mixin != null) { + var context2 = context0.mixin; + buffer.writeln(); + buffer.write(_renderMixin_partial_documentation_4(context2, context0)); + buffer.writeln(); + if (context2.hasModifiers == true) { + if (context2.hasPublicSuperclassConstraints == true) { + buffer.write(''' +**Superclass Constraints** +'''); + for (var context3 in context2.publicSuperclassConstraints) { + buffer.write(''' +- '''); + buffer.write(context3.linkedName.toString()); + } + } + buffer.writeln(); + if (context2.hasPublicSuperChainReversed == true) { + buffer.write(''' +**Inheritance** + +- '''); + buffer.write(context0.linkedObjectType.toString()); + for (var context4 in context2.publicSuperChainReversed) { + buffer.write(''' +- '''); + buffer.write(context4.linkedName.toString()); + } + buffer.write(''' +- '''); + buffer.write(context2.name.toString()); + } + buffer.writeln(); + if (context2.hasPublicInterfaces == true) { + buffer.write(''' +**Implemented types** +'''); + for (var context5 in context2.publicInterfaces) { + buffer.write(''' +- '''); + buffer.write(context5.linkedName.toString()); + } + } + buffer.writeln(); + if (context2.hasPublicMixedInTypes == true) { + buffer.write(''' +**Mixed in types** +'''); + for (var context6 in context2.publicMixedInTypes) { + buffer.write(''' +- '''); + buffer.write(context6.linkedName.toString()); + } + } + buffer.writeln(); + if (context2.hasPublicImplementors == true) { + buffer.write(''' +**Implementers** +'''); + for (var context7 in context2.publicImplementorsSorted) { + buffer.write(''' +- '''); + buffer.write(context7.linkedName.toString()); + } + } + buffer.writeln(); + if (context2.hasAnnotations == true) { + buffer.write(''' +**Annotations** +'''); + for (var context8 in context2.annotations) { + buffer.write(''' +- '''); + buffer.write(context8.linkedNameWithParameters.toString()); + } + } + } + buffer.writeln(); + if (context2.hasPublicConstructors == true) { + buffer.write(''' +## Constructors +'''); + for (var context9 in context2.publicConstructorsSorted) { + buffer.writeln(); + buffer.write(context9.linkedName.toString()); + buffer.write('''('''); + buffer.write(context9.linkedParams.toString()); + buffer.write(''') + +'''); + buffer.write(context9.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context9.extendedDocLink.toString()); + buffer.write(' '); + if (context9.isConst == true) { + buffer.write('''_const_'''); + } + buffer.write(' '); + if (context9.isFactory == true) { + buffer.write('''_factory_'''); + } + buffer.writeln(); + } + } + buffer.writeln(); + if (context2.hasPublicInstanceFields == true) { + buffer.write(''' +## Properties +'''); + for (var context10 in context2.publicInstanceFieldsSorted) { + buffer.writeln(); + buffer.write( + _renderMixin_partial_property_5(context10, context2, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context2.hasPublicInstanceMethods == true) { + buffer.write(''' +## Methods +'''); + for (var context11 in context2.publicInstanceMethodsSorted) { + buffer.writeln(); + buffer.write( + _renderMixin_partial_callable_6(context11, context2, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context2.hasPublicInstanceOperators == true) { + buffer.write(''' +## Operators +'''); + for (var context12 in context2.publicInstanceOperatorsSorted) { + buffer.writeln(); + buffer.write( + _renderMixin_partial_callable_6(context12, context2, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context2.hasPublicVariableStaticFields == true) { + buffer.write(''' +## Static Properties +'''); + for (var context13 in context2.publicVariableStaticFieldsSorted) { + buffer.writeln(); + buffer.write( + _renderMixin_partial_property_5(context13, context2, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context2.hasPublicStaticMethods == true) { + buffer.write(''' +## Static Methods +'''); + for (var context14 in context2.publicStaticMethodsSorted) { + buffer.writeln(); + buffer.write( + _renderMixin_partial_callable_6(context14, context2, context0)); + buffer.writeln(); + } + } + buffer.writeln(); + if (context2.hasPublicConstantFields == true) { + buffer.write(''' +## Constants +'''); + for (var context15 in context2.publicConstantFieldsSorted) { + buffer.writeln(); + buffer.write( + _renderMixin_partial_constant_7(context15, context2, context0)); + buffer.writeln(); + } + } + } + buffer.write('\n\n'); + buffer.write(_renderMixin_partial_footer_8(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderMixin_partial_head_0(MixinTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(context0.customHeader.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String _renderMixin_partial_source_link_1( + Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceHref == true) { + buffer.write(''' +[view source]('''); + buffer.write(context1.sourceHref.toString()); + buffer.write(''')'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderMixin_partial_categorization_2( + Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context2 in context1.displayedCategories) { + buffer.writeln(); + buffer.write(context2.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderMixin_partial_feature_set_3( + Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatureSet == true) { + for (var context2 in context1.displayedLanguageFeatures) { + buffer.write('\n '); + buffer.write(context2.featureLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderMixin_partial_documentation_4( + Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.writeln(); + buffer.write(context1.documentationAsHtml.toString()); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderMixin_partial_property_5( + Field context2, Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context2.linkedName.toString()); + buffer.write(' '); + buffer.write(context2.arrow.toString()); + buffer.write(' '); + buffer.write(context2.modelType.linkedName.toString()); + buffer.writeln(); + buffer.write(__renderMixin_partial_property_5_partial_categorization_0( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write(' '); + buffer.writeln(); + buffer.write(__renderMixin_partial_property_5_partial_features_1( + context2, context1, context0)); + buffer.writeln(); + return buffer.toString(); +} + +String __renderMixin_partial_property_5_partial_categorization_0( + Field context2, Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context3 in context2.displayedCategories) { + buffer.writeln(); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderMixin_partial_property_5_partial_features_1( + Field context2, Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderMixin_partial_callable_6( + Method context2, Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context2.linkedName.toString()); + buffer.write(context2.linkedGenericParameters.toString()); + buffer.write('''('''); + buffer.write(context2.linkedParamsNoMetadata.toString()); + buffer.write(''') '''); + buffer.write(context2.modelType.returnType.linkedName.toString()); + buffer.writeln(); + buffer.write(__renderMixin_partial_callable_6_partial_categorization_0( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write(' '); + buffer.writeln(); + buffer.write(__renderMixin_partial_callable_6_partial_features_1( + context2, context1, context0)); + buffer.writeln(); + return buffer.toString(); +} + +String __renderMixin_partial_callable_6_partial_categorization_0( + Method context2, Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context3 in context2.displayedCategories) { + buffer.writeln(); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderMixin_partial_callable_6_partial_features_1( + Method context2, Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderMixin_partial_constant_7( + Field context2, Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + buffer.write('''##### '''); + buffer.write(context2.linkedName.toString()); + buffer.write(''' const '''); + buffer.write(context2.modelType.linkedName.toString()); + buffer.writeln(); + buffer.write(__renderMixin_partial_constant_7_partial_categorization_0( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write(context2.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context2.extendedDocLink.toString()); + buffer.write(' '); + buffer.writeln(); + buffer.write(__renderMixin_partial_constant_7_partial_features_1( + context2, context1, context0)); + buffer.writeln(); + return buffer.toString(); +} + +String __renderMixin_partial_constant_7_partial_categorization_0( + Field context2, Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context3 in context2.displayedCategories) { + buffer.writeln(); + buffer.write(context3.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderMixin_partial_constant_7_partial_features_1( + Field context2, Mixin context1, MixinTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderMixin_partial_footer_8(MixinTemplateData context0) { + final buffer = StringBuffer(); + buffer.writeln(); + buffer.write(context0.customInnerFooter.toString()); + buffer.writeln(); + buffer.write(context0.customFooter.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String renderProperty(PropertyTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderProperty_partial_head_0(context0)); + buffer.writeln(); + if (context0.self != null) { + var context1 = context0.self; + buffer.write(''' +# '''); + buffer.write(htmlEscape.convert(context1.name.toString())); + buffer.write(' '); + buffer.write(htmlEscape.convert(context1.kind.toString())); + buffer.write('\n\n'); + buffer.write(_renderProperty_partial_source_link_1(context1, context0)); + buffer.writeln(); + buffer.write(_renderProperty_partial_feature_set_2(context1, context0)); + } + buffer.writeln(); + if (context0.self != null) { + var context2 = context0.self; + if (context2.hasNoGetterSetter == true) { + buffer.writeln(); + buffer.write(context2.modelType.linkedName.toString()); + buffer.write(' '); + buffer.write(_renderProperty_partial_name_summary_3(context2, context0)); + buffer.write(' '); + buffer.writeln(); + buffer.write(_renderProperty_partial_features_4(context2, context0)); + buffer.write('\n\n'); + buffer.write(_renderProperty_partial_documentation_5(context2, context0)); + buffer.write('\n\n'); + buffer.write(_renderProperty_partial_source_code_6(context2, context0)); + } + buffer.writeln(); + if (context2.hasGetterOrSetter == true) { + if (context2.hasGetter == true) { + buffer.writeln(); + buffer.write( + _renderProperty_partial_accessor_getter_7(context2, context0)); + } + buffer.writeln(); + if (context2.hasSetter == true) { + buffer.writeln(); + buffer.write( + _renderProperty_partial_accessor_setter_8(context2, context0)); + } + } + } + buffer.write('\n\n'); + buffer.write(_renderProperty_partial_footer_9(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderProperty_partial_head_0(PropertyTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(context0.customHeader.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String _renderProperty_partial_source_link_1( + Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceHref == true) { + buffer.write(''' +[view source]('''); + buffer.write(context1.sourceHref.toString()); + buffer.write(''')'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderProperty_partial_feature_set_2( + Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatureSet == true) { + for (var context2 in context1.displayedLanguageFeatures) { + buffer.write('\n '); + buffer.write(context2.featureLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderProperty_partial_name_summary_3( + Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.isConst == true) { + buffer.write('''const '''); + } + if (context1.isDeprecated == true) { + buffer.write('''~~'''); + } + buffer.write(htmlEscape.convert(context1.name.toString())); + if (context1.isDeprecated == true) { + buffer.write('''~~'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderProperty_partial_features_4( + Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context1.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderProperty_partial_documentation_5( + Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.writeln(); + buffer.write(context1.documentationAsHtml.toString()); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderProperty_partial_source_code_6( + Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceCode == true) { + buffer.write(''' +## Implementation + +```dart +'''); + buffer.write(context1.sourceCode.toString()); + buffer.write(''' +```'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderProperty_partial_accessor_getter_7( + Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.getter != null) { + var context2 = context1.getter; + buffer.writeln(); + buffer.write(context2.modelType.returnType.linkedName.toString()); + buffer.write(' '); + buffer.write( + __renderProperty_partial_accessor_getter_7_partial_name_summary_0( + context2, context1, context0)); + buffer.write(' '); + buffer.writeln(); + buffer.write(__renderProperty_partial_accessor_getter_7_partial_features_1( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write( + __renderProperty_partial_accessor_getter_7_partial_documentation_2( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write( + __renderProperty_partial_accessor_getter_7_partial_source_code_3( + context2, context1, context0)); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderProperty_partial_accessor_getter_7_partial_name_summary_0( + ContainerAccessor context2, Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.isConst == true) { + buffer.write('''const '''); + } + if (context2.isDeprecated == true) { + buffer.write('''~~'''); + } + buffer.write(htmlEscape.convert(context2.name.toString())); + if (context2.isDeprecated == true) { + buffer.write('''~~'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderProperty_partial_accessor_getter_7_partial_features_1( + ContainerAccessor context2, Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderProperty_partial_accessor_getter_7_partial_documentation_2( + ContainerAccessor context2, Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasDocumentation == true) { + buffer.writeln(); + buffer.write(context2.documentationAsHtml.toString()); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderProperty_partial_accessor_getter_7_partial_source_code_3( + ContainerAccessor context2, Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasSourceCode == true) { + buffer.write(''' +## Implementation + +```dart +'''); + buffer.write(context2.sourceCode.toString()); + buffer.write(''' +```'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderProperty_partial_accessor_setter_8( + Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.setter != null) { + var context2 = context1.setter; + buffer.writeln(); + buffer.write( + __renderProperty_partial_accessor_setter_8_partial_name_summary_0( + context2, context1, context0)); + buffer.write('''('''); + buffer.write(context2.linkedParamsNoMetadata.toString()); + buffer.write(''') '''); + buffer.writeln(); + buffer.write(__renderProperty_partial_accessor_setter_8_partial_features_1( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write( + __renderProperty_partial_accessor_setter_8_partial_documentation_2( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write( + __renderProperty_partial_accessor_setter_8_partial_source_code_3( + context2, context1, context0)); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderProperty_partial_accessor_setter_8_partial_name_summary_0( + ContainerAccessor context2, Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.isConst == true) { + buffer.write('''const '''); + } + if (context2.isDeprecated == true) { + buffer.write('''~~'''); + } + buffer.write(htmlEscape.convert(context2.name.toString())); + if (context2.isDeprecated == true) { + buffer.write('''~~'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderProperty_partial_accessor_setter_8_partial_features_1( + ContainerAccessor context2, Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderProperty_partial_accessor_setter_8_partial_documentation_2( + ContainerAccessor context2, Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasDocumentation == true) { + buffer.writeln(); + buffer.write(context2.documentationAsHtml.toString()); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderProperty_partial_accessor_setter_8_partial_source_code_3( + ContainerAccessor context2, Field context1, PropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasSourceCode == true) { + buffer.write(''' +## Implementation + +```dart +'''); + buffer.write(context2.sourceCode.toString()); + buffer.write(''' +```'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderProperty_partial_footer_9(PropertyTemplateData context0) { + final buffer = StringBuffer(); + buffer.writeln(); + buffer.write(context0.customInnerFooter.toString()); + buffer.writeln(); + buffer.write(context0.customFooter.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String renderSidebarForContainer( + TemplateDataWithContainer context0) { + final buffer = StringBuffer(); + return buffer.toString(); +} + +String renderSidebarForLibrary( + TemplateDataWithLibrary context0) { + final buffer = StringBuffer(); + return buffer.toString(); +} + +String renderTopLevelProperty(TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderTopLevelProperty_partial_head_0(context0)); + buffer.writeln(); + if (context0.self != null) { + var context1 = context0.self; + buffer.write(''' +# '''); + buffer.write(context1.name.toString()); + buffer.write(' '); + buffer.write(htmlEscape.convert(context1.kind.toString())); + buffer.write('\n\n'); + buffer.write( + _renderTopLevelProperty_partial_source_link_1(context1, context0)); + buffer.writeln(); + buffer.write( + _renderTopLevelProperty_partial_categorization_2(context1, context0)); + buffer.writeln(); + buffer.write( + _renderTopLevelProperty_partial_feature_set_3(context1, context0)); + buffer.writeln(); + if (context1.hasNoGetterSetter == true) { + buffer.writeln(); + buffer.write(context1.modelType.linkedName.toString()); + buffer.write(' '); + buffer.write( + _renderTopLevelProperty_partial_name_summary_4(context1, context0)); + buffer.write(' '); + buffer.writeln(); + buffer.write( + _renderTopLevelProperty_partial_features_5(context1, context0)); + buffer.write('\n\n'); + buffer.write( + _renderTopLevelProperty_partial_documentation_6(context1, context0)); + buffer.write('\n\n'); + buffer.write( + _renderTopLevelProperty_partial_source_code_7(context1, context0)); + } + buffer.writeln(); + if (context1.hasExplicitGetter == true) { + buffer.writeln(); + buffer.write(_renderTopLevelProperty_partial_accessor_getter_8( + context1, context0)); + } + buffer.writeln(); + if (context1.hasExplicitSetter == true) { + buffer.writeln(); + buffer.write(_renderTopLevelProperty_partial_accessor_setter_9( + context1, context0)); + } + } + buffer.write('\n\n'); + buffer.write(_renderTopLevelProperty_partial_footer_10(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderTopLevelProperty_partial_head_0( + TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(context0.customHeader.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String _renderTopLevelProperty_partial_source_link_1( + TopLevelVariable context1, TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceHref == true) { + buffer.write(''' +[view source]('''); + buffer.write(context1.sourceHref.toString()); + buffer.write(''')'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTopLevelProperty_partial_categorization_2( + TopLevelVariable context1, TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context2 in context1.displayedCategories) { + buffer.writeln(); + buffer.write(context2.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTopLevelProperty_partial_feature_set_3( + TopLevelVariable context1, TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatureSet == true) { + for (var context2 in context1.displayedLanguageFeatures) { + buffer.write('\n '); + buffer.write(context2.featureLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTopLevelProperty_partial_name_summary_4( + TopLevelVariable context1, TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.isConst == true) { + buffer.write('''const '''); + } + if (context1.isDeprecated == true) { + buffer.write('''~~'''); + } + buffer.write(htmlEscape.convert(context1.name.toString())); + if (context1.isDeprecated == true) { + buffer.write('''~~'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTopLevelProperty_partial_features_5( + TopLevelVariable context1, TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context1.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTopLevelProperty_partial_documentation_6( + TopLevelVariable context1, TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.writeln(); + buffer.write(context1.documentationAsHtml.toString()); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTopLevelProperty_partial_source_code_7( + TopLevelVariable context1, TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceCode == true) { + buffer.write(''' +## Implementation + +```dart +'''); + buffer.write(context1.sourceCode.toString()); + buffer.write(''' +```'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTopLevelProperty_partial_accessor_getter_8( + TopLevelVariable context1, TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.getter != null) { + var context2 = context1.getter; + buffer.writeln(); + buffer.write(context2.modelType.returnType.linkedName.toString()); + buffer.write(' '); + buffer.write( + __renderTopLevelProperty_partial_accessor_getter_8_partial_name_summary_0( + context2, context1, context0)); + buffer.write(' '); + buffer.writeln(); + buffer.write( + __renderTopLevelProperty_partial_accessor_getter_8_partial_features_1( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write( + __renderTopLevelProperty_partial_accessor_getter_8_partial_documentation_2( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write( + __renderTopLevelProperty_partial_accessor_getter_8_partial_source_code_3( + context2, context1, context0)); + } + buffer.writeln(); + return buffer.toString(); +} + +String + __renderTopLevelProperty_partial_accessor_getter_8_partial_name_summary_0( + Accessor context2, + TopLevelVariable context1, + TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.isConst == true) { + buffer.write('''const '''); + } + if (context2.isDeprecated == true) { + buffer.write('''~~'''); + } + buffer.write(htmlEscape.convert(context2.name.toString())); + if (context2.isDeprecated == true) { + buffer.write('''~~'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderTopLevelProperty_partial_accessor_getter_8_partial_features_1( + Accessor context2, + TopLevelVariable context1, + TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String + __renderTopLevelProperty_partial_accessor_getter_8_partial_documentation_2( + Accessor context2, + TopLevelVariable context1, + TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasDocumentation == true) { + buffer.writeln(); + buffer.write(context2.documentationAsHtml.toString()); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderTopLevelProperty_partial_accessor_getter_8_partial_source_code_3( + Accessor context2, + TopLevelVariable context1, + TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasSourceCode == true) { + buffer.write(''' +## Implementation + +```dart +'''); + buffer.write(context2.sourceCode.toString()); + buffer.write(''' +```'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTopLevelProperty_partial_accessor_setter_9( + TopLevelVariable context1, TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context1.setter != null) { + var context2 = context1.setter; + buffer.writeln(); + buffer.write( + __renderTopLevelProperty_partial_accessor_setter_9_partial_name_summary_0( + context2, context1, context0)); + buffer.write('''('''); + buffer.write(context2.linkedParamsNoMetadata.toString()); + buffer.write(''') '''); + buffer.writeln(); + buffer.write( + __renderTopLevelProperty_partial_accessor_setter_9_partial_features_1( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write( + __renderTopLevelProperty_partial_accessor_setter_9_partial_documentation_2( + context2, context1, context0)); + buffer.write('\n\n'); + buffer.write( + __renderTopLevelProperty_partial_accessor_setter_9_partial_source_code_3( + context2, context1, context0)); + } + buffer.writeln(); + return buffer.toString(); +} + +String + __renderTopLevelProperty_partial_accessor_setter_9_partial_name_summary_0( + Accessor context2, + TopLevelVariable context1, + TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.isConst == true) { + buffer.write('''const '''); + } + if (context2.isDeprecated == true) { + buffer.write('''~~'''); + } + buffer.write(htmlEscape.convert(context2.name.toString())); + if (context2.isDeprecated == true) { + buffer.write('''~~'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderTopLevelProperty_partial_accessor_setter_9_partial_features_1( + Accessor context2, + TopLevelVariable context1, + TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasFeatures == true) { + buffer.write('''_'''); + buffer.write(context2.featuresAsString.toString()); + buffer.write('''_'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String + __renderTopLevelProperty_partial_accessor_setter_9_partial_documentation_2( + Accessor context2, + TopLevelVariable context1, + TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasDocumentation == true) { + buffer.writeln(); + buffer.write(context2.documentationAsHtml.toString()); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderTopLevelProperty_partial_accessor_setter_9_partial_source_code_3( + Accessor context2, + TopLevelVariable context1, + TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasSourceCode == true) { + buffer.write(''' +## Implementation + +```dart +'''); + buffer.write(context2.sourceCode.toString()); + buffer.write(''' +```'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTopLevelProperty_partial_footer_10( + TopLevelPropertyTemplateData context0) { + final buffer = StringBuffer(); + buffer.writeln(); + buffer.write(context0.customInnerFooter.toString()); + buffer.writeln(); + buffer.write(context0.customFooter.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String renderTypedef(TypedefTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(_renderTypedef_partial_head_0(context0)); + buffer.writeln(); + if (context0.self != null) { + var context1 = context0.self; + buffer.write(''' +# '''); + buffer.write(context1.nameWithGenerics.toString()); + buffer.write(' '); + buffer.write(htmlEscape.convert(context1.kind.toString())); + buffer.write('\n\n'); + buffer.write(_renderTypedef_partial_source_link_1(context1, context0)); + buffer.writeln(); + buffer.write(_renderTypedef_partial_categorization_2(context1, context0)); + buffer.writeln(); + buffer.write(_renderTypedef_partial_feature_set_3(context1, context0)); + } + buffer.writeln(); + if (context0.typeDef != null) { + var context2 = context0.typeDef; + buffer.writeln(); + buffer + .write(_renderTypedef_partial_typedef_multiline_4(context2, context0)); + buffer.write('\n\n'); + buffer.write(_renderTypedef_partial_documentation_5(context2, context0)); + buffer.write('\n\n'); + buffer.write(_renderTypedef_partial_source_code_6(context2, context0)); + } + buffer.write('\n\n'); + buffer.write(_renderTypedef_partial_footer_7(context0)); + buffer.writeln(); + return buffer.toString(); +} + +String _renderTypedef_partial_head_0(TypedefTemplateData context0) { + final buffer = StringBuffer(); + buffer.write(context0.customHeader.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String _renderTypedef_partial_source_link_1( + Typedef context1, TypedefTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceHref == true) { + buffer.write(''' +[view source]('''); + buffer.write(context1.sourceHref.toString()); + buffer.write(''')'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTypedef_partial_categorization_2( + Typedef context1, TypedefTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasCategoryNames == true) { + buffer.write(''' +Categories:'''); + for (var context2 in context1.displayedCategories) { + buffer.writeln(); + buffer.write(context2.categoryLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTypedef_partial_feature_set_3( + Typedef context1, TypedefTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasFeatureSet == true) { + for (var context2 in context1.displayedLanguageFeatures) { + buffer.write('\n '); + buffer.write(context2.featureLabel.toString()); + } + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTypedef_partial_typedef_multiline_4( + Typedef context1, TypedefTemplateData context0) { + final buffer = StringBuffer(); + if (context1.isCallable == true) { + if (context1.asCallable != null) { + var context2 = context1.asCallable; + buffer.write('\n '); + buffer.write( + __renderTypedef_partial_typedef_multiline_4_partial_callable_multiline_0( + context2, context1, context0)); + } + } + if (context1.isCallable != true) { + buffer.write('\n '); + buffer.write( + __renderTypedef_partial_typedef_multiline_4_partial_type_multiline_1( + context1, context0)); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderTypedef_partial_typedef_multiline_4_partial_callable_multiline_0( + FunctionTypedef context2, Typedef context1, TypedefTemplateData context0) { + final buffer = StringBuffer(); + if (context2.hasAnnotations == true) { + for (var context3 in context2.annotations) { + buffer.write(''' +- '''); + buffer.write(context3.linkedNameWithParameters.toString()); + } + } + buffer.write('\n\n'); + buffer.write(context2.modelType.returnType.linkedName.toString()); + buffer.write(' '); + buffer.write( + ___renderTypedef_partial_typedef_multiline_4_partial_callable_multiline_0_partial_name_summary_0( + context2, context1, context0)); + buffer.write(context2.genericParameters.toString()); + buffer.write('''('''); + if (context2.hasParameters == true) { + buffer.write(context2.linkedParamsLines.toString()); + } + buffer.write(''') +'''); + return buffer.toString(); +} + +String + ___renderTypedef_partial_typedef_multiline_4_partial_callable_multiline_0_partial_name_summary_0( + FunctionTypedef context2, + Typedef context1, + TypedefTemplateData context0) { + final buffer = StringBuffer(); + if (context2.isConst == true) { + buffer.write('''const '''); + } + if (context2.isDeprecated == true) { + buffer.write('''~~'''); + } + buffer.write(htmlEscape.convert(context2.name.toString())); + if (context2.isDeprecated == true) { + buffer.write('''~~'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String __renderTypedef_partial_typedef_multiline_4_partial_type_multiline_1( + Typedef context1, TypedefTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasAnnotations == true) { + for (var context2 in context1.annotations) { + buffer.write(''' +- '''); + buffer.write(context2.linkedNameWithParameters.toString()); + } + } + buffer.write('\n\n'); + buffer.write( + ___renderTypedef_partial_typedef_multiline_4_partial_type_multiline_1_partial_name_summary_0( + context1, context0)); + buffer.write(context1.genericParameters.toString()); + buffer.write(''' = '''); + buffer.write(context1.modelType.linkedName.toString()); + buffer.writeln(); + return buffer.toString(); +} + +String + ___renderTypedef_partial_typedef_multiline_4_partial_type_multiline_1_partial_name_summary_0( + Typedef context1, TypedefTemplateData context0) { + final buffer = StringBuffer(); + if (context1.isConst == true) { + buffer.write('''const '''); + } + if (context1.isDeprecated == true) { + buffer.write('''~~'''); + } + buffer.write(htmlEscape.convert(context1.name.toString())); + if (context1.isDeprecated == true) { + buffer.write('''~~'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTypedef_partial_documentation_5( + Typedef context1, TypedefTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasDocumentation == true) { + buffer.writeln(); + buffer.write(context1.documentationAsHtml.toString()); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTypedef_partial_source_code_6( + Typedef context1, TypedefTemplateData context0) { + final buffer = StringBuffer(); + if (context1.hasSourceCode == true) { + buffer.write(''' +## Implementation + +```dart +'''); + buffer.write(context1.sourceCode.toString()); + buffer.write(''' +```'''); + } + buffer.writeln(); + return buffer.toString(); +} + +String _renderTypedef_partial_footer_7(TypedefTemplateData context0) { + final buffer = StringBuffer(); + buffer.writeln(); + buffer.write(context0.customInnerFooter.toString()); + buffer.writeln(); + buffer.write(context0.customFooter.toString()); + buffer.writeln(); + return buffer.toString(); +} diff --git a/lib/src/generator/templates.dart b/lib/src/generator/templates.dart index 510bb2da30..e50ba5eaa1 100644 --- a/lib/src/generator/templates.dart +++ b/lib/src/generator/templates.dart @@ -2,25 +2,28 @@ // 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. -@Renderer(#renderCategory, Context(), +@Renderer(#renderCategory, Context(), 'category', visibleTypes: _visibleTypes) -@Renderer(#renderClass, Context()) -@Renderer(#renderConstructor, Context()) -@Renderer(#renderEnum, Context()) -@Renderer(#renderError, Context()) -@Renderer(#renderExtension, Context()) -@Renderer(#renderFunction, Context()) -@Renderer(#renderIndex, Context()) -@Renderer(#renderLibrary, Context()) -@Renderer(#renderMethod, Context()) -@Renderer(#renderMixin, Context()) -@Renderer(#renderProperty, Context()) -@Renderer(#renderSidebarForContainer, - Context>()) +@Renderer(#renderClass, Context(), 'class') +@Renderer(#renderConstructor, Context(), 'constructor') +@Renderer(#renderEnum, Context(), 'enum') +@Renderer(#renderError, Context(), '404error') +@Renderer(#renderExtension, Context(), 'extension') +@Renderer(#renderFunction, Context(), 'function') +@Renderer(#renderIndex, Context(), 'index') +@Renderer(#renderLibrary, Context(), 'library') +@Renderer(#renderMethod, Context(), 'method') +@Renderer(#renderMixin, Context(), 'mixin') +@Renderer(#renderProperty, Context(), 'property') @Renderer( - #renderSidebarForLibrary, Context>()) -@Renderer(#renderTopLevelProperty, Context()) -@Renderer(#renderTypedef, Context()) + #renderSidebarForContainer, + Context>(), + '_sidebar_for_container') +@Renderer(#renderSidebarForLibrary, + Context>(), '_sidebar_for_library') +@Renderer(#renderTopLevelProperty, Context(), + 'top_level_property') +@Renderer(#renderTypedef, Context(), 'typedef') library dartdoc.templates; import 'package:analyzer/file_system/file_system.dart'; diff --git a/lib/src/generator/templates.renderers.dart b/lib/src/generator/templates.runtime_renderers.dart similarity index 100% rename from lib/src/generator/templates.renderers.dart rename to lib/src/generator/templates.runtime_renderers.dart diff --git a/lib/src/mustachio/annotations.dart b/lib/src/mustachio/annotations.dart index 99792054a0..2b5334b97e 100644 --- a/lib/src/mustachio/annotations.dart +++ b/lib/src/mustachio/annotations.dart @@ -5,8 +5,13 @@ // See the Mustachio README at tool/mustachio/README.md for high-level // documentation. -/// Specifies information for generating a Mustache renderer for a [context] -/// object, using a Mustache template at [templateUri] +import 'package:analyzer/dart/element/element.dart'; +import 'package:analyzer/dart/element/type.dart'; +import 'package:meta/meta.dart'; + +/// Specifies information for generating both a runtime-interpreted Mustache +/// renderer and a pre-compiled Mustache renderer for a [context] object, using +/// a Mustache template at [templateUri] class Renderer { /// The name of the render function to generate. final Symbol name; @@ -14,14 +19,49 @@ class Renderer { /// The type of the context type, specified as the [Context] type argument. final Context context; - /// A set of types which are "visible" to Mustache. Mustache rendering has - /// access to all of a type's public getters if it is visible to Mustache. + /// The unparsed, string form of the URI of the _standard_ HTML template. + /// + /// This represents the Mustache template that dartdoc uses out-of-the-box to + /// render the [context] object while generating documentation in HTML. + final String standardHtmlTemplate; + + /// The unparsed, string form of the URI of the _standard_ Markdown template. + /// + /// This represents the Mustache template that dartdoc uses out-of-the-box to + /// render the [context] object while generating documentation in HTML. + final String standardMdTemplate; + + /// A set of types which are "visible" to the Mustache runtime interpreter. + /// Mustache runtime-rendering has access to all of a type's public getters if + /// the type is visible to Mustache. /// /// Note that all subtypes and supertypes of a "visible" type are also visible /// to Mustache. final Set visibleTypes; - const Renderer(this.name, this.context, {this.visibleTypes = const {}}); + /// Returns a Renderer with the specified renderer function [name] which can + /// render [context] objects. + /// + /// [standardTemplateBasename] is used as a basename in an + /// Asset URL, in both [standardHtmlTemplate] and [standardMdTemplate], + /// in order to render with the out-of-the-box Mustache templates. + const Renderer( + this.name, + this.context, + String standardTemplateBasename, { + this.visibleTypes = const {}, + }) : standardHtmlTemplate = + 'package:dartdoc/templates/html/$standardTemplateBasename.html', + standardMdTemplate = + 'package:dartdoc/templates/md/$standardTemplateBasename.md'; + + @visibleForTesting + const Renderer.forTest( + this.name, + this.context, + this.standardHtmlTemplate, { + this.visibleTypes = const {}, + }) : standardMdTemplate = null; } /// A container for a type, [T], which is the type of a context object, @@ -31,3 +71,45 @@ class Renderer { class Context { const Context(); } + +/// The specification of a renderer, as derived from a @Renderer annotation. +/// +/// This is only meant to be used by dartdoc's builders. +@internal +class RendererSpec { + /// The name of the render function. + final String name; + + final InterfaceType contextType; + + final Set visibleTypes; + + final String standardHtmlTemplate; + + final String standardMdTemplate; + + RendererSpec( + this.name, + this.contextType, + this.visibleTypes, + this.standardHtmlTemplate, + this.standardMdTemplate, + ); + + ClassElement get contextElement => contextType.element; + + Map get standardTemplateUri => { + TemplateFormat.html: standardHtmlTemplate == 'null' + ? null + : Uri.parse(standardHtmlTemplate), + TemplateFormat.md: + standardMdTemplate == 'null' || standardMdTemplate == null + ? null + : Uri.parse(standardMdTemplate), + }; +} + +enum TemplateFormat { + html, + md, +} diff --git a/lib/src/mustachio/parser.dart b/lib/src/mustachio/parser.dart index 63de74e38e..f31b2d0414 100644 --- a/lib/src/mustachio/parser.dart +++ b/lib/src/mustachio/parser.dart @@ -420,6 +420,13 @@ abstract class MustachioNode { SourceSpan get span; } +/// A [MustachioNode] with a multi-named key. +mixin HasMultiNamedKey { + List get key; + + SourceSpan get keySpan; +} + /// A Text node, representing literal text. @immutable class Text implements MustachioNode { @@ -436,7 +443,8 @@ class Text implements MustachioNode { /// A Variable node, representing a variable to be resolved. @immutable -class Variable implements MustachioNode { +class Variable with HasMultiNamedKey implements MustachioNode { + @override final List key; final bool escape; @@ -444,6 +452,7 @@ class Variable implements MustachioNode { @override final SourceSpan span; + @override final SourceSpan keySpan; Variable(this.key, @@ -456,7 +465,8 @@ class Variable implements MustachioNode { /// A Section node, representing either a Conditional Section, a Repeated /// Section, or a Value Section, possibly inverted. @immutable -class Section implements MustachioNode { +class Section with HasMultiNamedKey implements MustachioNode { + @override final List key; final bool invert; @@ -466,6 +476,7 @@ class Section implements MustachioNode { @override final SourceSpan span; + @override final SourceSpan keySpan; Section(this.key, this.children, diff --git a/test/mustachio/aot_compiler_builder_test.dart b/test/mustachio/aot_compiler_builder_test.dart new file mode 100644 index 0000000000..bc55942dc1 --- /dev/null +++ b/test/mustachio/aot_compiler_builder_test.dart @@ -0,0 +1,131 @@ +// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file +// 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. + +@Timeout.factor(2) +import 'dart:convert'; +import 'package:analyzer/dart/element/element.dart'; +import 'package:build/build.dart'; +import 'package:build_test/build_test.dart'; +import 'package:test/test.dart'; + +import '../../tool/mustachio/builder.dart'; +import 'builder_test_base.dart'; + +void main() { + InMemoryAssetWriter writer; + + Future resolveGeneratedLibrary( + InMemoryAssetWriter writer) async { + var rendererAsset = AssetId('foo', 'lib/foo.aot_renderers_for_html.dart'); + var writtenStrings = writer.assets + .map((id, content) => MapEntry(id.toString(), utf8.decode(content))); + return await resolveSources(writtenStrings, + (Resolver resolver) => resolver.libraryFor(rendererAsset)); + } + + Future testMustachioBuilder( + String sourceLibraryContent, { + String libraryFrontMatter = libraryFrontMatter, + Map additionalAssets, + }) async { + sourceLibraryContent = ''' +$libraryFrontMatter +$sourceLibraryContent +'''; + await testBuilder( + mustachioBuilder(BuilderOptions({})), + { + ...annotationsAsset, + 'foo|lib/foo.dart': sourceLibraryContent, + 'foo|lib/templates/html/foo.html': 'EMPTY', + 'foo|lib/templates/md/foo.md': 'EMPTY', + 'foo|lib/templates/html/bar.html': 'EMPTY', + 'foo|lib/templates/md/bar.md': 'EMPTY', + ...?additionalAssets, + }, + writer: writer, + ); + } + + setUp(() { + writer = InMemoryAssetWriter(); + }); + + test('builds renderers from multiple annotations', () async { + await testMustachioBuilder( + ''' +class Foo {} +class Bar {} +class Baz {} +''', + libraryFrontMatter: ''' +@Renderer(#renderFoo, Context(), 'foo') +@Renderer(#renderBar, Context(), 'bar') +library foo; +import 'package:mustachio/annotations.dart'; +''', + additionalAssets: { + 'foo|lib/templates/html/foo.html': '{{ >foo_header }}', + 'foo|lib/templates/html/_foo_header.html': 'EMPTY', + }, + ); + var renderersLibrary = await resolveGeneratedLibrary(writer); + + expect(renderersLibrary.getTopLevelFunction('renderFoo'), isNotNull); + expect(renderersLibrary.getTopLevelFunction('renderBar'), isNotNull); + expect( + renderersLibrary.getTopLevelFunction('_renderFoo_partial_foo_header_0'), + isNotNull); + }); + + test('builds a public API render function', () async { + writer = InMemoryAssetWriter(); + await testMustachioBuilder(''' +class Foo {} +''', libraryFrontMatter: ''' +@Renderer(#renderFoo, Context(), 'foo') +library foo; +import 'package:mustachio/annotations.dart'; +'''); + var rendererAsset = AssetId('foo', 'lib/foo.aot_renderers_for_html.dart'); + var generatedContent = utf8.decode(writer.assets[rendererAsset]); + expect(generatedContent, contains('String renderFoo(Foo context0)')); + }); + + test('builds a private render function for a partial', () async { + writer = InMemoryAssetWriter(); + await testMustachioBuilder( + ''' +class Foo {} +''', + libraryFrontMatter: ''' +@Renderer(#renderFoo, Context(), 'foo') +library foo; +import 'package:mustachio/annotations.dart'; +''', + additionalAssets: { + 'foo|lib/templates/html/foo.html': '{{ >foo_header }}', + 'foo|lib/templates/html/_foo_header.html': 'EMPTY', + }, + ); + var rendererAsset = AssetId('foo', 'lib/foo.aot_renderers_for_html.dart'); + var generatedContent = utf8.decode(writer.assets[rendererAsset]); + expect(generatedContent, + contains('String _renderFoo_partial_foo_header_0(Foo context0)')); + }); + + test('builds a renderer for a generic, bounded type', () async { + await testMustachioBuilder(''' +class Foo {} +class Bar {} +class Baz {} +'''); + var renderersLibrary = await resolveGeneratedLibrary(writer); + + var fooRenderFunction = renderersLibrary.getTopLevelFunction('renderFoo'); + expect(fooRenderFunction.typeParameters, hasLength(1)); + var fBound = fooRenderFunction.typeParameters.single.bound; + expect(fBound.getDisplayString(withNullability: false), equals('num')); + }); +} diff --git a/test/mustachio/aot_compiler_render_test.dart b/test/mustachio/aot_compiler_render_test.dart new file mode 100644 index 0000000000..a5f4ea2dc0 --- /dev/null +++ b/test/mustachio/aot_compiler_render_test.dart @@ -0,0 +1,24 @@ +import 'package:test/test.dart'; + +import 'foo.aot_renderers_for_html.dart'; +import 'foo.dart'; + +void main() { + test('Renderer renders a non-bool variable node', () async { + var foo = Foo() + ..s1 = 'hello' + ..b1 = false + ..l1 = [1, 2, 3]; + var rendered = renderFoo(foo); + expect(rendered, equals(''' +
+ +
+ l1: [1, 2, 3]
+ s1: hello b1: false
''')); + }); + + // TODO(srawlins): Add waaay more end-to-end render tests. These are + // non-trivial to write though, so that the input Markdown template and + // expected output are visually near each other in the test cases... +} diff --git a/test/mustachio/builder_test_base.dart b/test/mustachio/builder_test_base.dart new file mode 100644 index 0000000000..b49aeddd34 --- /dev/null +++ b/test/mustachio/builder_test_base.dart @@ -0,0 +1,46 @@ +import 'package:analyzer/dart/element/element.dart'; + +/// The build package Asset for a copy of the Renderer annotation for tests. +const annotationsAsset = { + 'mustachio|lib/annotations.dart': ''' +class Renderer { + final Symbol name; + + final Context context; + + final Set visibleTypes; + + final String standardHtmlTemplate; + + final String standardMdTemplate; + + const Renderer( + this.name, + this.context, + String standardTemplateBasename, { + this.visibleTypes = const {}, + }) : standardHtmlTemplate = + 'package:foo/templates/html/\$standardTemplateBasename.html', + standardMdTemplate = + 'package:foo/templates/md/\$standardTemplateBasename.md'; +} + +class Context { + const Context(); +} +''' +}; + +/// Front matter for a library which declares a Renderer for `Foo`. +const libraryFrontMatter = ''' +@Renderer(#renderFoo, Context(), 'foo', visibleTypes: {Bar, Baz}) +library foo; +import 'package:mustachio/annotations.dart'; +'''; + +extension LibraryExtensions on LibraryElement { + /// Returns the top-level function in [this] library, named [name]. + FunctionElement getTopLevelFunction(String name) => topLevelElements + .whereType() + .firstWhere((element) => element.name == name, orElse: () => null); +} diff --git a/test/mustachio/foo.aot_renderers_for_html.dart b/test/mustachio/foo.aot_renderers_for_html.dart new file mode 100644 index 0000000000..87d676ceaa --- /dev/null +++ b/test/mustachio/foo.aot_renderers_for_html.dart @@ -0,0 +1,56 @@ +// GENERATED CODE. DO NOT EDIT. +// +// To change the contents of this library, make changes to the builder source +// files in the tool/mustachio/ directory. + +// Sometimes we enter a new section which triggers creating a new variable, but +// the variable is not used; generally when the section is checking if a +// non-bool, non-Iterable field is non-null. +// ignore_for_file: unused_local_variable + +// It is hard to track exact imports without using package:code_builder. +// ignore_for_file: unused_import + +import 'dart:convert' show htmlEscape; + +import 'package:dartdoc/dartdoc.dart'; +import 'package:dartdoc/src/generator/template_data.dart'; +import 'foo.dart'; + +String renderFoo(Foo context0) { + final buffer = StringBuffer(); + buffer.write('''
+ + '''); + buffer.write(_renderFoo_partial_foo_header_0(context0)); + buffer.write(''' + + s1: '''); + buffer.write(htmlEscape.convert(context0.s1.toString())); + buffer.write(''' + b1: '''); + buffer.write(htmlEscape.convert(context0.b1.toString())); + buffer.write(''' +
'''); + return buffer.toString(); +} + +String _renderFoo_partial_foo_header_0(Foo context0) { + final buffer = StringBuffer(); + buffer.write('''
+ l1: '''); + buffer.write(htmlEscape.convert(context0.l1.toString())); + buffer.write(''' +
'''); + return buffer.toString(); +} + +String renderBar(Bar context0) { + final buffer = StringBuffer(); + return buffer.toString(); +} + +String renderBaz(Baz context0) { + final buffer = StringBuffer(); + return buffer.toString(); +} diff --git a/test/mustachio/foo.aot_renderers_for_md.dart b/test/mustachio/foo.aot_renderers_for_md.dart new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/mustachio/foo.dart b/test/mustachio/foo.dart index 94a0ab6b0d..be60aeaa09 100644 --- a/test/mustachio/foo.dart +++ b/test/mustachio/foo.dart @@ -1,7 +1,7 @@ -@Renderer(#renderFoo, Context(), +@Renderer.forTest(#renderFoo, Context(), 'templates/foo.html', visibleTypes: {Property1, Property2, Property3}) -@Renderer(#renderBar, Context()) -@Renderer(#renderBaz, Context()) +@Renderer.forTest(#renderBar, Context(), 'templates/bar.html') +@Renderer.forTest(#renderBaz, Context(), 'templates/baz.html') library dartdoc.testing.foo; import 'package:dartdoc/src/mustachio/annotations.dart'; diff --git a/test/mustachio/foo.renderers.dart b/test/mustachio/foo.runtime_renderers.dart similarity index 100% rename from test/mustachio/foo.renderers.dart rename to test/mustachio/foo.runtime_renderers.dart diff --git a/test/mustachio/builder_test.dart b/test/mustachio/runtime_renderer_builder_test.dart similarity index 90% rename from test/mustachio/builder_test.dart rename to test/mustachio/runtime_renderer_builder_test.dart index 0c3952ec2e..6e5491fa06 100644 --- a/test/mustachio/builder_test.dart +++ b/test/mustachio/runtime_renderer_builder_test.dart @@ -10,37 +10,14 @@ import 'package:build_test/build_test.dart'; import 'package:test/test.dart'; import '../../tool/mustachio/builder.dart'; - -const _annotationsAsset = { - 'mustachio|lib/annotations.dart': ''' -class Renderer { - final Symbol name; - - final Context context; - - final Set visibleTypes; - - const Renderer(this.name, this.context, {this.visibleTypes = const {}}); -} - -class Context { - const Context(); -} -''' -}; - -const _libraryFrontMatter = ''' -@Renderer(#renderFoo, Context(), visibleTypes: {Bar, Baz}) -library foo; -import 'package:mustachio/annotations.dart'; -'''; +import 'builder_test_base.dart'; void main() { InMemoryAssetWriter writer; Future resolveGeneratedLibrary( InMemoryAssetWriter writer) async { - var rendererAsset = AssetId('foo', 'lib/foo.renderers.dart'); + var rendererAsset = AssetId('foo', 'lib/foo.runtime_renderers.dart'); var writtenStrings = writer.assets .map((id, content) => MapEntry(id.toString(), utf8.decode(content))); return await resolveSources(writtenStrings, @@ -48,7 +25,7 @@ void main() { } Future testMustachioBuilder(String sourceLibraryContent, - {String libraryFrontMatter = _libraryFrontMatter, + {String libraryFrontMatter = libraryFrontMatter, Map outputs}) async { sourceLibraryContent = ''' $libraryFrontMatter @@ -57,8 +34,12 @@ $sourceLibraryContent await testBuilder( mustachioBuilder(BuilderOptions({})), { - ..._annotationsAsset, + ...annotationsAsset, 'foo|lib/foo.dart': sourceLibraryContent, + 'foo|lib/templates/html/foo.html': 'EMPTY', + 'foo|lib/templates/md/foo.md': 'EMPTY', + 'foo|lib/templates/html/bar.html': 'EMPTY', + 'foo|lib/templates/md/bar.md': 'EMPTY', }, outputs: outputs, writer: writer, @@ -96,7 +77,7 @@ class Bar {} class Baz {} '''); renderersLibrary = await resolveGeneratedLibrary(writer); - var rendererAsset = AssetId('foo', 'lib/foo.renderers.dart'); + var rendererAsset = AssetId('foo', 'lib/foo.runtime_renderers.dart'); generatedContent = utf8.decode(writer.assets[rendererAsset]); }); @@ -204,8 +185,8 @@ class Foo {} class Bar {} class Baz {} ''', libraryFrontMatter: ''' -@Renderer(#renderFoo, Context()) -@Renderer(#renderBar, Context()) +@Renderer(#renderFoo, Context(), 'foo') +@Renderer(#renderBar, Context(), 'bar') library foo; import 'package:mustachio/annotations.dart'; '''); @@ -231,12 +212,12 @@ class BarBase {} class Bar extends BarBase {} class Baz {} ''', libraryFrontMatter: ''' -@Renderer(#renderFoo, Context()) -@Renderer(#renderBar, Context()) +@Renderer(#renderFoo, Context(), 'foo') +@Renderer(#renderBar, Context(), 'bar') library foo; import 'package:mustachio/annotations.dart'; '''); - var rendererAsset = AssetId('foo', 'lib/foo.renderers.dart'); + var rendererAsset = AssetId('foo', 'lib/foo.runtime_renderers.dart'); generatedContent = utf8.decode(writer.assets[rendererAsset]); }); @@ -339,9 +320,3 @@ class Method {} }); }); } - -extension on LibraryElement { - FunctionElement getTopLevelFunction(String name) => topLevelElements - .whereType() - .firstWhere((element) => element.name == name, orElse: () => null); -} diff --git a/test/mustachio/renderer_test.dart b/test/mustachio/runtime_renderer_render_test.dart similarity index 99% rename from test/mustachio/renderer_test.dart rename to test/mustachio/runtime_renderer_render_test.dart index a425e1acc5..40dec59c01 100644 --- a/test/mustachio/renderer_test.dart +++ b/test/mustachio/runtime_renderer_render_test.dart @@ -4,7 +4,7 @@ import 'package:dartdoc/src/mustachio/renderer_base.dart'; import 'package:path/path.dart' as p; import 'package:test/test.dart'; import 'foo.dart'; -import 'foo.renderers.dart'; +import 'foo.runtime_renderers.dart'; void main() { /*late*/ MemoryResourceProvider resourceProvider; diff --git a/test/mustachio/templates/_foo_header.html b/test/mustachio/templates/_foo_header.html new file mode 100644 index 0000000000..380426a48a --- /dev/null +++ b/test/mustachio/templates/_foo_header.html @@ -0,0 +1,3 @@ +
+ l1: {{ l1 }} +
\ No newline at end of file diff --git a/test/mustachio/templates/bar.html b/test/mustachio/templates/bar.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/mustachio/templates/baz.html b/test/mustachio/templates/baz.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/mustachio/templates/foo.html b/test/mustachio/templates/foo.html new file mode 100644 index 0000000000..794e67af84 --- /dev/null +++ b/test/mustachio/templates/foo.html @@ -0,0 +1,7 @@ +
+ + {{ >foo_header }} + + s1: {{ s1 }} + b1: {{ b1 }} +
\ No newline at end of file diff --git a/tool/mustachio/builder.dart b/tool/mustachio/builder.dart index dd9fd0c960..ad31c69610 100644 --- a/tool/mustachio/builder.dart +++ b/tool/mustachio/builder.dart @@ -1,7 +1,9 @@ import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/src/dart/element/member.dart'; import 'package:build/build.dart'; +import 'package:dartdoc/src/mustachio/annotations.dart'; +import 'codegen_aot_compiler.dart'; import 'codegen_runtime_renderer.dart'; const rendererClassesArePublicOption = 'rendererClassesArePublic'; @@ -15,7 +17,11 @@ class MustachioBuilder implements Builder { @override final buildExtensions = const { - '.dart': ['.renderers.dart'] + '.dart': [ + '.aot_renderers_for_html.dart', + '.aot_renderers_for_md.dart', + '.runtime_renderers.dart', + ] }; @override @@ -29,15 +35,50 @@ class MustachioBuilder implements Builder { final rendererGatherer = _RendererGatherer(entryLib); // Create a new target `AssetId` based on the old one. - var renderersLibrary = inputId.changeExtension('.renderers.dart'); - var contents = ''; + var runtimeRenderersLibrary = + inputId.changeExtension('.runtime_renderers.dart'); - if (rendererGatherer._rendererSpecs.isNotEmpty) { - contents += buildTemplateRenderers(rendererGatherer._rendererSpecs, - entryLib.source.uri, entryLib.typeProvider, entryLib.typeSystem, - rendererClassesArePublic: _rendererClassesArePublic); + var aotLibraries = { + TemplateFormat.html: + inputId.changeExtension('.aot_renderers_for_html.dart'), + TemplateFormat.md: inputId.changeExtension('.aot_renderers_for_md.dart'), + }; + + if (rendererGatherer._rendererSpecs.isEmpty) { + await buildStep.writeAsString(runtimeRenderersLibrary, ''); + await buildStep.writeAsString(aotLibraries[TemplateFormat.html], ''); + await buildStep.writeAsString(aotLibraries[TemplateFormat.md], ''); + + return; + } + + var runtimeRenderersContents = buildRuntimeRenderers( + rendererGatherer._rendererSpecs, + entryLib.source.uri, + entryLib.typeProvider, + entryLib.typeSystem, + rendererClassesArePublic: _rendererClassesArePublic, + ); + await buildStep.writeAsString( + runtimeRenderersLibrary, runtimeRenderersContents); + + for (var format in TemplateFormat.values) { + String aotRenderersContents; + var someSpec = rendererGatherer._rendererSpecs.first; + if (someSpec.standardTemplateUri[format] != null) { + aotRenderersContents = await compileTemplatesToRenderers( + rendererGatherer._rendererSpecs, + entryLib.source.uri, + buildStep, + entryLib.typeProvider, + entryLib.typeSystem, + format, + ); + } else { + aotRenderersContents = ''; + } - await buildStep.writeAsString(renderersLibrary, contents); + await buildStep.writeAsString(aotLibraries[format], aotRenderersContents); } } } @@ -98,7 +139,17 @@ class _RendererGatherer { ...visibleTypesField.toSetValue().map((object) => object.toTypeValue()) }; - return RendererSpec(nameField.toSymbolValue(), contextType, visibleTypes); + var standardHtmlTemplateField = + constantValue.getField('standardHtmlTemplate'); + var standardMdTemplateField = constantValue.getField('standardMdTemplate'); + + return RendererSpec( + nameField.toSymbolValue(), + contextType, + visibleTypes, + standardHtmlTemplateField.toStringValue(), + standardMdTemplateField.toStringValue(), + ); } } diff --git a/tool/mustachio/codegen_aot_compiler.dart b/tool/mustachio/codegen_aot_compiler.dart new file mode 100644 index 0000000000..a7d10036ae --- /dev/null +++ b/tool/mustachio/codegen_aot_compiler.dart @@ -0,0 +1,415 @@ +// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file +// 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. + +import 'package:analyzer/dart/element/type.dart'; +import 'package:analyzer/dart/element/type_provider.dart'; +import 'package:analyzer/dart/element/type_system.dart'; +import 'package:build/build.dart'; +import 'package:dart_style/dart_style.dart'; +import 'package:dartdoc/src/mustachio/annotations.dart'; +import 'package:dartdoc/src/mustachio/parser.dart'; +import 'package:dartdoc/src/mustachio/renderer_base.dart'; +import 'package:meta/meta.dart'; +import 'package:path/path.dart' as p; + +import 'utilities.dart'; + +class _AotCompiler { + final InterfaceType _contextType; + + final String _rendererName; + + final BuildStep _buildStep; + + final TypeProvider _typeProvider; + + final TypeSystem _typeSystem; + + final AssetId _templateAssetId; + + final TemplateFormat _format; + + final List _syntaxTree; + + final StringBuffer _buffer; + + final Set<_AotCompiler> _partialRenderers = {}; + + final List<_VariableLookup> _contextStack; + + static Future<_AotCompiler> readAndParse( + InterfaceType contextType, + String rendererName, + AssetId templateAssetId, + TemplateFormat format, + StringBuffer buffer, + BuildStep buildStep, + TypeProvider typeProvider, + TypeSystem typeSystem, { + List<_VariableLookup> contextStack, + }) async { + var template = await buildStep.readAsString(templateAssetId); + var syntaxTree = MustachioParser(template, templateAssetId.uri).parse(); + return _AotCompiler._(contextType, rendererName, templateAssetId, format, + syntaxTree, buffer, buildStep, typeProvider, typeSystem, + contextStack: contextStack); + } + + _AotCompiler._( + this._contextType, + this._rendererName, + this._templateAssetId, + this._format, + this._syntaxTree, + this._buffer, + this._buildStep, + this._typeProvider, + this._typeSystem, { + List<_VariableLookup> contextStack, + }) : _contextStack = _rename(contextStack ?? []), + _contextNameCounter = contextStack?.length ?? 0; + + static List<_VariableLookup> _rename(List<_VariableLookup> original) { + var result = <_VariableLookup>[]; + var index = original.length - 1; + for (var variable in original) { + result.push(_VariableLookup(variable.type, 'context$index')); + index--; + } + return [...result.reversed]; + } + + Future _compileToLibrary() async { + await _compileToRenderer(); + return DartFormatter().format(_buffer.toString()); + } + + Future _compileToRenderer() async { + if (_contextStack.isEmpty) { + var contextName = 'context0'; + var contextVariable = _VariableLookup(_contextType, contextName); + _contextStack.push(contextVariable); + _contextNameCounter++; + } + // Get the type parameters of _each_ of the context types in the stack, + // including their bounds, concatenate them, and wrap them in angle + // brackets. + // TODO(srawlins): This will produce erroneous code if any two context types + // have type parameters with the same name. Something like: + // _renderFoo_partial_bar_1(Baz context1, Foo context0) + // Rename type parameters to some predictable collision-free naming scheme; + // the body of the function should not reference the type parameters, so + // this should be perfectly possible. + var typeParametersString = asGenerics([ + for (var context in _contextStack) + ...context.type.element.typeParameters + .map((tp) => tp.getDisplayString(withNullability: false)), + ]); + _buffer.writeln('String $_rendererName$typeParametersString('); + _buffer.writeln(_contextStack.map((context) { + var contextElement = context.type.element; + var contextTypeName = contextElement.displayName; + var typeVariablesString = contextElement.typeVariablesString; + return '$contextTypeName$typeVariablesString ${context.name}'; + }).join(',')); + _buffer.writeln(') {'); + _buffer.writeln(' final buffer = StringBuffer();'); + await _BlockCompiler(this, _contextStack)._compile(_syntaxTree); + _buffer.writeln(' return buffer.toString();'); + _buffer.writeln('}'); + + for (var partialRenderer in _partialRenderers) { + await partialRenderer._compileToRenderer(); + _buffer.write(partialRenderer._buffer.toString()); + } + } + + int _partialCounter = 0; + + /*late*/ int _contextNameCounter; +} + +/// Represents a variable lookup via property access chain [name] which returns +/// an object of type [type]. +@immutable +class _VariableLookup { + final InterfaceType type; + + final String name; + + _VariableLookup(this.type, this.name); +} + +class _BlockCompiler { + final _AotCompiler _templateCompiler; + + final List<_VariableLookup> _contextStack; + + InterfaceType get contextType => _contextStack.first.type; + + String get contextName => _contextStack.first.name; + + _BlockCompiler(this._templateCompiler, this._contextStack); + + void write(String text) => _templateCompiler._buffer.write(text); + + void writeln(String text) => _templateCompiler._buffer.writeln(text); + + String getNewConextName() { + var newContextName = 'context${_templateCompiler._contextNameCounter}'; + _templateCompiler._contextNameCounter++; + return newContextName; + } + + String get partialBaseName => '_${_templateCompiler._rendererName}_partial'; + + Future _compile(List syntaxTree) async { + for (var node in syntaxTree) { + if (node is Text) { + _writeText(node.content); + } else if (node is Variable) { + var variableLookup = _lookUpGetter(node, node.key); + _writeGetter(variableLookup, escape: node.escape); + } else if (node is Section) { + await _compileSection(node); + } else if (node is Partial) { + await _compilePartial(node); + } + } + } + + Future _compilePartial(Partial node) async { + var extension = + _templateCompiler._format == TemplateFormat.html ? 'html' : 'md'; + var partialAssetId = AssetId.resolve(Uri.parse('_${node.key}.$extension'), + from: _templateCompiler._templateAssetId); + var partialRenderer = _templateCompiler._partialRenderers.firstWhere( + (p) => p._templateAssetId == partialAssetId, + orElse: () => null); + if (partialRenderer == null) { + var name = + '${partialBaseName}_${node.key}_${_templateCompiler._partialCounter}'; + partialRenderer = await _AotCompiler.readAndParse( + contextType, + name, + partialAssetId, + _templateCompiler._format, + StringBuffer(), + _templateCompiler._buildStep, + _templateCompiler._typeProvider, + _templateCompiler._typeSystem, + contextStack: _contextStack); + // Add this partial renderer to be written later. + _templateCompiler._partialRenderers.add(partialRenderer); + _templateCompiler._partialCounter++; + } + // Call the renderer here. + write('buffer.write('); + writeln('${partialRenderer._rendererName}('); + writeln(_contextStack.map((context) => context.name).join(',')); + writeln('));'); + } + + Future _compileSection(Section node) async { + var variableLookup = _lookUpGetter(node, node.key); + if (variableLookup == null) { + throw MustachioResolutionError(node.keySpan.message( + "Failed to resolve '${node.key}' as a property on the context type:" + '$contextType')); + } + if (variableLookup.type.isDartCoreBool) { + // Conditional block. + await _compileConditionalSection(variableLookup, node.children, + invert: node.invert); + } else if (_templateCompiler._typeSystem.isAssignableTo(variableLookup.type, + _templateCompiler._typeProvider.iterableDynamicType)) { + // Repeated block. + await _compileRepeatedSection(variableLookup, node.children, + invert: node.invert); + } else { + // Use accessor value as context. + await _compileValueSection(variableLookup, node.children, + invert: node.invert); + } + } + + Future _compileConditionalSection( + _VariableLookup variableLookup, List block, + {bool invert = false}) async { + var variableAccess = variableLookup.name; + if (invert) { + writeln('if ($variableAccess != true) {'); + } else { + writeln('if ($variableAccess == true) {'); + } + await _BlockCompiler(_templateCompiler, _contextStack)._compile(block); + writeln('}'); + } + + Future _compileRepeatedSection( + _VariableLookup variableLookup, List block, + {bool invert = false}) async { + var variableAccess = variableLookup.name; + if (invert) { + writeln('if ($variableAccess?.isEmpty ?? true) {'); + await _BlockCompiler(_templateCompiler, _contextStack)._compile(block); + writeln('}'); + } else { + var newContextName = getNewConextName(); + write('for (var $newContextName in $variableAccess) {'); + // If [loopType] is something like `C` where + // `class C implements Queue>`, we need the [ClassElement] + // for [Iterable], and then use [DartType.asInstanceOf] to ultimately + // determine that the inner type of the loop is, for example, + // `Future`. + var iterableElement = _templateCompiler._typeProvider.iterableElement; + var iterableType = variableLookup.type.asInstanceOf(iterableElement); + var innerContextType = iterableType.typeArguments.first; + var innerContext = _VariableLookup(innerContextType, newContextName); + _contextStack.push(innerContext); + await _BlockCompiler(_templateCompiler, _contextStack)._compile(block); + _contextStack.pop(); + writeln('}'); + } + } + + Future _compileValueSection( + _VariableLookup variableLookup, List block, + {bool invert = false}) async { + var variableAccess = variableLookup.name; + if (invert) { + writeln('if ($variableAccess == null) {'); + await _BlockCompiler(_templateCompiler, _contextStack)._compile(block); + writeln('}'); + } else { + var innerContextName = getNewConextName(); + writeln('if ($variableAccess != null) {'); + writeln(' var $innerContextName = $variableAccess;'); + var innerContext = _VariableLookup(variableLookup.type, innerContextName); + _contextStack.push(innerContext); + await _BlockCompiler(_templateCompiler, _contextStack)._compile(block); + _contextStack.pop(); + writeln('}'); + } + } + + _VariableLookup _lookUpGetter(HasMultiNamedKey node, List key) { + // '.' is an entirely special case. + if (key.length == 2 && key[0] == '' && key[1] == '') { + return _VariableLookup(contextType, contextName); + } + + var primaryName = key[0]; + + for (var context in _contextStack) { + var getter = + context.type.lookUpGetter2(primaryName, contextType.element.library); + if (getter == null) { + continue; + } + + var type = getter.returnType; + var contextChain = '${context.name}.$primaryName'; + var remainingNames = [...key.skip(1)]; + for (var secondaryKey in remainingNames) { + getter = (type as InterfaceType) + .lookUpGetter2(secondaryKey, type.element.library); + if (getter == null) { + throw MustachioResolutionError(node.keySpan.message( + "Failed to resolve '$secondaryKey' on ${context.type} while " + 'resolving $remainingNames as a property chain on any types in ' + 'the context chain: $contextChain, after first resolving ' + "'$primaryName' to a property on $type")); + } + type = getter.returnType; + contextChain = '$contextChain.$secondaryKey'; + } + return _VariableLookup(type, contextChain); + } + + var contextTypes = [ + for (var c in _contextStack) c.type, + ]; + throw MustachioResolutionError(node.keySpan + .message("Failed to resolve '$key' as a property on any types in the " + 'context chain: $contextTypes')); + } + + void _writeText(String content) { + if (content.isEmpty) return; + if (content == '\n') { + // Blank lines happen a lot; just indicate them as such. + writeln('buffer.writeln();'); + } else { + content = content.replaceAll("'", "\\'").replaceAll(r'$', r'\\$'); + if (RegExp('^[ \\n]+\$').hasMatch(content)) { + write("buffer.write('"); + write(content.replaceAll('\n', '\\n')); + writeln("');"); + } else { + write("buffer.write('''"); + write(content); + writeln("''');"); + } + } + } + + void _writeGetter(_VariableLookup variableLookup, {bool escape = true}) { + var variableAccess = variableLookup.name; + if (escape) { + writeln('buffer.write(htmlEscape.convert(' + '$variableAccess.toString()));'); + } else { + writeln('buffer.write($variableAccess.toString());'); + } + } +} + +Future compileTemplatesToRenderers( + Set specs, + Uri sourceUri, + BuildStep buildStep, + TypeProvider typeProvider, + TypeSystem typeSystem, + TemplateFormat format, +) async { + var buffer = StringBuffer(''' +// GENERATED CODE. DO NOT EDIT. +// +// To change the contents of this library, make changes to the builder source +// files in the tool/mustachio/ directory. + +// Sometimes we enter a new section which triggers creating a new variable, but +// the variable is not used; generally when the section is checking if a +// non-bool, non-Iterable field is non-null. +// ignore_for_file: unused_local_variable + +// It is hard to track exact imports without using package:code_builder. +// ignore_for_file: unused_import + +import 'dart:convert' show htmlEscape; + +import 'package:dartdoc/dartdoc.dart'; +import 'package:dartdoc/src/generator/template_data.dart'; +import '${p.basename(sourceUri.path)}'; +'''); + for (var spec in specs) { + var templateUri = spec.standardTemplateUri[format]; + print('for $spec, found tU: $templateUri; ${templateUri?.isAbsolute}'); + if (templateUri == null) continue; + var templateAsset = templateUri.isAbsolute + ? AssetId.resolve(templateUri) + : AssetId.resolve(templateUri, from: buildStep.inputId); + var compiler = await _AotCompiler.readAndParse(spec.contextType, spec.name, + templateAsset, format, buffer, buildStep, typeProvider, typeSystem); + await compiler._compileToLibrary(); + } + return DartFormatter().format(buffer.toString()); +} + +extension on List { + void push(T value) => insert(0, value); + + T pop() => removeAt(0); +} diff --git a/tool/mustachio/codegen_runtime_renderer.dart b/tool/mustachio/codegen_runtime_renderer.dart index 2ba5735b79..5faff4a21a 100644 --- a/tool/mustachio/codegen_runtime_renderer.dart +++ b/tool/mustachio/codegen_runtime_renderer.dart @@ -9,27 +9,18 @@ import 'package:analyzer/dart/element/type.dart'; import 'package:analyzer/dart/element/type_provider.dart'; import 'package:analyzer/dart/element/type_system.dart'; import 'package:dart_style/dart_style.dart'; +import 'package:dartdoc/src/mustachio/annotations.dart'; import 'package:meta/meta.dart'; import 'package:path/path.dart' as p; -/// The specification of a renderer, as derived from a @Renderer annotation. -class RendererSpec { - /// The name of the render function. - final String _name; - - final InterfaceType _contextType; - - final Set _visibleTypes; - - RendererSpec(this._name, this._contextType, this._visibleTypes); -} +import 'utilities.dart'; /// Builds [specs] into a Dart library containing runtime renderers. -String buildTemplateRenderers(Set specs, Uri sourceUri, +String buildRuntimeRenderers(Set specs, Uri sourceUri, TypeProvider typeProvider, TypeSystem typeSystem, {bool rendererClassesArePublic = false}) { var visibleElements = specs - .map((spec) => spec._visibleTypes) + .map((spec) => spec.visibleTypes) .reduce((value, element) => value.union(element)) .map((type) => type.element) .toSet(); @@ -37,7 +28,7 @@ String buildTemplateRenderers(Set specs, Uri sourceUri, sourceUri, typeProvider, typeSystem, visibleElements, rendererClassesArePublic: rendererClassesArePublic) ._buildTemplateRenderers(specs); - return DartFormatter().format(raw.toString()); + return DartFormatter().format(raw); } /// This class builds runtime Mustache renderers from a set of [RendererSpec]s. @@ -121,20 +112,20 @@ import '${p.basename(_sourceUri.path)}'; /// Adds type specified in [spec] to the [_typesToProcess] queue, as well as /// all supertypes, and the types of all valid getters, recursively. void _addTypesForRendererSpec(RendererSpec spec) { - var element = spec._contextType.element; + var element = spec.contextElement; var rendererInfo = _RendererInfo(element, - public: _rendererClassesArePublic, publicApiFunctionName: spec._name); + public: _rendererClassesArePublic, publicApiFunctionName: spec.name); _typesToProcess.add(rendererInfo); _typeToRenderFunctionName[element] = rendererInfo._renderFunctionName; _typeToRendererClassName[element] = rendererInfo._rendererClassName; - spec._contextType.accessors.forEach(_addPropertyToProcess); + spec.contextType.accessors.forEach(_addPropertyToProcess); - for (var mixin in spec._contextType.element.mixins) { + for (var mixin in spec.contextElement.mixins) { _addTypeToProcess(mixin.element, isFullRenderer: true, includeRenderFunction: false); } - var superclass = spec._contextType.element.supertype; + var superclass = spec.contextElement.supertype; while (superclass != null) { // Any type specified with a renderer spec (`@Renderer`) is full. @@ -416,7 +407,7 @@ class ${renderer._rendererClassName}${renderer._typeParametersString} _typeToRendererClassName[contextClass.supertype.element]; if (superclassRendererName != null) { var superMapName = '$superclassRendererName.propertyMap'; - var generics = _asGenerics([ + var generics = asGenerics([ ...contextClass.supertype.typeArguments .map((e) => e.getDisplayString(withNullability: false)), _contextTypeVariable @@ -435,7 +426,7 @@ class ${renderer._rendererClassName}${renderer._typeParametersString} var mixinRendererName = _typeToRendererClassName[mixin.element]; if (mixinRendererName != null) { var mixinMapName = '$mixinRendererName.propertyMap'; - var generics = _asGenerics([ + var generics = asGenerics([ ...mixin.typeArguments .map((e) => e.getDisplayString(withNullability: false)), _contextTypeVariable @@ -616,41 +607,20 @@ class _RendererInfo { final String _rendererClassName; - /// The type parameters of the context type, if any, as a String, including - /// bounds and the angled brackets, otherwise a blank String. - String get _typeParametersString { - return _asGenerics(_contextClass.typeParameters - .map((tp) => tp.getDisplayString(withNullability: false))); - } + String get _typeParametersString => _contextClass.typeParametersString; - /// The type variables of the context type, if any, as a String, including - /// the angled brackets, otherwise a blank String. - String get _typeVariablesString { - return _asGenerics(_contextClass.typeParameters.map((tp) => tp.name)); - } + String get _typeVariablesString => _contextClass.typeVariablesString; - /// Returns the type parameters of the context type, and [extra], as they - /// appear in a list of generics. - String _typeParametersStringWith(String extra) { - return _asGenerics([ - ..._contextClass.typeParameters - .map((tp) => tp.getDisplayString(withNullability: false)), - extra, - ]); - } + String _typeParametersStringWith(String extra) => + _contextClass.typeParametersStringWith(extra); /// Returns the type arguments of the context type, and [extra], as they /// appear in a list of generics. String _typeArgumentsStringWith(String extra) { - return _asGenerics([ + return asGenerics([ ..._contextClass.thisType.typeArguments .map((tp) => tp.getDisplayString(withNullability: false)), extra, ]); } } - -/// Returns [values] as they appear in a list of generics, with angled brackets, -/// and an empty string when [values] is empty. -String _asGenerics(Iterable values) => - values.isEmpty ? '' : '<${values.join(', ')}>'; diff --git a/tool/mustachio/utilities.dart b/tool/mustachio/utilities.dart new file mode 100644 index 0000000000..1247aa927c --- /dev/null +++ b/tool/mustachio/utilities.dart @@ -0,0 +1,31 @@ +import 'package:analyzer/dart/element/element.dart'; + +extension ClassExtensions on ClassElement { + /// The type parameters, if any, as a String, including bounds and the angled + /// brackets, otherwise a blank String. + String get typeParametersString { + return asGenerics(typeParameters + .map((tp) => tp.getDisplayString(withNullability: false))); + } + + /// The type variables, if any, as a String, including the angled brackets, + /// otherwise a blank String. + String get typeVariablesString { + return asGenerics(typeParameters.map((tp) => tp.name)); + } + + /// Returns the type parameters, and [extra], as they appear in a list of + /// generics. + String typeParametersStringWith(String extra) { + return asGenerics([ + ...typeParameters + .map((tp) => tp.getDisplayString(withNullability: false)), + extra, + ]); + } +} + +/// Returns [values] as they appear in a list of generics, with angled brackets, +/// and an empty string when [values] is empty. +String asGenerics(Iterable values) => + values.isEmpty ? '' : '<${values.join(', ')}>'; From 8127eeb7f6a141e7fa5ac4815c5f68b1a9035e6f Mon Sep 17 00:00:00 2001 From: Sam Rawlins Date: Thu, 13 May 2021 11:38:13 -0700 Subject: [PATCH 02/10] Many doc comments; efficiencies --- lib/src/mustachio/annotations.dart | 23 ++-- test/mustachio/aot_compiler_render_test.dart | 4 + test/mustachio/builder_test_base.dart | 4 + tool/mustachio/builder.dart | 6 +- tool/mustachio/codegen_aot_compiler.dart | 120 ++++++++++--------- tool/mustachio/utilities.dart | 4 + 6 files changed, 95 insertions(+), 66 deletions(-) diff --git a/lib/src/mustachio/annotations.dart b/lib/src/mustachio/annotations.dart index 2b5334b97e..45e3608140 100644 --- a/lib/src/mustachio/annotations.dart +++ b/lib/src/mustachio/annotations.dart @@ -88,25 +88,26 @@ class RendererSpec { final String standardMdTemplate; + final Map standardTemplateUris; + RendererSpec( this.name, this.contextType, this.visibleTypes, this.standardHtmlTemplate, this.standardMdTemplate, - ); + ) : standardTemplateUris = { + TemplateFormat.html: _parseUriFromAnnotation(standardHtmlTemplate), + TemplateFormat.md: _parseUriFromAnnotation(standardMdTemplate), + }; - ClassElement get contextElement => contextType.element; + /// Parses a URI from a String which comes from a const annotation object. + /// + /// The String value may be the literal value, 'null'. + static Uri _parseUriFromAnnotation(String unparsed) => + unparsed == 'null' || unparsed == null ? null : Uri.parse(unparsed); - Map get standardTemplateUri => { - TemplateFormat.html: standardHtmlTemplate == 'null' - ? null - : Uri.parse(standardHtmlTemplate), - TemplateFormat.md: - standardMdTemplate == 'null' || standardMdTemplate == null - ? null - : Uri.parse(standardMdTemplate), - }; + ClassElement get contextElement => contextType.element; } enum TemplateFormat { diff --git a/test/mustachio/aot_compiler_render_test.dart b/test/mustachio/aot_compiler_render_test.dart index a5f4ea2dc0..e33315667c 100644 --- a/test/mustachio/aot_compiler_render_test.dart +++ b/test/mustachio/aot_compiler_render_test.dart @@ -1,3 +1,7 @@ +// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file +// 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. + import 'package:test/test.dart'; import 'foo.aot_renderers_for_html.dart'; diff --git a/test/mustachio/builder_test_base.dart b/test/mustachio/builder_test_base.dart index b49aeddd34..9e406b7821 100644 --- a/test/mustachio/builder_test_base.dart +++ b/test/mustachio/builder_test_base.dart @@ -1,3 +1,7 @@ +// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file +// 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. + import 'package:analyzer/dart/element/element.dart'; /// The build package Asset for a copy of the Renderer annotation for tests. diff --git a/tool/mustachio/builder.dart b/tool/mustachio/builder.dart index ad31c69610..c4108ff272 100644 --- a/tool/mustachio/builder.dart +++ b/tool/mustachio/builder.dart @@ -1,3 +1,7 @@ +// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file +// 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. + import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/src/dart/element/member.dart'; import 'package:build/build.dart'; @@ -65,7 +69,7 @@ class MustachioBuilder implements Builder { for (var format in TemplateFormat.values) { String aotRenderersContents; var someSpec = rendererGatherer._rendererSpecs.first; - if (someSpec.standardTemplateUri[format] != null) { + if (someSpec.standardTemplateUris[format] != null) { aotRenderersContents = await compileTemplatesToRenderers( rendererGatherer._rendererSpecs, entryLib.source.uri, diff --git a/tool/mustachio/codegen_aot_compiler.dart b/tool/mustachio/codegen_aot_compiler.dart index a7d10036ae..99bb7ee55b 100644 --- a/tool/mustachio/codegen_aot_compiler.dart +++ b/tool/mustachio/codegen_aot_compiler.dart @@ -15,20 +15,30 @@ import 'package:path/path.dart' as p; import 'utilities.dart'; -class _AotCompiler { - final InterfaceType _contextType; - - final String _rendererName; - +/// Various static build data to be used for each renderer, including specified +/// renderers and template renderers. +class _BuildData { final BuildStep _buildStep; final TypeProvider _typeProvider; final TypeSystem _typeSystem; + final TemplateFormat _format; + + _BuildData( + this._buildStep, this._typeProvider, this._typeSystem, this._format); +} + +/// A class which compiles a single template file into a single +class _AotCompiler { + final InterfaceType _contextType; + + final String _rendererName; + final AssetId _templateAssetId; - final TemplateFormat _format; + final _BuildData _buildData; final List _syntaxTree; @@ -38,21 +48,25 @@ class _AotCompiler { final List<_VariableLookup> _contextStack; - static Future<_AotCompiler> readAndParse( + int _partialCounter = 0; + + /*late*/ int _contextNameCounter; + + /// Reads the template at [templateAssetId] and parses it into a syntax tree, + /// returning an [_AotCompiler] with the necessary information to be able to + /// compile the template into a renderer. + static Future<_AotCompiler> _readAndParse( InterfaceType contextType, String rendererName, AssetId templateAssetId, - TemplateFormat format, - StringBuffer buffer, - BuildStep buildStep, - TypeProvider typeProvider, - TypeSystem typeSystem, { + _BuildData buildData, + StringBuffer buffer, { List<_VariableLookup> contextStack, }) async { - var template = await buildStep.readAsString(templateAssetId); + var template = await buildData._buildStep.readAsString(templateAssetId); var syntaxTree = MustachioParser(template, templateAssetId.uri).parse(); - return _AotCompiler._(contextType, rendererName, templateAssetId, format, - syntaxTree, buffer, buildStep, typeProvider, typeSystem, + return _AotCompiler._(contextType, rendererName, templateAssetId, + syntaxTree, buildData, buffer, contextStack: contextStack); } @@ -60,12 +74,9 @@ class _AotCompiler { this._contextType, this._rendererName, this._templateAssetId, - this._format, this._syntaxTree, - this._buffer, - this._buildStep, - this._typeProvider, - this._typeSystem, { + this._buildData, + this._buffer, { List<_VariableLookup> contextStack, }) : _contextStack = _rename(contextStack ?? []), _contextNameCounter = contextStack?.length ?? 0; @@ -80,11 +91,6 @@ class _AotCompiler { return [...result.reversed]; } - Future _compileToLibrary() async { - await _compileToRenderer(); - return DartFormatter().format(_buffer.toString()); - } - Future _compileToRenderer() async { if (_contextStack.isEmpty) { var contextName = 'context0'; @@ -92,6 +98,7 @@ class _AotCompiler { _contextStack.push(contextVariable); _contextNameCounter++; } + // Get the type parameters of _each_ of the context types in the stack, // including their bounds, concatenate them, and wrap them in angle // brackets. @@ -124,10 +131,6 @@ class _AotCompiler { _buffer.write(partialRenderer._buffer.toString()); } } - - int _partialCounter = 0; - - /*late*/ int _contextNameCounter; } /// Represents a variable lookup via property access chain [name] which returns @@ -146,22 +149,32 @@ class _BlockCompiler { final List<_VariableLookup> _contextStack; + _BlockCompiler(this._templateCompiler, this._contextStack); + + void write(String text) => _templateCompiler._buffer.write(text); + + void writeln(String text) => _templateCompiler._buffer.writeln(text); + InterfaceType get contextType => _contextStack.first.type; String get contextName => _contextStack.first.name; - _BlockCompiler(this._templateCompiler, this._contextStack); + TemplateFormat get format => _templateCompiler._buildData._format; - void write(String text) => _templateCompiler._buffer.write(text); + TypeProvider get typeProvider => _templateCompiler._buildData._typeProvider; - void writeln(String text) => _templateCompiler._buffer.writeln(text); + TypeSystem get typeSystem => _templateCompiler._buildData._typeSystem; - String getNewConextName() { + /// Generates a new name for a context variable. Each context variable going + /// up the stack needs to be accessible, so they each need a unique variable + /// name. + String getNewContextName() { var newContextName = 'context${_templateCompiler._contextNameCounter}'; _templateCompiler._contextNameCounter++; return newContextName; } + /// The base name of a partial rendering function. String get partialBaseName => '_${_templateCompiler._rendererName}_partial'; Future _compile(List syntaxTree) async { @@ -180,8 +193,7 @@ class _BlockCompiler { } Future _compilePartial(Partial node) async { - var extension = - _templateCompiler._format == TemplateFormat.html ? 'html' : 'md'; + var extension = format == TemplateFormat.html ? 'html' : 'md'; var partialAssetId = AssetId.resolve(Uri.parse('_${node.key}.$extension'), from: _templateCompiler._templateAssetId); var partialRenderer = _templateCompiler._partialRenderers.firstWhere( @@ -190,15 +202,8 @@ class _BlockCompiler { if (partialRenderer == null) { var name = '${partialBaseName}_${node.key}_${_templateCompiler._partialCounter}'; - partialRenderer = await _AotCompiler.readAndParse( - contextType, - name, - partialAssetId, - _templateCompiler._format, - StringBuffer(), - _templateCompiler._buildStep, - _templateCompiler._typeProvider, - _templateCompiler._typeSystem, + partialRenderer = await _AotCompiler._readAndParse(contextType, name, + partialAssetId, _templateCompiler._buildData, StringBuffer(), contextStack: _contextStack); // Add this partial renderer to be written later. _templateCompiler._partialRenderers.add(partialRenderer); @@ -222,8 +227,8 @@ class _BlockCompiler { // Conditional block. await _compileConditionalSection(variableLookup, node.children, invert: node.invert); - } else if (_templateCompiler._typeSystem.isAssignableTo(variableLookup.type, - _templateCompiler._typeProvider.iterableDynamicType)) { + } else if (typeSystem.isAssignableTo( + variableLookup.type, typeProvider.iterableDynamicType)) { // Repeated block. await _compileRepeatedSection(variableLookup, node.children, invert: node.invert); @@ -256,14 +261,14 @@ class _BlockCompiler { await _BlockCompiler(_templateCompiler, _contextStack)._compile(block); writeln('}'); } else { - var newContextName = getNewConextName(); + var newContextName = getNewContextName(); write('for (var $newContextName in $variableAccess) {'); // If [loopType] is something like `C` where // `class C implements Queue>`, we need the [ClassElement] // for [Iterable], and then use [DartType.asInstanceOf] to ultimately // determine that the inner type of the loop is, for example, // `Future`. - var iterableElement = _templateCompiler._typeProvider.iterableElement; + var iterableElement = typeProvider.iterableElement; var iterableType = variableLookup.type.asInstanceOf(iterableElement); var innerContextType = iterableType.typeArguments.first; var innerContext = _VariableLookup(innerContextType, newContextName); @@ -283,7 +288,7 @@ class _BlockCompiler { await _BlockCompiler(_templateCompiler, _contextStack)._compile(block); writeln('}'); } else { - var innerContextName = getNewConextName(); + var innerContextName = getNewContextName(); writeln('if ($variableAccess != null) {'); writeln(' var $innerContextName = $variableAccess;'); var innerContext = _VariableLookup(variableLookup.type, innerContextName); @@ -366,6 +371,8 @@ class _BlockCompiler { } } +/// Compiles all templates specified in [specs] into a Dart library containing +/// a renderer for each template. Future compileTemplatesToRenderers( Set specs, Uri sourceUri, @@ -394,16 +401,21 @@ import 'package:dartdoc/dartdoc.dart'; import 'package:dartdoc/src/generator/template_data.dart'; import '${p.basename(sourceUri.path)}'; '''); + var buildData = _BuildData(buildStep, typeProvider, typeSystem, format); for (var spec in specs) { - var templateUri = spec.standardTemplateUri[format]; - print('for $spec, found tU: $templateUri; ${templateUri?.isAbsolute}'); + var templateUri = spec.standardTemplateUris[format]; if (templateUri == null) continue; var templateAsset = templateUri.isAbsolute ? AssetId.resolve(templateUri) : AssetId.resolve(templateUri, from: buildStep.inputId); - var compiler = await _AotCompiler.readAndParse(spec.contextType, spec.name, - templateAsset, format, buffer, buildStep, typeProvider, typeSystem); - await compiler._compileToLibrary(); + var compiler = await _AotCompiler._readAndParse( + spec.contextType, + spec.name, + templateAsset, + buildData, + buffer, + ); + await compiler._compileToRenderer(); } return DartFormatter().format(buffer.toString()); } diff --git a/tool/mustachio/utilities.dart b/tool/mustachio/utilities.dart index 1247aa927c..983c421a5e 100644 --- a/tool/mustachio/utilities.dart +++ b/tool/mustachio/utilities.dart @@ -1,3 +1,7 @@ +// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file +// 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. + import 'package:analyzer/dart/element/element.dart'; extension ClassExtensions on ClassElement { From 80688a2f77727ef024d430232685c9eaf3698770 Mon Sep 17 00:00:00 2001 From: Sam Rawlins Date: Tue, 18 May 2021 16:11:32 -0700 Subject: [PATCH 03/10] README --- .../mustachio/foo.aot_renderers_for_html.dart | 30 ++- test/mustachio/templates/foo.html | 11 +- tool/mustachio/README.md | 177 +++++++++++++++- tool/mustachio/codegen_aot_compiler.dart | 196 +++++++++++------- 4 files changed, 329 insertions(+), 85 deletions(-) diff --git a/test/mustachio/foo.aot_renderers_for_html.dart b/test/mustachio/foo.aot_renderers_for_html.dart index 87d676ceaa..16564907b6 100644 --- a/test/mustachio/foo.aot_renderers_for_html.dart +++ b/test/mustachio/foo.aot_renderers_for_html.dart @@ -20,7 +20,6 @@ import 'foo.dart'; String renderFoo(Foo context0) { final buffer = StringBuffer(); buffer.write('''
- '''); buffer.write(_renderFoo_partial_foo_header_0(context0)); buffer.write(''' @@ -28,8 +27,33 @@ String renderFoo(Foo context0) { s1: '''); buffer.write(htmlEscape.convert(context0.s1.toString())); buffer.write(''' - b1: '''); - buffer.write(htmlEscape.convert(context0.b1.toString())); + b1? '''); + if (context0.b1 == true) { + buffer.write('''yes'''); + } + if (context0.b1 != true) { + buffer.write('''no'''); + } + buffer.write(''' + l1:'''); + for (var context1 in context0.l1) { + buffer.write('''item: '''); + buffer.write(htmlEscape.convert(context1.toString())); + } + if (context0.l1?.isEmpty ?? true) { + buffer.write('''no items'''); + } + buffer.write(''' + baz:'''); + if (context0.baz != null) { + var context2 = context0.baz; + buffer.write(''' + Baz has a '''); + buffer.write(htmlEscape.convert(context2.bar.s2.toString())); + } + if (context0.baz == null) { + buffer.write('''baz is null'''); + } buffer.write('''
'''); return buffer.toString(); diff --git a/test/mustachio/templates/foo.html b/test/mustachio/templates/foo.html index 794e67af84..2cf104bf39 100644 --- a/test/mustachio/templates/foo.html +++ b/test/mustachio/templates/foo.html @@ -1,7 +1,14 @@
- {{ >foo_header }} s1: {{ s1 }} - b1: {{ b1 }} + b1? {{ #b1 }}yes{{ /b1 }}{{ ^b1 }}no{{ /b1 }} + l1: + {{ #l1 }}item: {{.}}{{ /l1 }} + {{ ^l1 }}no items{{ /l1 }} + baz: + {{ #baz }} + Baz has a {{ bar.s2 }} + {{ /baz }} + {{ ^baz }}baz is null{{ /baz }}
\ No newline at end of file diff --git a/tool/mustachio/README.md b/tool/mustachio/README.md index e76100d34d..90b4fa748e 100644 --- a/tool/mustachio/README.md +++ b/tool/mustachio/README.md @@ -164,8 +164,7 @@ types: Mustachio's first set of generated renderers render objects into runtime-interpreted Mustache template blocks. Each template block may be the content of a Mustache template file, a Mustache partial file, or a Mustache -section. The design for a tool which can generate such a renderer is included -after the design for the renderer. +section. The mechanics of the tool which generates these renderers is a separate concern from the mechanics of the renderers themselves. This section is primarily @@ -180,7 +179,9 @@ Any examples in this section will use the following types: abstract class User { String get name; UserProfile get profile; + bool get isFeatured; List? get posts; + Post? featuredPost; } abstract class UserProfile { @@ -625,6 +626,176 @@ inside this partial) and render the partial with the same renderer, using TODO(srawlins): Write. -## Generated renderer for a specific type and a static template which pre-compiles the templates +## Generated renderer for a specific type and a pre-compiled static template + +Mustachio's second set of generated renderers render objects into +ahead-of-time compiled Mustache template blocks. Each template block may be the +content of a Mustache template file, a Mustache partial file, or a Mustache +section. + +The mechanics of the tool which generates these renderers is a separate concern +from the mechanics of the renderers themselves. This section is primarily +concerned with documenting how the renderers work. At the end, a higher level +description of the code generator can be found. + +### Annotation + +The code generation trigger is a `@Renderer` annotation, which specifies a +render function name, a context type, and a template file. The code generator +parses the specified template file, and uses the context type to resolve all tag +keys at the time of code generation. For example, given the following template: + +```html +

{{ name }}

+{{ #isFeatured }}Featured{{ /isFeatured }} +
+{{ #featuredPost }}

{{ title }}

{{ /featuredPost }} +{{ #posts }}

{{ title }}

{{ /posts }} +
+``` + +The code generator resolves `name` to a String getter on User, `posts` to a +`List` getter on User, `isPublished` to a `bool` getter on `Post`, and +`title` to a String getter on `Post`. It has all of the information it needs to +write out the logic of the template as a simple state machine. This state +machine is written out as the render function and helper functions for partials: + +```dart +String renderUser(User context0) { + final buffer = StringBuffer(); + // ... + return buffer.toString(); +} +``` + +The `renderFoo` function takes a `Foo` object, the context object, as +`context0`. Since the context objects exist in a stack and can each be accessed, +we must enumerate them. We write various text to the buffer, according to the +template, and then return the rendered output. + +### Rendering plain text + +Rendering plain text is as simple as writing it to the buffer: + +```dart + buffer.write('''

'''); +``` + +### Rendering a variable + +Rendering a variable requires one or more getter calls. During code generation, +variable keys have been resolved so that the renderer knows the context objects +that provide each getter. + +`{{ name }}` compiles to: + +```dart + buffer.write(htmlEscape.convert(context0.name.toString())); +``` + +This code calls the `name` getter on `conext0`, and then `toString()`. Since +`{{ name }}` uses two brackets, the output must be HTML-escaped. If it were +written `{{{ name }}}`, then the HTML-escaping call would not be made. + +### Rendering a section + +A section could be a conditional section, a repeated section, or a value +section. The code generator will know, and will write the correct behavior into +the renderer. + +#### Rendering a conditional section + +`{{ #isFeatured }}Featured{{ /isFeatured }}` compiles to: + +```dart + if (context0.b1 == true) { + buffer.write('''Featured'''); + } +``` + +The text is written only if `b1` is `true` (not `false` or `null`). If the +section were inverted (starting with `{{ ^isFeatured }}`), this would be a +`!= true` check. + +#### Rendering a repeated section + +`{{ #posts }}

{{ title }}

{{ /posts }}` + +compiles to: + +```dart + for (var context1 in context0.posts) { + buffer.write('''

'''); + buffer.write(htmlEscape.convert(context1.title.toString())); + buffer.write('''

'''); + } +``` + +#### Rendering a valud section + +`{{ #featuredPost }}

{{ title }}

{{ /featuredPost }}` + +compiles to: + +```dart + if (context0.featuredPost != null) { + var context2 = context0.featuredPost; + buffer.write('''

'''); + buffer.write(htmlEscape.convert(context2.title.toString())); + buffer.write('''

'''); + } +``` + +The section contents are written only if `context0.featuredPost` is not `null`. +Additionally, the section needs `context0.featuredPost` pushed onto the context +stack, which becomes `context2`. This new context object is used to render the +featured post's `title`. + +### Rendering a partial + +Partials are allowed to reference themselves, so they must be implemented as new +functions which can reference themselves. This template code: + +```html +{{ #posts }}{{ >post }}{{ /posts }} +``` + +will use a custom partial resolver to resolve `post` to a file at `_post.html`, +which contains the following template: + +```html +

{{ title }}

+

by {{ name }}

+``` + +These two templates compile into the following two render functions: + +```dart +String renderUser(User context0) { + final buffer = StringBuffer(); + for (var context1 in context0.posts) { + buffer.write(_renderUser_partial_user_post_0(context1, context0)); + } + return buffer.toString(); +} + +String _renderUser_partial_user_post_0(Post context1, User context0) { + final buffer = StringBuffer(); + buffer.write('''

'''); + buffer.write(htmlEscape.convert(context1.title.toString())); + buffer.write('''

+

by '''); + buffer.write(htmlEscape.convert(context0.name.toString())); + buffer.write('''

'''); + return buffer.toString(); +} +``` + +Note that the partial function is written to accept each context object as a +separate parameter, so that they are easily accessed by name. `context1` is +accessed in order to write the post's `title`, and `context0` is accessed in +order to write the author's `name`. + +### High level design for generating renderers TODO(srawlins): Write. \ No newline at end of file diff --git a/tool/mustachio/codegen_aot_compiler.dart b/tool/mustachio/codegen_aot_compiler.dart index 99bb7ee55b..097fd87665 100644 --- a/tool/mustachio/codegen_aot_compiler.dart +++ b/tool/mustachio/codegen_aot_compiler.dart @@ -15,42 +15,93 @@ import 'package:path/path.dart' as p; import 'utilities.dart'; -/// Various static build data to be used for each renderer, including specified -/// renderers and template renderers. -class _BuildData { - final BuildStep _buildStep; +/// Compiles all templates specified in [specs] into a Dart library containing +/// a renderer for each template. +Future compileTemplatesToRenderers( + Set specs, + Uri sourceUri, + BuildStep buildStep, + TypeProvider typeProvider, + TypeSystem typeSystem, + TemplateFormat format, +) async { + var buffer = StringBuffer(''' +// GENERATED CODE. DO NOT EDIT. +// +// To change the contents of this library, make changes to the builder source +// files in the tool/mustachio/ directory. - final TypeProvider _typeProvider; +// Sometimes we enter a new section which triggers creating a new variable, but +// the variable is not used; generally when the section is checking if a +// non-bool, non-Iterable field is non-null. +// ignore_for_file: unused_local_variable - final TypeSystem _typeSystem; +// It is hard to track exact imports without using package:code_builder. +// ignore_for_file: unused_import - final TemplateFormat _format; +import 'dart:convert' show htmlEscape; - _BuildData( - this._buildStep, this._typeProvider, this._typeSystem, this._format); +import 'package:dartdoc/dartdoc.dart'; +import 'package:dartdoc/src/generator/template_data.dart'; +import '${p.basename(sourceUri.path)}'; +'''); + var buildData = _BuildData(buildStep, typeProvider, typeSystem, format); + for (var spec in specs) { + var templateUri = spec.standardTemplateUris[format]; + if (templateUri == null) continue; + var templateAsset = templateUri.isAbsolute + ? AssetId.resolve(templateUri) + : AssetId.resolve(templateUri, from: buildStep.inputId); + var compiler = await _AotCompiler._readAndParse( + spec.contextType, + spec.name, + templateAsset, + buildData, + buffer, + ); + await compiler._compileToRenderer(); + } + return DartFormatter().format(buffer.toString()); } -/// A class which compiles a single template file into a single +/// A class which compiles a single template file into a renderer Dart function, +/// and possible support functions for partial templates. class _AotCompiler { + /// The template to be compiled. + final AssetId _templateAssetId; + + /// The context type which is to be rendered into the compiled template. final InterfaceType _contextType; + /// The name of the renderer, which is either a public name (for top-level + /// renderers specified in a `@Renderer` annotation), or a private name for + /// a partial. final String _rendererName; - final AssetId _templateAssetId; - final _BuildData _buildData; + /// The parsed syntax tree of the template at [_templateAssetId]. final List _syntaxTree; + /// The output buffer into which the various renderer source code is to be + /// written. final StringBuffer _buffer; - final Set<_AotCompiler> _partialRenderers = {}; + /// The set of compilers for all referenced partials. + final Set<_AotCompiler> _partialCompilers = {}; + /// The current stack of context objects (as variable lookups). final List<_VariableLookup> _contextStack; + /// A counter for naming partial render functions. + /// + /// Incrementing the counter keeps names unique. int _partialCounter = 0; - /*late*/ int _contextNameCounter; + /// A counter for naming context variables. + /// + /// Incrementing the counter keeps names unique. + int _contextNameCounter; /// Reads the template at [templateAssetId] and parses it into a syntax tree, /// returning an [_AotCompiler] with the necessary information to be able to @@ -81,6 +132,11 @@ class _AotCompiler { }) : _contextStack = _rename(contextStack ?? []), _contextNameCounter = contextStack?.length ?? 0; + /// Returns a copy of [original], replacing each variable's name with + /// `context0` through `contextN` for `N` variables. + /// + /// This ensures that each renderer accepts a simple list of context objects + /// with predictable names. static List<_VariableLookup> _rename(List<_VariableLookup> original) { var result = <_VariableLookup>[]; var index = original.length - 1; @@ -126,24 +182,15 @@ class _AotCompiler { _buffer.writeln(' return buffer.toString();'); _buffer.writeln('}'); - for (var partialRenderer in _partialRenderers) { + for (var partialRenderer in _partialCompilers) { await partialRenderer._compileToRenderer(); _buffer.write(partialRenderer._buffer.toString()); } } } -/// Represents a variable lookup via property access chain [name] which returns -/// an object of type [type]. -@immutable -class _VariableLookup { - final InterfaceType type; - - final String name; - - _VariableLookup(this.type, this.name); -} - +/// A class which can compile a Mustache block of nodes into Dart source for a +/// renderer. class _BlockCompiler { final _AotCompiler _templateCompiler; @@ -182,7 +229,7 @@ class _BlockCompiler { if (node is Text) { _writeText(node.content); } else if (node is Variable) { - var variableLookup = _lookUpGetter(node, node.key); + var variableLookup = _lookUpGetter(node); _writeGetter(variableLookup, escape: node.escape); } else if (node is Section) { await _compileSection(node); @@ -192,11 +239,12 @@ class _BlockCompiler { } } + /// Compiles [node] into a renderer's Dart source. Future _compilePartial(Partial node) async { var extension = format == TemplateFormat.html ? 'html' : 'md'; var partialAssetId = AssetId.resolve(Uri.parse('_${node.key}.$extension'), from: _templateCompiler._templateAssetId); - var partialRenderer = _templateCompiler._partialRenderers.firstWhere( + var partialRenderer = _templateCompiler._partialCompilers.firstWhere( (p) => p._templateAssetId == partialAssetId, orElse: () => null); if (partialRenderer == null) { @@ -205,19 +253,21 @@ class _BlockCompiler { partialRenderer = await _AotCompiler._readAndParse(contextType, name, partialAssetId, _templateCompiler._buildData, StringBuffer(), contextStack: _contextStack); - // Add this partial renderer to be written later. - _templateCompiler._partialRenderers.add(partialRenderer); + // Add this partial renderer; to be written later. + _templateCompiler._partialCompilers.add(partialRenderer); _templateCompiler._partialCounter++; } - // Call the renderer here. + // Call the partial's renderer function here; the definition of the renderer + // function is written later. write('buffer.write('); writeln('${partialRenderer._rendererName}('); writeln(_contextStack.map((context) => context.name).join(',')); writeln('));'); } + /// Compiles [node] into a renderer's Dart source. Future _compileSection(Section node) async { - var variableLookup = _lookUpGetter(node, node.key); + var variableLookup = _lookUpGetter(node); if (variableLookup == null) { throw MustachioResolutionError(node.keySpan.message( "Failed to resolve '${node.key}' as a property on the context type:" @@ -239,6 +289,8 @@ class _BlockCompiler { } } + /// Compiles a conditional section containing [block] into a renderer's Dart + /// source. Future _compileConditionalSection( _VariableLookup variableLookup, List block, {bool invert = false}) async { @@ -252,6 +304,8 @@ class _BlockCompiler { writeln('}'); } + /// Compiles a repeated section containing [block] into a renderer's Dart + /// source. Future _compileRepeatedSection( _VariableLookup variableLookup, List block, {bool invert = false}) async { @@ -279,6 +333,7 @@ class _BlockCompiler { } } + /// Compiles a value section containing [block] into a renderer's Dart source. Future _compileValueSection( _VariableLookup variableLookup, List block, {bool invert = false}) async { @@ -299,9 +354,13 @@ class _BlockCompiler { } } - _VariableLookup _lookUpGetter(HasMultiNamedKey node, List key) { + /// Returns a valid [_VariableLookup] on a Mustache node, [node] by resolving + /// its key. + _VariableLookup _lookUpGetter(HasMultiNamedKey node) { + var key = node.key; + // '.' is an entirely special case. - if (key.length == 2 && key[0] == '' && key[1] == '') { + if (key.length == 1 && key[0] == '.') { return _VariableLookup(contextType, contextName); } @@ -341,6 +400,8 @@ class _BlockCompiler { 'context chain: $contextTypes')); } + /// Writes [content] to the generated render functions as text, properly + /// handling newlines, quotes, and other special characters. void _writeText(String content) { if (content.isEmpty) return; if (content == '\n') { @@ -360,6 +421,9 @@ class _BlockCompiler { } } + /// Writes a call to [variableLookup] to the renderer. + /// + /// The result is HTML-escaped if [escape] is true. void _writeGetter(_VariableLookup variableLookup, {bool escape = true}) { var variableAccess = variableLookup.name; if (escape) { @@ -371,53 +435,31 @@ class _BlockCompiler { } } -/// Compiles all templates specified in [specs] into a Dart library containing -/// a renderer for each template. -Future compileTemplatesToRenderers( - Set specs, - Uri sourceUri, - BuildStep buildStep, - TypeProvider typeProvider, - TypeSystem typeSystem, - TemplateFormat format, -) async { - var buffer = StringBuffer(''' -// GENERATED CODE. DO NOT EDIT. -// -// To change the contents of this library, make changes to the builder source -// files in the tool/mustachio/ directory. +/// Various static build data to be used for each renderer, including specified +/// renderers and template renderers. +@immutable +class _BuildData { + final BuildStep _buildStep; -// Sometimes we enter a new section which triggers creating a new variable, but -// the variable is not used; generally when the section is checking if a -// non-bool, non-Iterable field is non-null. -// ignore_for_file: unused_local_variable + final TypeProvider _typeProvider; -// It is hard to track exact imports without using package:code_builder. -// ignore_for_file: unused_import + final TypeSystem _typeSystem; -import 'dart:convert' show htmlEscape; + final TemplateFormat _format; -import 'package:dartdoc/dartdoc.dart'; -import 'package:dartdoc/src/generator/template_data.dart'; -import '${p.basename(sourceUri.path)}'; -'''); - var buildData = _BuildData(buildStep, typeProvider, typeSystem, format); - for (var spec in specs) { - var templateUri = spec.standardTemplateUris[format]; - if (templateUri == null) continue; - var templateAsset = templateUri.isAbsolute - ? AssetId.resolve(templateUri) - : AssetId.resolve(templateUri, from: buildStep.inputId); - var compiler = await _AotCompiler._readAndParse( - spec.contextType, - spec.name, - templateAsset, - buildData, - buffer, - ); - await compiler._compileToRenderer(); - } - return DartFormatter().format(buffer.toString()); + _BuildData( + this._buildStep, this._typeProvider, this._typeSystem, this._format); +} + +/// Represents a variable lookup via property access chain [name] which returns +/// an object of type [type]. +@immutable +class _VariableLookup { + final InterfaceType type; + + final String name; + + _VariableLookup(this.type, this.name); } extension on List { From fe319a0cffa88d1ce0ec1945b9fc98797550b4f1 Mon Sep 17 00:00:00 2001 From: Sam Rawlins Date: Tue, 18 May 2021 16:15:35 -0700 Subject: [PATCH 04/10] fmt --- test/mustachio/foo.aot_renderers_for_md.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/test/mustachio/foo.aot_renderers_for_md.dart b/test/mustachio/foo.aot_renderers_for_md.dart index e69de29bb2..8b13789179 100644 --- a/test/mustachio/foo.aot_renderers_for_md.dart +++ b/test/mustachio/foo.aot_renderers_for_md.dart @@ -0,0 +1 @@ + From 4c0af67aa6bf41c93c1182326bc08c7454e8ff18 Mon Sep 17 00:00:00 2001 From: Sam Rawlins Date: Tue, 18 May 2021 16:23:23 -0700 Subject: [PATCH 05/10] update grinder expected generated files --- tool/grind.dart | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tool/grind.dart b/tool/grind.dart index 7f930827ee..330940e965 100644 --- a/tool/grind.dart +++ b/tool/grind.dart @@ -1050,7 +1050,9 @@ Future build() async { final _generatedFilesList = [ '../dartdoc_options.yaml', 'src/generator/html_resources.g.dart', - 'src/generator/templates.renderers.dart', + 'src/generator/templates.aot_renderers_for_html.dart', + 'src/generator/templates.aot_renderers_for_md.dart', + 'src/generator/templates.runtime_renderers.dart', 'src/version.dart', '../test/mustachio/foo.dart', ].map((s) => path.joinAll(path.posix.split(s))); From 7051b14f5db7acfabca0330782557aa3d7538a38 Mon Sep 17 00:00:00 2001 From: Sam Rawlins Date: Tue, 18 May 2021 16:29:49 -0700 Subject: [PATCH 06/10] fix test --- test/mustachio/aot_compiler_render_test.dart | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/mustachio/aot_compiler_render_test.dart b/test/mustachio/aot_compiler_render_test.dart index e33315667c..cb22aef29e 100644 --- a/test/mustachio/aot_compiler_render_test.dart +++ b/test/mustachio/aot_compiler_render_test.dart @@ -16,10 +16,9 @@ void main() { var rendered = renderFoo(foo); expect(rendered, equals('''
-
l1: [1, 2, 3]
- s1: hello b1: false
''')); + s1: hello b1? no l1:item: 1item: 2item: 3 baz:baz is null''')); }); // TODO(srawlins): Add waaay more end-to-end render tests. These are From 8d6461e94b6be50157de0cbac2c2eda05044daff Mon Sep 17 00:00:00 2001 From: Sam Rawlins Date: Tue, 18 May 2021 19:22:40 -0700 Subject: [PATCH 07/10] Little improvements around nulls --- .../templates.aot_renderers_for_html.dart | 3464 ++++++++++------- .../templates.aot_renderers_for_md.dart | 1534 +++++--- .../mustachio/foo.aot_renderers_for_html.dart | 15 +- test/mustachio/foo.aot_renderers_for_md.dart | 1 - tool/mustachio/README.md | 22 +- tool/mustachio/codegen_aot_compiler.dart | 10 +- 6 files changed, 3040 insertions(+), 2006 deletions(-) diff --git a/lib/src/generator/templates.aot_renderers_for_html.dart b/lib/src/generator/templates.aot_renderers_for_html.dart index 189c82f1d8..55d543344c 100644 --- a/lib/src/generator/templates.aot_renderers_for_html.dart +++ b/lib/src/generator/templates.aot_renderers_for_html.dart @@ -23,8 +23,8 @@ String renderCategory(CategoryTemplateData context0) { buffer.write('''
'''); - if (context0.self != null) { - var context1 = context0.self; + var context1 = context0.self; + if (context1 != null) { buffer.write('''

'''); buffer.write(htmlEscape.convert(context1.name.toString())); @@ -40,10 +40,13 @@ String renderCategory(CategoryTemplateData context0) {

Libraries

'''); - for (var context2 in context1.publicLibrariesSorted) { - buffer.write('\n '); - buffer.write( - _renderCategory_partial_library_2(context2, context1, context0)); + var context2 = context1.publicLibrariesSorted; + if (context2 != null) { + for (var context3 in context2) { + buffer.write('\n '); + buffer.write( + _renderCategory_partial_library_2(context3, context1, context0)); + } } buffer.write('''
@@ -56,10 +59,13 @@ String renderCategory(CategoryTemplateData context0) {

Classes

'''); - for (var context3 in context1.publicClassesSorted) { - buffer.write('\n '); - buffer.write( - _renderCategory_partial_class_3(context3, context1, context0)); + var context4 = context1.publicClassesSorted; + if (context4 != null) { + for (var context5 in context4) { + buffer.write('\n '); + buffer.write( + _renderCategory_partial_class_3(context5, context1, context0)); + } } buffer.write('''
@@ -72,10 +78,13 @@ String renderCategory(CategoryTemplateData context0) {

Mixins

'''); - for (var context4 in context1.publicMixinsSorted) { - buffer.write('\n '); - buffer.write( - _renderCategory_partial_mixin_4(context4, context1, context0)); + var context6 = context1.publicMixinsSorted; + if (context6 != null) { + for (var context7 in context6) { + buffer.write('\n '); + buffer.write( + _renderCategory_partial_mixin_4(context7, context1, context0)); + } } buffer.write('''
@@ -88,10 +97,13 @@ String renderCategory(CategoryTemplateData context0) {

Constants

'''); - for (var context5 in context1.publicConstantsSorted) { - buffer.write('\n '); - buffer.write( - _renderCategory_partial_constant_5(context5, context1, context0)); + var context8 = context1.publicConstantsSorted; + if (context8 != null) { + for (var context9 in context8) { + buffer.write('\n '); + buffer.write( + _renderCategory_partial_constant_5(context9, context1, context0)); + } } buffer.write('''
@@ -104,10 +116,13 @@ String renderCategory(CategoryTemplateData context0) {

Properties

'''); - for (var context6 in context1.publicPropertiesSorted) { - buffer.write('\n '); - buffer.write( - _renderCategory_partial_property_6(context6, context1, context0)); + var context10 = context1.publicPropertiesSorted; + if (context10 != null) { + for (var context11 in context10) { + buffer.write('\n '); + buffer.write(_renderCategory_partial_property_6( + context11, context1, context0)); + } } buffer.write('''
@@ -120,10 +135,13 @@ String renderCategory(CategoryTemplateData context0) {

Functions

'''); - for (var context7 in context1.publicFunctionsSorted) { - buffer.write('\n '); - buffer.write( - _renderCategory_partial_callable_7(context7, context1, context0)); + var context12 = context1.publicFunctionsSorted; + if (context12 != null) { + for (var context13 in context12) { + buffer.write('\n '); + buffer.write(_renderCategory_partial_callable_7( + context13, context1, context0)); + } } buffer.write('''
@@ -136,10 +154,13 @@ String renderCategory(CategoryTemplateData context0) {

Enums

'''); - for (var context8 in context1.publicEnumsSorted) { - buffer.write('\n '); - buffer.write( - _renderCategory_partial_class_3(context8, context1, context0)); + var context14 = context1.publicEnumsSorted; + if (context14 != null) { + for (var context15 in context14) { + buffer.write('\n '); + buffer.write( + _renderCategory_partial_class_3(context15, context1, context0)); + } } buffer.write('''
@@ -152,10 +173,13 @@ String renderCategory(CategoryTemplateData context0) {

Typedefs

'''); - for (var context9 in context1.publicTypedefsSorted) { - buffer.write('\n '); - buffer.write( - _renderCategory_partial_typedef_8(context9, context1, context0)); + var context16 = context1.publicTypedefsSorted; + if (context16 != null) { + for (var context17 in context16) { + buffer.write('\n '); + buffer.write( + _renderCategory_partial_typedef_8(context17, context1, context0)); + } } buffer.write('''
@@ -168,10 +192,13 @@ String renderCategory(CategoryTemplateData context0) {

Exceptions / Errors

'''); - for (var context10 in context1.publicExceptionsSorted) { - buffer.write('\n '); - buffer.write( - _renderCategory_partial_class_3(context10, context1, context0)); + var context18 = context1.publicExceptionsSorted; + if (context18 != null) { + for (var context19 in context18) { + buffer.write('\n '); + buffer.write( + _renderCategory_partial_class_3(context19, context1, context0)); + } } buffer.write('''
@@ -234,8 +261,8 @@ String _renderCategory_partial_head_0(CategoryTemplateData context0) { '''); buffer.write(htmlEscape.convert(context0.title.toString())); buffer.write(''''''); - if (context0.relCanonicalPrefix != null) { - var context1 = context0.relCanonicalPrefix; + var context1 = context0.relCanonicalPrefix; + if (context1 != null) { buffer.write('''

'''); } buffer.writeln(); - if (context0.clazz != null) { - var context2 = context0.clazz; + var context2 = context0.clazz; + if (context2 != null) { buffer.write('\n '); buffer.write(_renderClass_partial_documentation_4(context2, context0)); buffer.writeln(); @@ -1242,11 +1347,14 @@ String renderClass(ClassTemplateData context0) {
  • '''); buffer.write(context0.linkedObjectType.toString()); buffer.write('''
  • '''); - for (var context3 in context2.publicSuperChainReversed) { - buffer.write(''' + var context3 = context2.publicSuperChainReversed; + if (context3 != null) { + for (var context4 in context3) { + buffer.write('''
  • '''); - buffer.write(context3.linkedName.toString()); - buffer.write('''
  • '''); + buffer.write(context4.linkedName.toString()); + buffer.write(''''''); + } } buffer.write('''
  • '''); @@ -1260,11 +1368,14 @@ String renderClass(ClassTemplateData context0) {
    Implemented types
      '''); - for (var context4 in context2.publicInterfaces) { - buffer.write(''' + var context5 = context2.publicInterfaces; + if (context5 != null) { + for (var context6 in context5) { + buffer.write('''
    • '''); - buffer.write(context4.linkedName.toString()); - buffer.write('''
    • '''); + buffer.write(context6.linkedName.toString()); + buffer.write(''''''); + } } buffer.write('''
    @@ -1275,11 +1386,14 @@ String renderClass(ClassTemplateData context0) { buffer.write('''
    Mixed in types
      '''); - for (var context5 in context2.publicMixedInTypes) { - buffer.write(''' + var context7 = context2.publicMixedInTypes; + if (context7 != null) { + for (var context8 in context7) { + buffer.write('''
    • '''); - buffer.write(context5.linkedName.toString()); - buffer.write('''
    • '''); + buffer.write(context8.linkedName.toString()); + buffer.write(''''''); + } } buffer.write('''
    '''); @@ -1289,11 +1403,14 @@ String renderClass(ClassTemplateData context0) { buffer.write('''
    Implementers
      '''); - for (var context6 in context2.publicImplementorsSorted) { - buffer.write(''' + var context9 = context2.publicImplementorsSorted; + if (context9 != null) { + for (var context10 in context9) { + buffer.write('''
    • '''); - buffer.write(context6.linkedName.toString()); - buffer.write('''
    • '''); + buffer.write(context10.linkedName.toString()); + buffer.write(''''''); + } } buffer.write('''
    '''); @@ -1303,11 +1420,14 @@ String renderClass(ClassTemplateData context0) { buffer.write('''
    Available Extensions
      '''); - for (var context7 in context2.potentiallyApplicableExtensionsSorted) { - buffer.write(''' + var context11 = context2.potentiallyApplicableExtensionsSorted; + if (context11 != null) { + for (var context12 in context11) { + buffer.write('''
    • '''); - buffer.write(context7.linkedName.toString()); - buffer.write('''
    • '''); + buffer.write(context12.linkedName.toString()); + buffer.write(''''''); + } } buffer.write('''
    '''); @@ -1317,11 +1437,14 @@ String renderClass(ClassTemplateData context0) { buffer.write('''
    Annotations
      '''); - for (var context8 in context2.annotations) { - buffer.write(''' + var context13 = context2.annotations; + if (context13 != null) { + for (var context14 in context13) { + buffer.write('''
    • '''); - buffer.write(context8.linkedNameWithParameters.toString()); - buffer.write('''
    • '''); + buffer.write(context14.linkedNameWithParameters.toString()); + buffer.write(''''''); + } } buffer.write('''
    '''); @@ -1337,32 +1460,35 @@ String renderClass(ClassTemplateData context0) {

    Constructors

    '''); - for (var context9 in context2.publicConstructorsSorted) { - buffer.write(''' + var context15 = context2.publicConstructorsSorted; + if (context15 != null) { + for (var context16 in context15) { + buffer.write('''
    + buffer.write(htmlEscape.convert(context16.htmlId.toString())); + buffer.write('''" class="callable"> '''); - buffer.write(context9.linkedName.toString()); - buffer.write('''('''); - buffer.write(context9.linkedParams.toString()); - buffer.write(''') + buffer.write(context16.linkedName.toString()); + buffer.write('''('''); + buffer.write(context16.linkedParams.toString()); + buffer.write(''')
    '''); - buffer.write(context9.oneLineDoc.toString()); - buffer.write(' '); - buffer.write(context9.extendedDocLink.toString()); - if (context9.isConst == true) { - buffer.write(''' + buffer.write(context16.oneLineDoc.toString()); + buffer.write(' '); + buffer.write(context16.extendedDocLink.toString()); + if (context16.isConst == true) { + buffer.write('''
    const
    '''); - } - if (context9.isFactory == true) { - buffer.write(''' + } + if (context16.isFactory == true) { + buffer.write('''
    factory
    '''); - } - buffer.write(''' + } + buffer.write('''
    '''); + } } buffer.write('''
    @@ -1379,10 +1505,13 @@ String renderClass(ClassTemplateData context0) {

    Properties

    '''); - for (var context10 in context2.publicInstanceFieldsSorted) { - buffer.write('\n '); - buffer.write( - _renderClass_partial_property_5(context10, context2, context0)); + var context17 = context2.publicInstanceFieldsSorted; + if (context17 != null) { + for (var context18 in context17) { + buffer.write('\n '); + buffer.write( + _renderClass_partial_property_5(context18, context2, context0)); + } } buffer.write('''
    @@ -1398,10 +1527,13 @@ String renderClass(ClassTemplateData context0) { buffer.write('''" id="instance-methods">

    Methods

    '''); - for (var context11 in context2.publicInstanceMethodsSorted) { - buffer.write('\n '); - buffer.write( - _renderClass_partial_callable_6(context11, context2, context0)); + var context19 = context2.publicInstanceMethodsSorted; + if (context19 != null) { + for (var context20 in context19) { + buffer.write('\n '); + buffer.write( + _renderClass_partial_callable_6(context20, context2, context0)); + } } buffer.write('''
    @@ -1417,10 +1549,13 @@ String renderClass(ClassTemplateData context0) { buffer.write('''" id="operators">

    Operators

    '''); - for (var context12 in context2.publicInstanceOperatorsSorted) { - buffer.write('\n '); - buffer.write( - _renderClass_partial_callable_6(context12, context2, context0)); + var context21 = context2.publicInstanceOperatorsSorted; + if (context21 != null) { + for (var context22 in context21) { + buffer.write('\n '); + buffer.write( + _renderClass_partial_callable_6(context22, context2, context0)); + } } buffer.write('''
    @@ -1433,10 +1568,13 @@ String renderClass(ClassTemplateData context0) {

    Static Properties

    '''); - for (var context13 in context2.publicVariableStaticFieldsSorted) { - buffer.write('\n '); - buffer.write( - _renderClass_partial_property_5(context13, context2, context0)); + var context23 = context2.publicVariableStaticFieldsSorted; + if (context23 != null) { + for (var context24 in context23) { + buffer.write('\n '); + buffer.write( + _renderClass_partial_property_5(context24, context2, context0)); + } } buffer.write('''
    @@ -1448,10 +1586,13 @@ String renderClass(ClassTemplateData context0) {

    Static Methods

    '''); - for (var context14 in context2.publicStaticMethodsSorted) { - buffer.write('\n '); - buffer.write( - _renderClass_partial_callable_6(context14, context2, context0)); + var context25 = context2.publicStaticMethodsSorted; + if (context25 != null) { + for (var context26 in context25) { + buffer.write('\n '); + buffer.write( + _renderClass_partial_callable_6(context26, context2, context0)); + } } buffer.write('''
    @@ -1464,10 +1605,13 @@ String renderClass(ClassTemplateData context0) {

    Constants

    '''); - for (var context15 in context2.publicConstantFieldsSorted) { - buffer.write('\n '); - buffer.write( - _renderClass_partial_constant_7(context15, context2, context0)); + var context27 = context2.publicConstantFieldsSorted; + if (context27 != null) { + for (var context28 in context27) { + buffer.write('\n '); + buffer.write( + _renderClass_partial_constant_7(context28, context2, context0)); + } } buffer.write('''
    @@ -1526,8 +1670,8 @@ String _renderClass_partial_head_0( '''); buffer.write(htmlEscape.convert(context0.title.toString())); buffer.write(''''''); - if (context0.relCanonicalPrefix != null) { - var context1 = context0.relCanonicalPrefix; + var context1 = context0.relCanonicalPrefix; + if (context1 != null) { buffer.write(''' (