diff --git a/lib/options.dart b/lib/options.dart index e5d64b2668..e63d771bc6 100644 --- a/lib/options.dart +++ b/lib/options.dart @@ -38,7 +38,7 @@ class DartdocGeneratorOptionContext extends DartdocOptionContext { String? get favicon => optionSet['favicon'].valueAt(context); - String get relCanonicalPrefix => + String? get relCanonicalPrefix => optionSet['relCanonicalPrefix'].valueAt(context); String? get templatesDir => optionSet['templatesDir'].valueAt(context); diff --git a/lib/src/dartdoc_options.dart b/lib/src/dartdoc_options.dart index eac2d5770d..a6b5baf96e 100644 --- a/lib/src/dartdoc_options.dart +++ b/lib/src/dartdoc_options.dart @@ -256,7 +256,7 @@ class ToolConfiguration { /// A container class to keep track of where our yaml data came from. class _YamlFileData { /// The map from the yaml file. - final Map data; + final Map data; /// The path to the directory containing the yaml file. final String canonicalDirectoryPath; @@ -1141,20 +1141,29 @@ abstract class _DartdocArgOption implements DartdocOption { help: help, hide: hide); } else if (_isListString || _isMapString) { - var defaultsToList = []; - if (_isListString) { - defaultsToList = defaultsTo as List; + if (defaultsTo == null) { + argParser.addMultiOption(argName, + abbr: abbr, + defaultsTo: null, + help: help, + hide: hide, + splitCommas: splitCommas); } else { - defaultsToList.addAll((defaultsTo as Map) - .entries - .map((m) => '${m.key}::${m.value}')); + var defaultsToList = []; + if (_isListString) { + defaultsToList = defaultsTo as List; + } else { + defaultsToList.addAll((defaultsTo as Map) + .entries + .map((m) => '${m.key}::${m.value}')); + } + argParser.addMultiOption(argName, + abbr: abbr, + defaultsTo: defaultsToList, + help: help, + hide: hide, + splitCommas: splitCommas); } - argParser.addMultiOption(argName, - abbr: abbr, - defaultsTo: defaultsToList, - help: help, - hide: hide, - splitCommas: splitCommas); } else { throw UnsupportedError('Type $T is not supported'); } diff --git a/lib/src/model/library.dart b/lib/src/model/library.dart index 54b9be2695..f98f69609d 100644 --- a/lib/src/model/library.dart +++ b/lib/src/model/library.dart @@ -233,9 +233,9 @@ class Library extends ModelElement with Categorization, TopLevelContainer { return _dirName; }(); - Set? _canonicalFor; + Set? _canonicalFor; - Set get canonicalFor { + Set get canonicalFor { if (_canonicalFor == null) { // TODO(jcollins-g): restructure to avoid using side effects. buildDocumentationAddition(documentationComment); @@ -268,7 +268,7 @@ class Library extends ModelElement with Categorization, TopLevelContainer { } // TODO(jcollins-g): warn if a macro/tool _does_ generate an unexpected // canonicalFor? - _canonicalFor ??= newCanonicalFor as Set; + _canonicalFor ??= newCanonicalFor; return rawDocs; } diff --git a/lib/src/model/package_graph.dart b/lib/src/model/package_graph.dart index 54ea8fbd1b..cddcbaa983 100644 --- a/lib/src/model/package_graph.dart +++ b/lib/src/model/package_graph.dart @@ -208,7 +208,7 @@ class PackageGraph with CommentReferable, Nameable, ModelBuilder { /// All ModelElements constructed for this package; a superset of [allModelElements]. final HashMap, ModelElement?> allConstructedModelElements = - HashMap, ModelElement?>(); + HashMap, ModelElement?>(); /// Anything that might be inheritable, place here for later lookup. final allInheritableElements = @@ -832,7 +832,7 @@ class PackageGraph with CommentReferable, Nameable, ModelBuilder { var setter = e.setter != null ? modelBuilder.from(e.setter!, lib) : null; modelElement = modelBuilder.fromPropertyInducingElement(e, lib, - getter: getter as Accessor, setter: setter as Accessor); + getter: getter as Accessor?, setter: setter as Accessor?); } else { modelElement = modelBuilder.from(e!, lib); } diff --git a/lib/src/package_meta.dart b/lib/src/package_meta.dart index e7c226e321..a54f675a53 100644 --- a/lib/src/package_meta.dart +++ b/lib/src/package_meta.dart @@ -124,7 +124,7 @@ abstract class PackageMeta { /// Returns 'Dart' or 'Flutter' (preferentially, 'Flutter' when the answer is /// "both"), or null if this package is not part of a SDK. - String? sdkType(String flutterRootPath); + String? sdkType(String? flutterRootPath); bool get needsPubGet => false; diff --git a/test/documentation_comment_test.dart b/test/documentation_comment_test.dart index c88b79ce5b..1f722d172f 100644 --- a/test/documentation_comment_test.dart +++ b/test/documentation_comment_test.dart @@ -2,8 +2,6 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -// @dart=2.9 - import 'package:analyzer/file_system/file_system.dart'; import 'package:analyzer/file_system/memory_file_system.dart'; import 'package:analyzer/src/dart/sdk/sdk.dart'; @@ -18,27 +16,26 @@ import 'package:test/test.dart'; import 'src/utils.dart' as utils; void main() { - MemoryResourceProvider resourceProvider; - PackageMetaProvider packageMetaProvider; - FakePackageConfigProvider packageConfigProvider; - Folder projectRoot; - String projectPath; - var packageName = 'my_package'; - PackageGraph packageGraph; - ModelElement libraryModel; - Matcher hasInvalidParameterWarning(String message) => _HasWarning(PackageWarning.invalidParameter, message); Matcher hasMissingExampleWarning(String message) => _HasWarning(PackageWarning.missingExampleFile, message); - void expectNoWarnings() { - expect(packageGraph.packageWarningCounter.hasWarnings, isFalse); - expect(packageGraph.packageWarningCounter.countedWarnings, isEmpty); - } - group('documentation_comment tests', () { + late MemoryResourceProvider resourceProvider; + late PackageMetaProvider packageMetaProvider; + late FakePackageConfigProvider packageConfigProvider; + late Folder projectRoot; + final packageName = 'my_package'; + late PackageGraph packageGraph; + late ModelElement libraryModel; + + void expectNoWarnings() { + expect(packageGraph.packageWarningCounter.hasWarnings, isFalse); + expect(packageGraph.packageWarningCounter.countedWarnings, isEmpty); + } + setUp(() async { resourceProvider = MemoryResourceProvider(); final sdkRoot = resourceProvider.getFolder( @@ -71,7 +68,6 @@ void main() { projectRoot = utils.writePackage( packageName, resourceProvider, packageConfigProvider); - projectPath = projectRoot.path; projectRoot .getChildAssumingFolder('lib') .getChildAssumingFile('a.dart') @@ -80,7 +76,7 @@ void main() { int x; '''); packageGraph = await utils.bootBasicPackage( - projectPath, packageMetaProvider, packageConfigProvider, + projectRoot.path, packageMetaProvider, packageConfigProvider, additionalArguments: []); libraryModel = packageGraph.defaultPackage.libraries.first; }); @@ -682,7 +678,7 @@ Text. test('processes @inject-html when enabled', () async { packageGraph = await utils.bootBasicPackage( - projectPath, packageMetaProvider, packageConfigProvider, + projectRoot.path, packageMetaProvider, packageConfigProvider, additionalArguments: ['--inject-html']); libraryModel = packageGraph.defaultPackage.libraries.first; var doc = await libraryModel.processComment(''' @@ -930,7 +926,7 @@ class _HasWarning extends Matcher { _HasWarning(this.kind, this.message); @override - bool matches(dynamic actual, Map matchState) { + bool matches(Object? actual, Map matchState) { if (actual is ModelElement) { return actual.packageGraph.packageWarningCounter .hasWarning(actual, kind, message); @@ -944,8 +940,8 @@ class _HasWarning extends Matcher { description.add('Library to be warned with $kind and message:\n$message'); @override - Description describeMismatch(dynamic actual, Description mismatchDescription, - Map matchState, bool verbose) { + Description describeMismatch(Object? actual, Description mismatchDescription, + Map matchState, bool verbose) { if (actual is ModelElement) { var warnings = actual .packageGraph.packageWarningCounter.countedWarnings[actual.element]; diff --git a/test/grind_test.dart b/test/grind_test.dart index 154cc7f3f5..ba239794ee 100644 --- a/test/grind_test.dart +++ b/test/grind_test.dart @@ -2,8 +2,6 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -// @dart=2.9 - library dartdoc.io_utils_test; import 'package:test/test.dart'; @@ -12,12 +10,11 @@ import '../tool/grind.dart' hide test; void main() { group('printWarningDelta', () { - WarningsCollection original, current; - WarningsCollection originalWithDirs, currentWithDirs; + late WarningsCollection original, current; + setUp(() { - original = - WarningsCollection('/a/tempdir', '/pubcache/path', 'oldbranch'); - original.add('originalwarning'); + original = WarningsCollection('/a/tempdir', '/pubcache/path', 'oldbranch') + ..add('originalwarning'); original.add('morewarning'); original.add('duplicateoriginalwarning'); original.add('duplicateoriginalwarning'); @@ -25,7 +22,10 @@ void main() { current.add('newwarning'); current.add('morewarning'); current.add('duplicateoriginalwarning'); - originalWithDirs = WarningsCollection( + }); + + test('verify that paths are substituted when comparing warnings', () { + var originalWithDirs = WarningsCollection( '/a/tempdirFOO', '/pubcache/pathFOO', 'DirsOriginal'); originalWithDirs.add( 'originalWarning found in /a/tempdirFOO/some/subdir/program.dart!!!!'); @@ -35,7 +35,7 @@ void main() { 'insufficent exclamation mark warning found in /pubcache/pathFOO/some/package/lib/thingy.dart.'); originalWithDirs.add( 'another originalWarning found in /a/tempdirFOO/some/subdir/program.dart'); - currentWithDirs = WarningsCollection( + var currentWithDirs = WarningsCollection( '/a/tempdirBAR', '/pubcache/pathBAR', 'DirsCurrent'); currentWithDirs.add( 'originalWarning found in /a/tempdirBAR/some/subdir/program.dart!!!!'); @@ -45,9 +45,6 @@ void main() { 'insufficent exclamation mark warning found in /pubcache/pathBAR/some/package/lib/thingy.dart.'); currentWithDirs.add( 'another originalWarning found in /a/tempdirBAR/some/other/subdir/program.dart'); - }); - - test('verify that paths are substituted when comparing warnings', () { expect( originalWithDirs.getPrintableWarningDelta( 'Dirs diff title', currentWithDirs), diff --git a/test/html_generator_test.dart b/test/html_generator_test.dart index 0c190aec9c..7cf4b96793 100644 --- a/test/html_generator_test.dart +++ b/test/html_generator_test.dart @@ -2,8 +2,6 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -// @dart=2.9 - import 'package:analyzer/file_system/file_system.dart'; import 'package:analyzer/file_system/memory_file_system.dart'; import 'package:dartdoc/dartdoc.dart' show DartdocFileWriter; @@ -26,25 +24,26 @@ import 'src/utils.dart' as utils; void main() { group('HTML generator tests', () { - MemoryResourceProvider resourceProvider; - p.Context pathContext; + late MemoryResourceProvider resourceProvider; + late p.Context pathContext; - PackageMetaProvider packageMetaProvider; - FakePackageConfigProvider packageConfigProvider; + late PackageMetaProvider packageMetaProvider; + late FakePackageConfigProvider packageConfigProvider; final Templates templates = HtmlAotTemplates(); - GeneratorFrontEnd generator; - DartdocFileWriter writer; + late GeneratorFrontEnd generator; + late DartdocFileWriter writer; - Folder projectRoot; - String projectPath; + late Folder projectRoot; + late String projectPath; setUp(() async { packageMetaProvider = utils.testPackageMetaProvider; - resourceProvider = packageMetaProvider.resourceProvider; + resourceProvider = + packageMetaProvider.resourceProvider as MemoryResourceProvider; pathContext = resourceProvider.pathContext; - packageConfigProvider = utils - .getTestPackageConfigProvider(packageMetaProvider.defaultSdkDir.path); + packageConfigProvider = utils.getTestPackageConfigProvider( + packageMetaProvider.defaultSdkDir.path) as FakePackageConfigProvider; for (var template in [ '_accessor_getter', '_accessor_setter', @@ -134,8 +133,6 @@ void main() { resourceProvider.getFile(resourceProvider.convertPath(path)); tearDown(() { - projectRoot = null; - projectPath = null; clearPackageMetaCache(); }); @@ -190,13 +187,13 @@ const Matcher doesExist = _DoesExist(); class _DoesExist extends Matcher { const _DoesExist(); @override - bool matches(Object item, Map matchState) => + bool matches(Object? item, Map matchState) => (item as Resource).exists; @override Description describe(Description description) => description.add('exists'); @override - Description describeMismatch(Object item, Description mismatchDescription, - Map matchState, bool verbose) { + Description describeMismatch(Object? item, Description mismatchDescription, + Map matchState, bool verbose) { if (item is! File && item is! Folder) { return mismatchDescription .addDescriptionOf(item) diff --git a/test/io_utils_test.dart b/test/io_utils_test.dart index 119d0421b8..28be40a655 100644 --- a/test/io_utils_test.dart +++ b/test/io_utils_test.dart @@ -2,8 +2,6 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -// @dart=2.9 - library dartdoc.io_utils_test; import 'package:dartdoc/src/io_utils.dart'; @@ -70,8 +68,8 @@ void main() { var completed = {}; var tracker = TaskQueue(maxJobs: 1); await tracker.add(() async => completed.add(0)); - await tracker.add(() async => throw Exception()).catchError((e) {}); - await tracker.add(() async => throw Exception()).catchError((e) {}); + await tracker.add(() async => throw Exception()).catchError((e) => -1); + await tracker.add(() async => throw Exception()).catchError((e) => -1); await tracker.add(() async => completed.add(3)); await tracker.tasksComplete; expect(completed.length, equals(2)); diff --git a/test/library_test.dart b/test/library_test.dart index 4dff2f197a..6f34acd66c 100644 --- a/test/library_test.dart +++ b/test/library_test.dart @@ -2,29 +2,18 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -// @dart=2.9 - -import 'package:analyzer/file_system/file_system.dart'; import 'package:dartdoc/src/model/model.dart'; -import 'package:dartdoc/src/package_config_provider.dart'; -import 'package:dartdoc/src/package_meta.dart'; import 'package:test/test.dart'; import 'src/utils.dart' as utils; void main() { - Folder sdkFolder; - - PackageMetaProvider packageMetaProvider; - FakePackageConfigProvider packageConfigProvider; - - setUp(() async { - packageMetaProvider = utils.testPackageMetaProvider; - sdkFolder = packageMetaProvider.defaultSdkDir; - packageConfigProvider = utils.getTestPackageConfigProvider(sdkFolder.path); - }); - test('libraries in SDK package have appropriate data', () async { + var packageMetaProvider = utils.testPackageMetaProvider; + var sdkFolder = packageMetaProvider.defaultSdkDir; + var packageConfigProvider = + utils.getTestPackageConfigProvider(sdkFolder.path); + var packageGraph = await utils.bootBasicPackage( sdkFolder.path, packageMetaProvider, packageConfigProvider, additionalArguments: [ diff --git a/test/package_meta_test.dart b/test/package_meta_test.dart index 3c1c262097..ac277f5459 100644 --- a/test/package_meta_test.dart +++ b/test/package_meta_test.dart @@ -2,8 +2,6 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -// @dart=2.9 - library dartdoc.package_utils_test; import 'package:dartdoc/src/io_utils.dart'; @@ -13,41 +11,34 @@ import 'package:test/test.dart'; void main() { var resourceProvider = pubPackageMetaProvider.resourceProvider; - group('PackageMeta for a directory without a pubspec', () { - PackageMeta p; - - setUp(() { - var d = resourceProvider.createSystemTemp('test_package_not_valid'); - p = pubPackageMetaProvider.fromDir(d); - }); - - test('is not valid', () { - expect(p, isNull); - }); + test('PackageMeta for a directory without a pubspec is not valid', () { + var d = resourceProvider.createSystemTemp('test_package_not_valid'); + var p = pubPackageMetaProvider.fromDir(d); + expect(p, isNull); }); group('PackageMeta for the test package', () { - PackageMeta p; + late PackageMeta p; setUp(() { p = pubPackageMetaProvider.fromDir(resourceProvider.getFolder( resourceProvider.pathContext.join( resourceProvider.pathContext.current, 'testing', - 'test_package'))); + 'test_package')))!; }); test('readme with corrupt UTF-8 loads without throwing', () { expect( resourceProvider - .readAsMalformedAllowedStringSync(p.getReadmeContents()), + .readAsMalformedAllowedStringSync(p.getReadmeContents()!), contains('Here is some messed up UTF-8.\nÐf')); }); }); group('PackageMeta.fromDir for this package', () { var p = pubPackageMetaProvider.fromDir( - resourceProvider.getFolder(resourceProvider.pathContext.current)); + resourceProvider.getFolder(resourceProvider.pathContext.current))!; test('has a name', () { expect(p.name, 'dartdoc'); @@ -77,7 +68,7 @@ void main() { expect(p.getReadmeContents(), isNotNull); expect( resourceProvider - .readAsMalformedAllowedStringSync(p.getReadmeContents()), + .readAsMalformedAllowedStringSync(p.getReadmeContents()!), contains( 'Use `dartdoc` to generate HTML documentaton for your Dart package.')); }); @@ -86,7 +77,7 @@ void main() { expect(p.getLicenseContents(), isNotNull); expect( resourceProvider - .readAsMalformedAllowedStringSync(p.getLicenseContents()), + .readAsMalformedAllowedStringSync(p.getLicenseContents()!), contains('Copyright 2014, the Dart project authors.')); }); @@ -94,14 +85,14 @@ void main() { expect(p.getChangelogContents(), isNotNull); expect( resourceProvider - .readAsMalformedAllowedStringSync(p.getChangelogContents()), + .readAsMalformedAllowedStringSync(p.getChangelogContents()!), contains('## 0.2.2')); }); }); group('PackageMeta.fromSdk', () { var p = - pubPackageMetaProvider.fromDir(pubPackageMetaProvider.defaultSdkDir); + pubPackageMetaProvider.fromDir(pubPackageMetaProvider.defaultSdkDir)!; test('has a name', () { expect(p.name, 'Dart'); @@ -132,7 +123,7 @@ void main() { expect(p.getReadmeContents(), isNotNull); expect( resourceProvider - .readAsMalformedAllowedStringSync(p.getReadmeContents()), + .readAsMalformedAllowedStringSync(p.getReadmeContents()!), startsWith('Welcome')); }); diff --git a/test/render/template_renderer_test.dart b/test/render/template_renderer_test.dart index 4d43a1daf5..e194af69a8 100644 --- a/test/render/template_renderer_test.dart +++ b/test/render/template_renderer_test.dart @@ -2,14 +2,12 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -// @dart=2.9 - import 'package:dartdoc/src/render/template_renderer.dart'; import 'package:test/test.dart'; void main() { group('HtmlTemplateRenderer', () { - HtmlLayoutRenderer renderer; + late HtmlLayoutRenderer renderer; setUpAll(() { renderer = HtmlLayoutRenderer(); @@ -27,7 +25,7 @@ void main() { }); group('MdTemplateRenderer', () { - MdLayoutRenderer renderer; + late MdLayoutRenderer renderer; setUpAll(() { renderer = MdLayoutRenderer(); diff --git a/test/src/utils.dart b/test/src/utils.dart index c288806484..15f637d8f2 100644 --- a/test/src/utils.dart +++ b/test/src/utils.dart @@ -2,8 +2,6 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -// @dart=2.9 - library test_utils; import 'dart:io'; @@ -132,7 +130,7 @@ void _writeMockSdkBinFiles(Folder root) { /// written if one is not provided via [pubspecContent]. Folder writePackage(String packageName, MemoryResourceProvider resourceProvider, FakePackageConfigProvider packageConfigProvider, - {String pubspecContent}) { + {String? pubspecContent}) { pubspecContent ??= ''' name: $packageName version: 0.0.1