From ec1a0150458dd773527e060b0c3659699d542be5 Mon Sep 17 00:00:00 2001 From: Alexandre Ardhuin Date: Thu, 5 Dec 2019 22:34:06 +0100 Subject: [PATCH] implicit-casts:false in dev (#45787) --- .../macrobenchmarks/lib/src/cubic_bezier.dart | 2 +- .../lib/stocks/build_bench.dart | 2 +- .../lib/stocks/layout_bench.dart | 2 +- dev/bots/analyze-sample-code.dart | 13 ++- dev/bots/analyze.dart | 82 +++++++++---------- dev/bots/flutter_compact_formatter.dart | 28 +++---- dev/bots/prepare_package.dart | 33 ++++---- dev/bots/test/fake_process_manager.dart | 12 +-- dev/bots/test/prepare_package_test.dart | 6 +- dev/bots/unpublish_package.dart | 31 +++---- dev/customer_testing/run_tests.dart | 10 +-- dev/devicelab/bin/run.dart | 14 ++-- .../bin/tasks/flutter_attach_test.dart | 2 +- .../flutter_gallery__back_button_memory.dart | 2 +- .../tasks/gradle_plugin_light_apk_test.dart | 4 +- .../bin/tasks/named_isolates_test.dart | 2 +- .../run_machine_concurrent_hot_reload.dart | 10 +-- .../bin/tasks/service_extensions_test.dart | 14 ++-- dev/devicelab/lib/framework/adb.dart | 4 +- dev/devicelab/lib/framework/framework.dart | 6 +- dev/devicelab/lib/framework/ios.dart | 2 +- dev/devicelab/lib/framework/manifest.dart | 36 ++++---- dev/devicelab/lib/framework/runner.dart | 4 +- .../lib/framework/running_processes.dart | 4 +- dev/devicelab/lib/framework/utils.dart | 6 +- dev/devicelab/lib/tasks/gallery.dart | 13 +-- dev/devicelab/lib/tasks/hot_mode_tests.dart | 4 +- dev/devicelab/lib/tasks/microbenchmarks.dart | 2 +- dev/devicelab/lib/tasks/perf_tests.dart | 20 +++-- .../lib/tasks/save_catalog_screenshots.dart | 2 +- dev/devicelab/test/adb_test.dart | 9 +- .../lib/src/common.dart | 49 +++++------ .../lib/src/constants.dart | 4 +- .../lib/src/matcher.dart | 2 +- .../test_driver/main_test.dart | 4 +- .../android_views/lib/motion_event_diff.dart | 20 ++--- .../android_views/lib/motion_events_page.dart | 12 +-- .../channels/lib/src/test_step.dart | 2 +- dev/integration_tests/codegen/lib/main.dart | 2 +- .../ios_add2app/flutterapp/lib/marquee.dart | 2 +- .../lib/src/test_step.dart | 2 +- dev/manual_tests/lib/actions.dart | 8 +- dev/manual_tests/lib/card_collection.dart | 2 +- dev/manual_tests/lib/material_arc.dart | 4 +- dev/manual_tests/lib/overlay_geometry.dart | 2 +- dev/manual_tests/lib/page_view.dart | 2 +- dev/manual_tests/lib/text.dart | 4 +- dev/manual_tests/test/mock_image_http.dart | 8 +- dev/snippets/lib/main.dart | 24 +++--- dev/snippets/lib/snippets.dart | 6 +- dev/snippets/test/snippets_test.dart | 2 +- dev/tools/dartdoc.dart | 22 ++--- dev/tools/gen_keycodes/bin/gen_keycodes.dart | 26 +++--- dev/tools/gen_keycodes/lib/code_gen.dart | 4 +- dev/tools/gen_keycodes/lib/key_data.dart | 38 ++++----- dev/tools/java_and_objc_doc.dart | 2 +- dev/tools/lib/roll_dev.dart | 20 ++--- .../localization/encode_kn_arb_files.dart | 4 +- .../localization/gen_date_localizations.dart | 15 ++-- dev/tools/localization/gen_l10n.dart | 42 +++++----- dev/tools/localization/gen_localizations.dart | 14 ++-- .../localization/localizations_utils.dart | 16 ++-- .../localization/localizations_validator.dart | 6 +- dev/tools/mega_gallery.dart | 10 +-- dev/tools/update_icons.dart | 6 +- dev/tools/vitool/bin/main.dart | 10 +-- dev/tools/vitool/lib/vitool.dart | 26 +++--- dev/tools/vitool/test/vitool_test.dart | 4 +- 68 files changed, 411 insertions(+), 396 deletions(-) diff --git a/dev/benchmarks/macrobenchmarks/lib/src/cubic_bezier.dart b/dev/benchmarks/macrobenchmarks/lib/src/cubic_bezier.dart index 75038c77c9..766c69794d 100644 --- a/dev/benchmarks/macrobenchmarks/lib/src/cubic_bezier.dart +++ b/dev/benchmarks/macrobenchmarks/lib/src/cubic_bezier.dart @@ -278,7 +278,7 @@ class AnimatedBezierState extends State //From http://wiki.roblox.com/index.php?title=File:Beziereq4.png double _getCubicPoint(double t, double p0, double p1, double p2, double p3) { - return pow(1 - t, 3) * p0 + + return (pow(1 - t, 3) as double) * p0 + 3 * pow(1 - t, 2) * t * p1 + 3 * (1 - t) * pow(t, 2) * p2 + pow(t, 3) * p3; diff --git a/dev/benchmarks/microbenchmarks/lib/stocks/build_bench.dart b/dev/benchmarks/microbenchmarks/lib/stocks/build_bench.dart index 8d046286dd..d1b841dedd 100644 --- a/dev/benchmarks/microbenchmarks/lib/stocks/build_bench.dart +++ b/dev/benchmarks/microbenchmarks/lib/stocks/build_bench.dart @@ -19,7 +19,7 @@ Future main() async { // We control the framePolicy below to prevent us from scheduling frames in // the engine, so that the engine does not interfere with our timings. - final LiveTestWidgetsFlutterBinding binding = TestWidgetsFlutterBinding.ensureInitialized(); + final LiveTestWidgetsFlutterBinding binding = TestWidgetsFlutterBinding.ensureInitialized() as LiveTestWidgetsFlutterBinding; final Stopwatch watch = Stopwatch(); int iterations = 0; diff --git a/dev/benchmarks/microbenchmarks/lib/stocks/layout_bench.dart b/dev/benchmarks/microbenchmarks/lib/stocks/layout_bench.dart index 0fdfa44df2..1350949bf2 100644 --- a/dev/benchmarks/microbenchmarks/lib/stocks/layout_bench.dart +++ b/dev/benchmarks/microbenchmarks/lib/stocks/layout_bench.dart @@ -20,7 +20,7 @@ Future main() async { // We control the framePolicy below to prevent us from scheduling frames in // the engine, so that the engine does not interfere with our timings. - final LiveTestWidgetsFlutterBinding binding = TestWidgetsFlutterBinding.ensureInitialized(); + final LiveTestWidgetsFlutterBinding binding = TestWidgetsFlutterBinding.ensureInitialized() as LiveTestWidgetsFlutterBinding; final Stopwatch watch = Stopwatch(); int iterations = 0; diff --git a/dev/bots/analyze-sample-code.dart b/dev/bots/analyze-sample-code.dart index ba2a2d0c3b..445871a1e8 100644 --- a/dev/bots/analyze-sample-code.dart +++ b/dev/bots/analyze-sample-code.dart @@ -78,7 +78,7 @@ void main(List arguments) { final ArgResults parsedArguments = argParser.parse(arguments); - if (parsedArguments['help']) { + if (parsedArguments['help'] as bool) { print(argParser.usage); exit(0); } @@ -93,8 +93,9 @@ void main(List arguments) { Directory tempDirectory; if (parsedArguments.wasParsed('temp')) { - tempDirectory = Directory(path.join(Directory.systemTemp.absolute.path, path.basename(parsedArguments['temp']))); - if (path.basename(parsedArguments['temp']) != parsedArguments['temp']) { + final String tempArg = parsedArguments['temp'] as String; + tempDirectory = Directory(path.join(Directory.systemTemp.absolute.path, path.basename(tempArg))); + if (path.basename(tempArg) != tempArg) { stderr.writeln('Supplied temporary directory name should be a name, not a path. Using ${tempDirectory.absolute.path} instead.'); } print('Leaving temporary output in ${tempDirectory.absolute.path}.'); @@ -106,7 +107,11 @@ void main(List arguments) { tempDirectory.createSync(); } try { - exitCode = SampleChecker(flutterPackage, tempDirectory: tempDirectory, verbose: parsedArguments['verbose']).checkSamples(); + exitCode = SampleChecker( + flutterPackage, + tempDirectory: tempDirectory, + verbose: parsedArguments['verbose'] as bool, + ).checkSamples(); } on SampleCheckerException catch (e) { stderr.write(e); exit(1); diff --git a/dev/bots/analyze.dart b/dev/bots/analyze.dart index f711deabce..15a68b4a0b 100644 --- a/dev/bots/analyze.dart +++ b/dev/bots/analyze.dart @@ -290,10 +290,11 @@ const Set _exemptTestImports = { Future verifyNoTestImports(String workingDirectory) async { final List errors = []; assert("// foo\nimport 'binding_test.dart' as binding;\n'".contains(_testImportPattern)); - for (FileSystemEntity entity in Directory(path.join(workingDirectory, 'packages')) + final Iterable dartFiles = Directory(path.join(workingDirectory, 'packages')) .listSync(recursive: true) - .where((FileSystemEntity entity) => entity is File && path.extension(entity.path) == '.dart')) { - final File file = entity; + .whereType() + .where((File file) => path.extension(file.path) == '.dart'); + for (File file in dartFiles) { for (String line in file.readAsLinesSync()) { final Match match = _testImportPattern.firstMatch(line); if (match != null && !_exemptTestImports.contains(match.group(2))) @@ -316,11 +317,9 @@ Future verifyNoTestPackageImports(String workingDirectory) async { final List shims = []; final List errors = Directory(workingDirectory) .listSync(recursive: true) - .where((FileSystemEntity entity) { - return entity is File && entity.path.endsWith('.dart'); - }) - .map((FileSystemEntity entity) { - final File file = entity; + .whereType() + .where((File file) => file.path.endsWith('.dart')) + .map((File file) { final String name = Uri.file(path.relative(file.path, from: workingDirectory)).toFilePath(windows: false); if (name.startsWith('bin/cache') || @@ -395,14 +394,10 @@ Future verifyGeneratedPluginRegistrants(String flutterRoot) async { final Map> packageToRegistrants = >{}; - for (FileSystemEntity entity in flutterRootDir.listSync(recursive: true)) { - if (entity is! File) - continue; - if (_isGeneratedPluginRegistrant(entity)) { - final String package = _getPackageFor(entity, flutterRootDir); - final List registrants = packageToRegistrants.putIfAbsent(package, () => []); - registrants.add(entity); - } + for (File file in flutterRootDir.listSync(recursive: true).whereType().where(_isGeneratedPluginRegistrant)) { + final String package = _getPackageFor(file, flutterRootDir); + final List registrants = packageToRegistrants.putIfAbsent(package, () => []); + registrants.add(file); } final Set outOfDate = {}; @@ -497,10 +492,11 @@ Future verifyNoBadImportsInFlutter(String workingDirectory) async { Future verifyNoBadImportsInFlutterTools(String workingDirectory) async { final List errors = []; - for (FileSystemEntity entity in Directory(path.join(workingDirectory, 'packages', 'flutter_tools', 'lib')) + final Iterable files = Directory(path.join(workingDirectory, 'packages', 'flutter_tools', 'lib')) .listSync(recursive: true) - .where((FileSystemEntity entity) => entity is File && path.extension(entity.path) == '.dart')) { - final File file = entity; + .whereType() + .where((File file) => path.extension(file.path) == '.dart'); + for (File file in files) { if (file.readAsStringSync().contains('package:flutter_tools/')) { errors.add('$yellow${file.path}$reset imports flutter_tools.'); } @@ -745,31 +741,33 @@ final RegExp _importPattern = RegExp(r'''^\s*import (['"])package:flutter/([^.]+ final RegExp _importMetaPattern = RegExp(r'''^\s*import (['"])package:meta/meta\.dart\1'''); Set _findFlutterDependencies(String srcPath, List errors, { bool checkForMeta = false }) { - return Directory(srcPath).listSync(recursive: true).where((FileSystemEntity entity) { - return entity is File && path.extension(entity.path) == '.dart'; - }).map>((FileSystemEntity entity) { - final Set result = {}; - final File file = entity; - for (String line in file.readAsLinesSync()) { - Match match = _importPattern.firstMatch(line); - if (match != null) - result.add(match.group(2)); - if (checkForMeta) { - match = _importMetaPattern.firstMatch(line); - if (match != null) { - errors.add( - '${file.path}\nThis package imports the ${yellow}meta$reset package.\n' - 'You should instead import the "foundation.dart" library.' - ); + return Directory(srcPath) + .listSync(recursive: true) + .whereType() + .where((File file) => path.extension(file.path) == '.dart') + .map>((File file) { + final Set result = {}; + for (String line in file.readAsLinesSync()) { + Match match = _importPattern.firstMatch(line); + if (match != null) + result.add(match.group(2)); + if (checkForMeta) { + match = _importMetaPattern.firstMatch(line); + if (match != null) { + errors.add( + '${file.path}\nThis package imports the ${yellow}meta$reset package.\n' + 'You should instead import the "foundation.dart" library.' + ); + } } } - } - return result; - }).reduce((Set value, Set element) { - value ??= {}; - value.addAll(element); - return value; - }); + return result; + }) + .reduce((Set value, Set element) { + value ??= {}; + value.addAll(element); + return value; + }); } List _deepSearch(Map> map, T start, [ Set seen ]) { diff --git a/dev/bots/flutter_compact_formatter.dart b/dev/bots/flutter_compact_formatter.dart index 54628083e5..5a4bbf6215 100644 --- a/dev/bots/flutter_compact_formatter.dart +++ b/dev/bots/flutter_compact_formatter.dart @@ -82,9 +82,9 @@ class FlutterCompactFormatter { print(raw); return null; } - final Map decoded = json.decode(raw); + final Map decoded = json.decode(raw) as Map; final TestResult originalResult = _tests[decoded['testID']]; - switch (decoded['type']) { + switch (decoded['type'] as String) { case 'done': stdout.write(_clearLine); stdout.write('$_bold${_stopwatch.elapsed}$_noColor '); @@ -92,7 +92,7 @@ class FlutterCompactFormatter { '$_green+$successes $_yellow~$skips $_red-$failures:$_bold$_gray Done.$_noColor'); break; case 'testStart': - final Map testData = decoded['test']; + final Map testData = decoded['test'] as Map; if (testData['url'] == null) { started += 1; stdout.write(_clearLine); @@ -101,20 +101,20 @@ class FlutterCompactFormatter { '$_green+$successes $_yellow~$skips $_red-$failures: $_gray${testData['name']}$_noColor'); break; } - _tests[testData['id']] = TestResult( - id: testData['id'], - name: testData['name'], - line: testData['root_line'] ?? testData['line'], - column: testData['root_column'] ?? testData['column'], - path: testData['root_url'] ?? testData['url'], - startTime: decoded['time'], + _tests[testData['id'] as int] = TestResult( + id: testData['id'] as int, + name: testData['name'] as String, + line: testData['root_line'] as int ?? testData['line'] as int, + column: testData['root_column'] as int ?? testData['column'] as int, + path: testData['root_url'] as String ?? testData['url'] as String, + startTime: decoded['time'] as int, ); break; case 'testDone': if (originalResult == null) { break; } - originalResult.endTime = decoded['time']; + originalResult.endTime = decoded['time'] as int; if (decoded['skipped'] == true) { skips += 1; originalResult.status = TestStatus.skipped; @@ -129,8 +129,8 @@ class FlutterCompactFormatter { } break; case 'error': - final String error = decoded['error']; - final String stackTrace = decoded['stackTrace']; + final String error = decoded['error'] as String; + final String stackTrace = decoded['stackTrace'] as String; if (originalResult != null) { originalResult.errorMessage = error; originalResult.stackTrace = stackTrace; @@ -143,7 +143,7 @@ class FlutterCompactFormatter { break; case 'print': if (originalResult != null) { - originalResult.messages.add(decoded['message']); + originalResult.messages.add(decoded['message'] as String); } break; case 'group': diff --git a/dev/bots/prepare_package.dart b/dev/bots/prepare_package.dart index 7b85d324d8..ce9bad72e6 100644 --- a/dev/bots/prepare_package.dart +++ b/dev/bots/prepare_package.dart @@ -39,7 +39,7 @@ class PreparePackageException implements Exception { if (message != null) { output += ': $message'; } - final String stderr = result?.stderr ?? ''; + final String stderr = result?.stderr as String ?? ''; if (stderr.isNotEmpty) { output += ':\n$stderr'; } @@ -526,15 +526,15 @@ class ArchivePublisher { newEntry['sha256'] = await _getChecksum(outputFile); // Search for any entries with the same hash and channel and remove them. - final List releases = jsonData['releases']; + final List releases = jsonData['releases'] as List; jsonData['releases'] = >[ - for (Map entry in releases) + for (Map entry in releases.cast>()) if (entry['hash'] != newEntry['hash'] || entry['channel'] != newEntry['channel']) entry, newEntry, ]..sort((Map a, Map b) { - final DateTime aDate = DateTime.parse(a['release_date']); - final DateTime bDate = DateTime.parse(b['release_date']); + final DateTime aDate = DateTime.parse(a['release_date'] as String); + final DateTime bDate = DateTime.parse(b['release_date'] as String); return bDate.compareTo(aDate); }); return jsonData; @@ -556,7 +556,7 @@ class ArchivePublisher { Map jsonData; try { - jsonData = json.decode(currentMetadata); + jsonData = json.decode(currentMetadata) as Map; } on FormatException catch (e) { throw PreparePackageException('Unable to parse JSON metadata received from cloud: $e'); } @@ -665,7 +665,7 @@ Future main(List rawArguments) async { final ArgResults parsedArguments = argParser.parse(rawArguments); - if (parsedArguments['help']) { + if (parsedArguments['help'] as bool) { print(argParser.usage); exit(0); } @@ -676,7 +676,7 @@ Future main(List rawArguments) async { exit(exitCode); } - final String revision = parsedArguments['revision']; + final String revision = parsedArguments['revision'] as String; if (revision.isEmpty) { errorExit('Invalid argument: --revision must be specified.'); } @@ -684,19 +684,20 @@ Future main(List rawArguments) async { errorExit('Invalid argument: --revision must be the entire hash, not just a prefix.'); } - if (parsedArguments['branch'].isEmpty) { + if ((parsedArguments['branch'] as String).isEmpty) { errorExit('Invalid argument: --branch must be specified.'); } + final String tempDirArg = parsedArguments['temp_dir'] as String; Directory tempDir; bool removeTempDir = false; - if (parsedArguments['temp_dir'] == null || parsedArguments['temp_dir'].isEmpty) { + if (tempDirArg == null || tempDirArg.isEmpty) { tempDir = Directory.systemTemp.createTempSync('flutter_package.'); removeTempDir = true; } else { - tempDir = Directory(parsedArguments['temp_dir']); + tempDir = Directory(tempDirArg); if (!tempDir.existsSync()) { - errorExit("Temporary directory ${parsedArguments['temp_dir']} doesn't exist."); + errorExit("Temporary directory $tempDirArg doesn't exist."); } } @@ -704,20 +705,20 @@ Future main(List rawArguments) async { if (parsedArguments['output'] == null) { outputDir = tempDir; } else { - outputDir = Directory(parsedArguments['output']); + outputDir = Directory(parsedArguments['output'] as String); if (!outputDir.existsSync()) { outputDir.createSync(recursive: true); } } - final Branch branch = fromBranchName(parsedArguments['branch']); - final ArchiveCreator creator = ArchiveCreator(tempDir, outputDir, revision, branch, strict: parsedArguments['publish']); + final Branch branch = fromBranchName(parsedArguments['branch'] as String); + final ArchiveCreator creator = ArchiveCreator(tempDir, outputDir, revision, branch, strict: parsedArguments['publish'] as bool); int exitCode = 0; String message; try { final String version = await creator.initializeRepo(); final File outputFile = await creator.createArchive(); - if (parsedArguments['publish']) { + if (parsedArguments['publish'] as bool) { final ArchivePublisher publisher = ArchivePublisher( tempDir, revision, diff --git a/dev/bots/test/fake_process_manager.dart b/dev/bots/test/fake_process_manager.dart index 2baf6ee80d..521e8c25e6 100644 --- a/dev/bots/test/fake_process_manager.dart +++ b/dev/bots/test/fake_process_manager.dart @@ -47,7 +47,7 @@ class FakeProcessManager extends Mock implements ProcessManager { void verifyCalls(List calls) { int index = 0; for (String call in calls) { - expect(call.split(' '), orderedEquals(invocations[index].positionalArguments[0])); + expect(call.split(' '), orderedEquals(invocations[index].positionalArguments[0] as Iterable)); index++; } expect(invocations.length, equals(calls.length)); @@ -66,17 +66,17 @@ class FakeProcessManager extends Mock implements ProcessManager { Future _nextProcess(Invocation invocation) async { invocations.add(invocation); - return Future.value(_popProcess(invocation.positionalArguments[0])); + return Future.value(_popProcess(invocation.positionalArguments[0] as List)); } ProcessResult _nextResultSync(Invocation invocation) { invocations.add(invocation); - return _popResult(invocation.positionalArguments[0]); + return _popResult(invocation.positionalArguments[0] as List); } Future _nextResult(Invocation invocation) async { invocations.add(invocation); - return Future.value(_popResult(invocation.positionalArguments[0])); + return Future.value(_popResult(invocation.positionalArguments[0] as List)); } void _setupMock() { @@ -117,8 +117,8 @@ class FakeProcessManager extends Mock implements ProcessManager { /// A fake process that can be used to interact with a process "started" by the FakeProcessManager. class FakeProcess extends Mock implements Process { FakeProcess(ProcessResult result, {void stdinResults(String input)}) - : stdoutStream = Stream>.fromIterable(>[result.stdout.codeUnits]), - stderrStream = Stream>.fromIterable(>[result.stderr.codeUnits]), + : stdoutStream = Stream>.value((result.stdout as String).codeUnits), + stderrStream = Stream>.value((result.stderr as String).codeUnits), desiredExitCode = result.exitCode, stdinSink = IOSink(StringStreamConsumer(stdinResults)) { _setupMock(); diff --git a/dev/bots/test/prepare_package_test.dart b/dev/bots/test/prepare_package_test.dart index 21dadad850..b7054fecae 100644 --- a/dev/bots/test/prepare_package_test.dart +++ b/dev/bots/test/prepare_package_test.dart @@ -328,13 +328,13 @@ void main() { expect(contents, contains('"channel": "dev"')); // Make sure old matching entries are removed. expect(contents, isNot(contains('v0.0.0'))); - final Map jsonData = json.decode(contents); - final List releases = jsonData['releases']; + final Map jsonData = json.decode(contents) as Map; + final List releases = jsonData['releases'] as List; expect(releases.length, equals(3)); // Make sure the new entry is first (and hopefully it takes less than a // minute to go from publishArchive above to this line!). expect( - DateTime.now().difference(DateTime.parse(releases[0]['release_date'])), + DateTime.now().difference(DateTime.parse(releases[0]['release_date'] as String)), lessThan(const Duration(minutes: 1)), ); const JsonEncoder encoder = JsonEncoder.withIndent(' '); diff --git a/dev/bots/unpublish_package.dart b/dev/bots/unpublish_package.dart index c0f779eb32..3da5bf6f00 100644 --- a/dev/bots/unpublish_package.dart +++ b/dev/bots/unpublish_package.dart @@ -41,7 +41,7 @@ class UnpublishException implements Exception { if (message != null) { output += ': $message'; } - final String stderr = result?.stderr ?? ''; + final String stderr = result?.stderr as String ?? ''; if (stderr.isNotEmpty) { output += ':\n$stderr'; } @@ -242,8 +242,8 @@ class ArchiveUnpublisher { /// Remove the archive from Google Storage. Future unpublishArchive() async { final Map jsonData = await _loadMetadata(); - final List> releases = jsonData['releases'].map>((dynamic entry) { - final Map mapEntry = entry; + final List> releases = (jsonData['releases'] as List).map>((dynamic entry) { + final Map mapEntry = entry as Map; return mapEntry.cast(); }).toList(); final Map> paths = await _getArchivePaths(releases); @@ -306,7 +306,7 @@ class ArchiveUnpublisher { Map jsonData; try { - jsonData = json.decode(currentMetadata); + jsonData = json.decode(currentMetadata) as Map; } on FormatException catch (e) { throw UnpublishException('Unable to parse JSON metadata received from cloud: $e'); } @@ -449,7 +449,7 @@ Future main(List rawArguments) async { final ArgResults parsedArguments = argParser.parse(rawArguments); - if (parsedArguments['help']) { + if (parsedArguments['help'] as bool) { print(argParser.usage); exit(0); } @@ -460,7 +460,7 @@ Future main(List rawArguments) async { exit(exitCode); } - final List revisions = parsedArguments['revision']; + final List revisions = parsedArguments['revision'] as List; if (revisions.isEmpty) { errorExit('Invalid argument: at least one --revision must be specified.'); } @@ -473,25 +473,28 @@ Future main(List rawArguments) async { } } + final String tempDirArg = parsedArguments['temp_dir'] as String; Directory tempDir; bool removeTempDir = false; - if (parsedArguments['temp_dir'] == null || parsedArguments['temp_dir'].isEmpty) { + if (tempDirArg == null || tempDirArg.isEmpty) { tempDir = Directory.systemTemp.createTempSync('flutter_package.'); removeTempDir = true; } else { - tempDir = Directory(parsedArguments['temp_dir']); + tempDir = Directory(tempDirArg); if (!tempDir.existsSync()) { - errorExit("Temporary directory ${parsedArguments['temp_dir']} doesn't exist."); + errorExit("Temporary directory $tempDirArg doesn't exist."); } } - if (!parsedArguments['confirm']) { + if (!(parsedArguments['confirm'] as bool)) { _printBanner('This will be just a dry run. To actually perform the changes below, re-run with --confirm argument.'); } - final List channelOptions = parsedArguments['channel'].isNotEmpty ? parsedArguments['channel'] : allowedChannelValues; + final List channelArg = parsedArguments['channel'] as List; + final List channelOptions = channelArg.isNotEmpty ? channelArg : allowedChannelValues; final Set channels = channelOptions.map((String value) => fromChannelName(value)).toSet(); - final List platformOptions = parsedArguments['platform'].isNotEmpty ? parsedArguments['platform'] : allowedPlatformNames; + final List platformArg = parsedArguments['platform'] as List; + final List platformOptions = platformArg.isNotEmpty ? platformArg : allowedPlatformNames; final List platforms = platformOptions.map((String value) => fromPublishedPlatform(value)).toList(); int exitCode = 0; String message; @@ -503,7 +506,7 @@ Future main(List rawArguments) async { revisions.toSet(), channels, platform, - confirmed: parsedArguments['confirm'], + confirmed: parsedArguments['confirm'] as bool, ); await publisher.unpublishArchive(); } @@ -522,7 +525,7 @@ Future main(List rawArguments) async { if (exitCode != 0) { errorExit('$message\n$stack', exitCode: exitCode); } - if (!parsedArguments['confirm']) { + if (!(parsedArguments['confirm'] as bool)) { _printBanner('This was just a dry run. To actually perform the above changes, re-run with --confirm argument.'); } exit(0); diff --git a/dev/customer_testing/run_tests.dart b/dev/customer_testing/run_tests.dart index 2630ef9d91..f6d56cab4c 100644 --- a/dev/customer_testing/run_tests.dart +++ b/dev/customer_testing/run_tests.dart @@ -65,11 +65,11 @@ Future run(List arguments) async { exit(1); } - final int repeat = int.tryParse(parsedArguments['repeat']); - final bool skipOnFetchFailure = parsedArguments['skip-on-fetch-failure']; - final bool skipTemplate = parsedArguments['skip-template']; - final bool verbose = parsedArguments['verbose']; - final bool help = parsedArguments['help']; + final int repeat = int.tryParse(parsedArguments['repeat'] as String); + final bool skipOnFetchFailure = parsedArguments['skip-on-fetch-failure'] as bool; + final bool skipTemplate = parsedArguments['skip-template'] as bool; + final bool verbose = parsedArguments['verbose'] as bool; + final bool help = parsedArguments['help'] as bool; final List files = parsedArguments .rest .expand((String path) => Glob(path).listSync()) diff --git a/dev/devicelab/bin/run.dart b/dev/devicelab/bin/run.dart index 3f39e24004..9eaa691f39 100644 --- a/dev/devicelab/bin/run.dart +++ b/dev/devicelab/bin/run.dart @@ -55,9 +55,9 @@ Future main(List rawArgs) async { return; } - final bool silent = args['silent']; - final String localEngine = args['local-engine']; - final String localEngineSrcPath = args['local-engine-src-path']; + final bool silent = args['silent'] as bool; + final String localEngine = args['local-engine'] as String; + final String localEngineSrcPath = args['local-engine-src-path'] as String; for (String taskName in _taskNames) { section('Running task "$taskName"'); @@ -72,9 +72,9 @@ Future main(List rawArgs) async { print(const JsonEncoder.withIndent(' ').convert(result)); section('Finished task "$taskName"'); - if (!result['success']) { + if (!(result['success'] as bool)) { exitCode = 1; - if (args['exit']) { + if (args['exit'] as bool) { return; } } @@ -94,10 +94,10 @@ void addTasks({ tasks.removeRange(0, index); } // Only start skipping if user specified a task to continue from - final String stage = args['stage']; + final String stage = args['stage'] as String; for (ManifestTask task in tasks) { final bool isQualifyingStage = stage == null || task.stage == stage; - final bool isQualifyingHost = !args['match-host-platform'] || task.isSupportedByHost(); + final bool isQualifyingHost = !(args['match-host-platform'] as bool) || task.isSupportedByHost(); if (isQualifyingHost && isQualifyingStage) { taskNames.add(task.name); } diff --git a/dev/devicelab/bin/tasks/flutter_attach_test.dart b/dev/devicelab/bin/tasks/flutter_attach_test.dart index 854560f188..11584ff866 100644 --- a/dev/devicelab/bin/tasks/flutter_attach_test.dart +++ b/dev/devicelab/bin/tasks/flutter_attach_test.dart @@ -86,7 +86,7 @@ void main() { const String kActivityId = '$kAppId/com.yourcompany.integration_ui.MainActivity'; task(() async { - final AndroidDevice device = await devices.workingDevice; + final AndroidDevice device = await devices.workingDevice as AndroidDevice; await device.unlock(); final Directory appDir = dir(path.join(flutterDirectory.path, 'dev/integration_tests/ui')); await inDirectory(appDir, () async { diff --git a/dev/devicelab/bin/tasks/flutter_gallery__back_button_memory.dart b/dev/devicelab/bin/tasks/flutter_gallery__back_button_memory.dart index a0f49595fd..6417624a9f 100644 --- a/dev/devicelab/bin/tasks/flutter_gallery__back_button_memory.dart +++ b/dev/devicelab/bin/tasks/flutter_gallery__back_button_memory.dart @@ -19,7 +19,7 @@ class BackButtonMemoryTest extends MemoryTest { BackButtonMemoryTest() : super('${flutterDirectory.path}/examples/flutter_gallery', 'test_memory/back_button.dart', packageName); @override - AndroidDevice get device => super.device; + AndroidDevice get device => super.device as AndroidDevice; @override int get iterationCount => 5; diff --git a/dev/devicelab/bin/tasks/gradle_plugin_light_apk_test.dart b/dev/devicelab/bin/tasks/gradle_plugin_light_apk_test.dart index e05950729c..da1d889e11 100644 --- a/dev/devicelab/bin/tasks/gradle_plugin_light_apk_test.dart +++ b/dev/devicelab/bin/tasks/gradle_plugin_light_apk_test.dart @@ -178,7 +178,7 @@ Future main() async { if (result.exitCode == 0) throw failure( 'Gradle did not exit with error as expected', result); - final String output = result.stdout + '\n' + result.stderr; + final String output = '${result.stdout}\n${result.stderr}'; if (output.contains('GradleException') || output.contains('Failed to notify') || output.contains('at org.gradle')) @@ -197,7 +197,7 @@ Future main() async { if (result.exitCode == 0) throw failure( 'flutter build apk should fail when Gradle does', result); - final String output = result.stdout + '\n' + result.stderr; + final String output = '${result.stdout}\n${result.stderr}'; if (!output.contains('Build failed') || !output.contains('builTypes')) throw failure( 'flutter build apk output should contain a readable Gradle error message', diff --git a/dev/devicelab/bin/tasks/named_isolates_test.dart b/dev/devicelab/bin/tasks/named_isolates_test.dart index 4368262da9..ff2feb6477 100644 --- a/dev/devicelab/bin/tasks/named_isolates_test.dart +++ b/dev/devicelab/bin/tasks/named_isolates_test.dart @@ -19,7 +19,7 @@ const String _kSecondIsolateName = 'second isolate name'; void main() { task(() async { - final AndroidDevice device = await devices.workingDevice; + final AndroidDevice device = await devices.workingDevice as AndroidDevice; await device.unlock(); section('Compile and run the tester app'); diff --git a/dev/devicelab/bin/tasks/run_machine_concurrent_hot_reload.dart b/dev/devicelab/bin/tasks/run_machine_concurrent_hot_reload.dart index 73191f61ff..80fb3fc638 100644 --- a/dev/devicelab/bin/tasks/run_machine_concurrent_hot_reload.dart +++ b/dev/devicelab/bin/tasks/run_machine_concurrent_hot_reload.dart @@ -17,7 +17,7 @@ void main() { Map parseFlutterResponse(String line) { if (line.startsWith('[') && line.endsWith(']')) { try { - return json.decode(line)[0]; + return json.decode(line)[0] as Map; } catch (e) { // Not valid JSON, so likely some other output that was surrounded by [brackets] return null; @@ -60,10 +60,10 @@ void main() { final dynamic json = parseFlutterResponse(line); if (json != null) { if (json['event'] == 'app.debugPort') { - vmServiceUri = Uri.parse(json['params']['wsUri']); + vmServiceUri = Uri.parse(json['params']['wsUri'] as String); print('service protocol connection available at $vmServiceUri'); } else if (json['event'] == 'app.started') { - appId = json['params']['appId']; + appId = json['params']['appId'] as String; print('application identifier is $appId'); } } @@ -129,7 +129,7 @@ void main() { if (!ok) throw 'App failed or crashed during hot reloads.'; - final List responses = results; + final List responses = results as List; final List errorResponses = responses.where( (dynamic r) => r['error'] != null ).toList(); @@ -141,7 +141,7 @@ void main() { if (errorResponses.length != 1) throw 'Did not receive the expected (exactly one) hot reload error response.'; - final String errorMessage = errorResponses.first['error']; + final String errorMessage = (errorResponses.first as Map)['error'] as String; if (!errorMessage.contains('in progress')) throw 'Error response was not that hot reload was in progress.'; if (successResponses.length != 1) diff --git a/dev/devicelab/bin/tasks/service_extensions_test.dart b/dev/devicelab/bin/tasks/service_extensions_test.dart index 53abf60b93..e91f4e587d 100644 --- a/dev/devicelab/bin/tasks/service_extensions_test.dart +++ b/dev/devicelab/bin/tasks/service_extensions_test.dart @@ -81,15 +81,15 @@ void main() { // validate the fields // {number: 8, startTime: 0, elapsed: 1437, build: 600, raster: 800} expect(event.data['number'] is int); - expect(event.data['number'] >= 0); + expect((event.data['number'] as int) >= 0); expect(event.data['startTime'] is int); - expect(event.data['startTime'] >= 0); + expect((event.data['startTime'] as int) >= 0); expect(event.data['elapsed'] is int); - expect(event.data['elapsed'] >= 0); + expect((event.data['elapsed'] as int) >= 0); expect(event.data['build'] is int); - expect(event.data['build'] >= 0); + expect((event.data['build'] as int) >= 0); expect(event.data['raster'] is int); - expect(event.data['raster'] >= 0); + expect((event.data['raster'] as int) >= 0); final Future navigationFuture = navigationEvents.first; // This tap triggers a navigation event. @@ -98,10 +98,10 @@ void main() { final VMExtensionEvent navigationEvent = await navigationFuture; // validate the fields expect(navigationEvent.data['route'] is Map); - final Map route = navigationEvent.data['route']; + final Map route = navigationEvent.data['route'] as Map; expect(route['description'] is String); expect(route['settings'] is Map); - final Map settings = route['settings']; + final Map settings = route['settings'] as Map; expect(settings.containsKey('name')); expect(settings['isInitialRoute'] is bool); diff --git a/dev/devicelab/lib/framework/adb.dart b/dev/devicelab/lib/framework/adb.dart index 0cd8967e1e..fa07a86ec5 100644 --- a/dev/devicelab/lib/framework/adb.dart +++ b/dev/devicelab/lib/framework/adb.dart @@ -128,8 +128,8 @@ class AndroidDeviceDiscovery implements DeviceDiscovery { /// [workingDevice]. @override Future chooseWorkingDevice() async { - final List allDevices = (await discoverDevices()) - .map((String id) => AndroidDevice(deviceId: id)) + final List allDevices = (await discoverDevices()) + .map((String id) => AndroidDevice(deviceId: id)) .toList(); if (allDevices.isEmpty) diff --git a/dev/devicelab/lib/framework/framework.dart b/dev/devicelab/lib/framework/framework.dart index 21e68d4579..e991c34485 100644 --- a/dev/devicelab/lib/framework/framework.dart +++ b/dev/devicelab/lib/framework/framework.dart @@ -194,8 +194,10 @@ class TaskResult { /// Constructs a successful result using JSON data stored in a file. factory TaskResult.successFromFile(File file, {List benchmarkScoreKeys}) { - return TaskResult.success(json.decode(file.readAsStringSync()), - benchmarkScoreKeys: benchmarkScoreKeys); + return TaskResult.success( + json.decode(file.readAsStringSync()) as Map, + benchmarkScoreKeys: benchmarkScoreKeys, + ); } /// Constructs an unsuccessful result. diff --git a/dev/devicelab/lib/framework/ios.dart b/dev/devicelab/lib/framework/ios.dart index c3380fe0b7..2d10b9bd01 100644 --- a/dev/devicelab/lib/framework/ios.dart +++ b/dev/devicelab/lib/framework/ios.dart @@ -47,7 +47,7 @@ Future> measureIosCpuGpu({ '-l', '${duration.inMilliseconds}', ]); - return json.decode(file('$cwd/result.json').readAsStringSync()); + return json.decode(file('$cwd/result.json').readAsStringSync()) as Map; } Future dylibSymbols(String pathToDylib) { diff --git a/dev/devicelab/lib/framework/manifest.dart b/dev/devicelab/lib/framework/manifest.dart index 61de3d2715..6263a06dbe 100644 --- a/dev/devicelab/lib/framework/manifest.dart +++ b/dev/devicelab/lib/framework/manifest.dart @@ -17,8 +17,8 @@ Manifest loadTaskManifest([ String yaml ]) { ? loadYaml(file('manifest.yaml').readAsStringSync()) : loadYamlNode(yaml); - _checkType(manifestYaml is Map, manifestYaml, 'Manifest', 'dictionary'); - return _validateAndParseManifest(manifestYaml); + _checkType(manifestYaml is YamlMap, manifestYaml, 'Manifest', 'dictionary'); + return _validateAndParseManifest(manifestYaml as YamlMap); } /// Contains CI task information. @@ -93,21 +93,21 @@ class ManifestError extends Error { // There's no good YAML validator, at least not for Dart, so we validate // manually. It's not too much code and produces good error messages. -Manifest _validateAndParseManifest(Map manifestYaml) { +Manifest _validateAndParseManifest(YamlMap manifestYaml) { _checkKeys(manifestYaml, 'manifest', const ['tasks']); return Manifest._(_validateAndParseTasks(manifestYaml['tasks'])); } List _validateAndParseTasks(dynamic tasksYaml) { - _checkType(tasksYaml is Map, tasksYaml, 'Value of "tasks"', 'dictionary'); - final List sortedKeys = tasksYaml.keys.toList()..sort(); + _checkType(tasksYaml is YamlMap, tasksYaml, 'Value of "tasks"', 'dictionary'); + final List sortedKeys = (tasksYaml as YamlMap).keys.toList()..sort(); return sortedKeys.map((dynamic taskName) => _validateAndParseTask(taskName, tasksYaml[taskName])).toList(); } ManifestTask _validateAndParseTask(dynamic taskName, dynamic taskYaml) { _checkType(taskName is String, taskName, 'Task name', 'string'); - _checkType(taskYaml is Map, taskYaml, 'Value of task "$taskName"', 'dictionary'); - _checkKeys(taskYaml, 'Value of task "$taskName"', const [ + _checkType(taskYaml is YamlMap, taskYaml, 'Value of task "$taskName"', 'dictionary'); + _checkKeys(taskYaml as YamlMap, 'Value of task "$taskName"', const [ 'description', 'stage', 'required_agent_capabilities', @@ -125,24 +125,24 @@ ManifestTask _validateAndParseTask(dynamic taskName, dynamic taskYaml) { _checkType(timeoutInMinutes is int, timeoutInMinutes, 'timeout_in_minutes', 'integer'); } - final List capabilities = _validateAndParseCapabilities(taskName, taskYaml['required_agent_capabilities']); + final List capabilities = _validateAndParseCapabilities(taskName as String, taskYaml['required_agent_capabilities']); return ManifestTask._( - name: taskName, - description: taskYaml['description'], - stage: taskYaml['stage'], - requiredAgentCapabilities: capabilities, - isFlaky: isFlaky ?? false, - timeoutInMinutes: timeoutInMinutes, + name: taskName as String, + description: taskYaml['description'] as String, + stage: taskYaml['stage'] as String, + requiredAgentCapabilities: capabilities as List, + isFlaky: isFlaky as bool ?? false, + timeoutInMinutes: timeoutInMinutes as int, ); } List _validateAndParseCapabilities(String taskName, dynamic capabilitiesYaml) { _checkType(capabilitiesYaml is List, capabilitiesYaml, 'required_agent_capabilities', 'list'); - for (int i = 0; i < capabilitiesYaml.length; i++) { + for (int i = 0; i < (capabilitiesYaml as List).length; i++) { final dynamic capability = capabilitiesYaml[i]; _checkType(capability is String, capability, 'required_agent_capabilities[$i]', 'string'); } - return capabilitiesYaml.cast(); + return (capabilitiesYaml as List).cast(); } void _checkType(bool isValid, dynamic value, String variableName, String typeName) { @@ -154,13 +154,13 @@ void _checkType(bool isValid, dynamic value, String variableName, String typeNam } void _checkIsNotBlank(dynamic value, String variableName, String ownerName) { - if (value == null || value.isEmpty) { + if (value == null || value is String && value.isEmpty || value is List && value.isEmpty) { throw ManifestError('$variableName must not be empty in $ownerName.'); } } void _checkKeys(Map map, String variableName, List allowedKeys) { - for (String key in map.keys) { + for (String key in map.keys.cast()) { if (!allowedKeys.contains(key)) { throw ManifestError( 'Unrecognized property "$key" in $variableName. ' diff --git a/dev/devicelab/lib/framework/runner.dart b/dev/devicelab/lib/framework/runner.dart index 2c59db4bb3..8e511eefde 100644 --- a/dev/devicelab/lib/framework/runner.dart +++ b/dev/devicelab/lib/framework/runner.dart @@ -69,7 +69,7 @@ Future> runTask( try { final VMIsolateRef isolate = await _connectToRunnerIsolate(await uri.future); - final Map taskResult = await isolate.invokeExtension('ext.cocoonRunTask'); + final Map taskResult = await isolate.invokeExtension('ext.cocoonRunTask') as Map; await runner.exitCode; return taskResult; } finally { @@ -100,7 +100,7 @@ Future _connectToRunnerIsolate(Uri vmServiceUri) async { final VMServiceClient client = VMServiceClient.connect(url); final VM vm = await client.getVM(); final VMIsolateRef isolate = vm.isolates.single; - final String response = await isolate.invokeExtension('ext.cocoonRunnerReady'); + final String response = await isolate.invokeExtension('ext.cocoonRunnerReady') as String; if (response != 'ready') throw 'not ready yet'; return isolate; diff --git a/dev/devicelab/lib/framework/running_processes.dart b/dev/devicelab/lib/framework/running_processes.dart index 6e26cae60e..e438b1814b 100644 --- a/dev/devicelab/lib/framework/running_processes.dart +++ b/dev/devicelab/lib/framework/running_processes.dart @@ -100,7 +100,7 @@ Stream windowsRunningProcesses(String processName) async* { print(result.stdout); return; } - for (RunningProcessInfo info in processPowershellOutput(result.stdout)) { + for (RunningProcessInfo info in processPowershellOutput(result.stdout as String)) { yield info; } } @@ -191,7 +191,7 @@ Stream posixRunningProcesses( print(result.stdout); return; } - for (RunningProcessInfo info in processPsOutput(result.stdout, processName)) { + for (RunningProcessInfo info in processPsOutput(result.stdout as String, processName)) { yield info; } } diff --git a/dev/devicelab/lib/framework/utils.dart b/dev/devicelab/lib/framework/utils.dart index 36548089b9..7e5fc2309e 100644 --- a/dev/devicelab/lib/framework/utils.dart +++ b/dev/devicelab/lib/framework/utils.dart @@ -186,7 +186,7 @@ void section(String title) { Future getDartVersion() async { // The Dart VM returns the version text to stderr. final ProcessResult result = _processManager.runSync([dartBin, '--version']); - String version = result.stderr.trim(); + String version = (result.stderr as String).trim(); // Convert: // Dart VM version: 1.17.0-dev.2.0 (Tue May 3 12:14:52 2016) on "macos_x64" @@ -465,7 +465,7 @@ String requireEnvVar(String name) { T requireConfigProperty(Map map, String propertyName) { if (!map.containsKey(propertyName)) fail('Configuration property not found: $propertyName'); - final T result = map[propertyName]; + final T result = map[propertyName] as T; return result; } @@ -571,7 +571,7 @@ String extractCloudAuthTokenArg(List rawArgs) { return null; } - final String token = args['cloud-auth-token']; + final String token = args['cloud-auth-token'] as String; if (token == null) { stderr.writeln('Required option --cloud-auth-token not found'); return null; diff --git a/dev/devicelab/lib/tasks/gallery.dart b/dev/devicelab/lib/tasks/gallery.dart index d3cb8ab00b..e27b9bce48 100644 --- a/dev/devicelab/lib/tasks/gallery.dart +++ b/dev/devicelab/lib/tasks/gallery.dart @@ -46,16 +46,17 @@ class GalleryTransitionTest { // Route paths contains slashes, which Firebase doesn't accept in keys, so we // remove them. - final Map original = Map.from( - json.decode( - file('${galleryDirectory.path}/build/transition_durations.timeline.json').readAsStringSync() - )); + final Map original = json.decode( + file('${galleryDirectory.path}/build/transition_durations.timeline.json').readAsStringSync(), + ) as Map; final Map> transitions = >{}; for (String key in original.keys) { - transitions[key.replaceAll('/', '')] = List.from(original[key]); + transitions[key.replaceAll('/', '')] = List.from(original[key] as List); } - final Map summary = json.decode(file('${galleryDirectory.path}/build/transitions.timeline_summary.json').readAsStringSync()); + final Map summary = json.decode( + file('${galleryDirectory.path}/build/transitions.timeline_summary.json').readAsStringSync(), + ) as Map; final Map data = { 'transitions': transitions, diff --git a/dev/devicelab/lib/tasks/hot_mode_tests.dart b/dev/devicelab/lib/tasks/hot_mode_tests.dart index 95d9557f45..c9bb93b6b1 100644 --- a/dev/devicelab/lib/tasks/hot_mode_tests.dart +++ b/dev/devicelab/lib/tasks/hot_mode_tests.dart @@ -90,7 +90,7 @@ TaskFunction createHotModeTest({String deviceIdOverride, Map env >[stdoutDone.future, stderrDone.future]); await process.exitCode; - twoReloadsData = json.decode(benchmarkFile.readAsStringSync()); + twoReloadsData = json.decode(benchmarkFile.readAsStringSync()) as Map; } benchmarkFile.deleteSync(); @@ -129,7 +129,7 @@ TaskFunction createHotModeTest({String deviceIdOverride, Map env await process.exitCode; freshRestartReloadsData = - json.decode(benchmarkFile.readAsStringSync()); + json.decode(benchmarkFile.readAsStringSync()) as Map; } }); }); diff --git a/dev/devicelab/lib/tasks/microbenchmarks.dart b/dev/devicelab/lib/tasks/microbenchmarks.dart index 9eebdc5a08..8cbe5816e3 100644 --- a/dev/devicelab/lib/tasks/microbenchmarks.dart +++ b/dev/devicelab/lib/tasks/microbenchmarks.dart @@ -128,7 +128,7 @@ Future> _readJsonResults(Process process) { // Also send a kill signal in case the `q` above didn't work. process.kill(ProcessSignal.sigint); try { - completer.complete(Map.from(json.decode(jsonOutput))); + completer.complete(Map.from(json.decode(jsonOutput) as Map)); } catch (ex) { completer.completeError('Decoding JSON failed ($ex). JSON string was: $jsonOutput'); } diff --git a/dev/devicelab/lib/tasks/perf_tests.dart b/dev/devicelab/lib/tasks/perf_tests.dart index 1de8fa2494..0a1d8581c2 100644 --- a/dev/devicelab/lib/tasks/perf_tests.dart +++ b/dev/devicelab/lib/tasks/perf_tests.dart @@ -167,7 +167,9 @@ class StartupTest { '-d', deviceId, ]); - final Map data = json.decode(file('$testDirectory/build/start_up_info.json').readAsStringSync()); + final Map data = json.decode( + file('$testDirectory/build/start_up_info.json').readAsStringSync(), + ) as Map; if (!reportMetrics) return TaskResult.success(data); @@ -211,9 +213,11 @@ class PerfTest { '-d', deviceId, ]); - final Map data = json.decode(file('$testDirectory/build/$timelineFileName.timeline_summary.json').readAsStringSync()); + final Map data = json.decode( + file('$testDirectory/build/$timelineFileName.timeline_summary.json').readAsStringSync(), + ) as Map; - if (data['frame_count'] < 5) { + if (data['frame_count'] as int < 5) { return TaskResult.failure( 'Timeline contains too few frames: ${data['frame_count']}. Possibly ' 'trace events are not being captured.', @@ -308,8 +312,8 @@ class WebCompileTest { final ProcessResult result = await Process.run('du', ['-k', output]); await Process.run('gzip',['-k', '9', output]); final ProcessResult resultGzip = await Process.run('du', ['-k', output + '.gz']); - metrics['${metric}_dart2js_size'] = _parseDu(result.stdout); - metrics['${metric}_dart2js_size_gzip'] = _parseDu(resultGzip.stdout); + metrics['${metric}_dart2js_size'] = _parseDu(result.stdout as String); + metrics['${metric}_dart2js_size_gzip'] = _parseDu(resultGzip.stdout as String); } static int _parseDu(String source) { @@ -636,9 +640,9 @@ class MemoryTest { assert(_startMemoryUsage != null); print('snapshotting memory usage...'); final Map endMemoryUsage = await device.getMemoryStats(package); - _startMemory.add(_startMemoryUsage['total_kb']); - _endMemory.add(endMemoryUsage['total_kb']); - _diffMemory.add(endMemoryUsage['total_kb'] - _startMemoryUsage['total_kb']); + _startMemory.add(_startMemoryUsage['total_kb'] as int); + _endMemory.add(endMemoryUsage['total_kb'] as int); + _diffMemory.add((endMemoryUsage['total_kb'] as int) - (_startMemoryUsage['total_kb'] as int)); } } diff --git a/dev/devicelab/lib/tasks/save_catalog_screenshots.dart b/dev/devicelab/lib/tasks/save_catalog_screenshots.dart index 424d4a3a48..062c0b49e7 100644 --- a/dev/devicelab/lib/tasks/save_catalog_screenshots.dart +++ b/dev/devicelab/lib/tasks/save_catalog_screenshots.dart @@ -43,7 +43,7 @@ class Upload { if (retryCount == 0) return const Duration(milliseconds: 1000); random ??= math.Random(); - return Duration(milliseconds: random.nextInt(1000) + math.pow(2, retryCount) * 1000); + return Duration(milliseconds: random.nextInt(1000) + (math.pow(2, retryCount) as int) * 1000); } Future save(HttpClient client, String name, List content) async { diff --git a/dev/devicelab/test/adb_test.dart b/dev/devicelab/test/adb_test.dart index 0f4a9e3d50..ddf02793f8 100644 --- a/dev/devicelab/test/adb_test.dart +++ b/dev/devicelab/test/adb_test.dart @@ -138,11 +138,10 @@ class CommandArgs { bool operator==(Object other) { if (other.runtimeType != CommandArgs) return false; - - final CommandArgs otherCmd = other; - return otherCmd.command == command && - const ListEquality().equals(otherCmd.arguments, arguments) && - const MapEquality().equals(otherCmd.environment, environment); + return other is CommandArgs + && other.command == command + && const ListEquality().equals(other.arguments, arguments) + && const MapEquality().equals(other.environment, environment); } @override diff --git a/dev/integration_tests/android_semantics_testing/lib/src/common.dart b/dev/integration_tests/android_semantics_testing/lib/src/common.dart index a4b983b83f..06fa05f052 100644 --- a/dev/integration_tests/android_semantics_testing/lib/src/common.dart +++ b/dev/integration_tests/android_semantics_testing/lib/src/common.dart @@ -52,19 +52,19 @@ class AndroidSemanticsNode { /// ] /// } factory AndroidSemanticsNode.deserialize(String value) { - return AndroidSemanticsNode._(json.decode(value)); + return AndroidSemanticsNode._(json.decode(value) as Map); } final Map _values; final List _children = []; - Map get _flags => _values['flags']; + Map get _flags => _values['flags'] as Map; /// The text value of the semantics node. /// /// This is produced by combining the value, label, and hint fields from /// the Flutter [SemanticsNode]. - String get text => _values['text']; + String get text => _values['text'] as String; /// The contentDescription of the semantics node. /// @@ -74,7 +74,7 @@ class AndroidSemanticsNode { /// /// This is produced by combining the value, label, and hint fields from /// the Flutter [SemanticsNode]. - String get contentDescription => _values['contentDescription']; + String get contentDescription => _values['contentDescription'] as String; /// The className of the semantics node. /// @@ -83,10 +83,10 @@ class AndroidSemanticsNode { /// /// If a more specific value isn't provided, it defaults to /// "android.view.View". - String get className => _values['className']; + String get className => _values['className'] as String; /// The identifier for this semantics node. - int get id => _values['id']; + int get id => _values['id'] as int; /// The children of this semantics node. List get children => _children; @@ -94,44 +94,44 @@ class AndroidSemanticsNode { /// Whether the node is currently in a checked state. /// /// Equivalent to [SemanticsFlag.isChecked]. - bool get isChecked => _flags['isChecked']; + bool get isChecked => _flags['isChecked'] as bool; /// Whether the node can be in a checked state. /// /// Equivalent to [SemanticsFlag.hasCheckedState] - bool get isCheckable => _flags['isCheckable']; + bool get isCheckable => _flags['isCheckable'] as bool; /// Whether the node is editable. /// /// This is usually only applied to text fields, which map /// to "android.widget.EditText". - bool get isEditable => _flags['isEditable']; + bool get isEditable => _flags['isEditable'] as bool; /// Whether the node is enabled. - bool get isEnabled => _flags['isEnabled']; + bool get isEnabled => _flags['isEnabled'] as bool; /// Whether the node is focusable. - bool get isFocusable => _flags['isFocusable']; + bool get isFocusable => _flags['isFocusable'] as bool; /// Whether the node is focused. - bool get isFocused => _flags['isFocused']; + bool get isFocused => _flags['isFocused'] as bool; /// Whether the node is considered a heading. - bool get isHeading => _flags['isHeading']; + bool get isHeading => _flags['isHeading'] as bool; /// Whether the node represents a password field. /// /// Equivalent to [SemanticsFlag.isObscured]. - bool get isPassword => _flags['isPassword']; + bool get isPassword => _flags['isPassword'] as bool; /// Whether the node is long clickable. /// /// Equivalent to having [SemanticsAction.longPress]. - bool get isLongClickable => _flags['isLongClickable']; + bool get isLongClickable => _flags['isLongClickable'] as bool; /// Gets a [Rect] which defines the position and size of the semantics node. Rect getRect() { - final Map rawRect = _values['rect']; + final Map rawRect = _values['rect'] as Map; final Map rect = rawRect.cast(); return Rect.fromLTRB( rect['left'].toDouble(), @@ -149,7 +149,7 @@ class AndroidSemanticsNode { /// Gets a list of [AndroidSemanticsActions] which are defined for the node. List getActions() => [ - for (int id in _values['actions']) AndroidSemanticsAction.deserialize(id), + for (int id in (_values['actions'] as List).cast()) AndroidSemanticsAction.deserialize(id), ]; @override @@ -189,11 +189,11 @@ class Rect { bool operator ==(Object other) { if (other.runtimeType != runtimeType) return false; - final Rect typedOther = other; - return typedOther.top == top && - typedOther.left == left && - typedOther.right == right && - typedOther.bottom == bottom; + return other is Rect + && other.top == top + && other.left == left + && other.right == right + && other.bottom == bottom; } @override @@ -221,8 +221,9 @@ class Size { bool operator ==(Object other) { if (other.runtimeType != runtimeType) return false; - final Size typedOther = other; - return typedOther.width == width && typedOther.height == height; + return other is Size + && other.width == width + && other.height == height; } @override diff --git a/dev/integration_tests/android_semantics_testing/lib/src/constants.dart b/dev/integration_tests/android_semantics_testing/lib/src/constants.dart index 5b9b756fc2..89ac499fef 100644 --- a/dev/integration_tests/android_semantics_testing/lib/src/constants.dart +++ b/dev/integration_tests/android_semantics_testing/lib/src/constants.dart @@ -196,8 +196,8 @@ class AndroidSemanticsAction { bool operator ==(Object other) { if (other.runtimeType != runtimeType) return false; - final AndroidSemanticsAction typedOther = other; - return id == typedOther.id; + return other is AndroidSemanticsAction + && other.id == id; } /// Creates a new [AndroidSemanticsAction] from an integer `value`. diff --git a/dev/integration_tests/android_semantics_testing/lib/src/matcher.dart b/dev/integration_tests/android_semantics_testing/lib/src/matcher.dart index 009efa7450..614b23d507 100644 --- a/dev/integration_tests/android_semantics_testing/lib/src/matcher.dart +++ b/dev/integration_tests/android_semantics_testing/lib/src/matcher.dart @@ -177,7 +177,7 @@ class _AndroidSemanticsMatcher extends Matcher { @override Description describeMismatch(Object item, Description mismatchDescription, Map matchState, bool verbose) { - return mismatchDescription.add(matchState['failure']); + return mismatchDescription.add(matchState['failure'] as String); } bool _failWithMessage(String value, Map matchState) { diff --git a/dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/test_driver/main_test.dart b/dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/test_driver/main_test.dart index c2832b4f1f..16d4ababab 100644 --- a/dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/test_driver/main_test.dart +++ b/dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/test_driver/main_test.dart @@ -47,8 +47,8 @@ Future _waitForSplashToDisappear(FlutterDriver driver) async { while (waitingForSplashToDisappear) { final String response = await driver.requestData('splash_test_log',); - final Map splashTestLog = jsonDecode(response); - final List events = splashTestLog['events']; + final Map splashTestLog = jsonDecode(response) as Map; + final List events = splashTestLog['events'] as List; if (events.length == 3) { expect( events[0], diff --git a/dev/integration_tests/android_views/lib/motion_event_diff.dart b/dev/integration_tests/android_views/lib/motion_event_diff.dart index b25d371617..f5f073fd48 100644 --- a/dev/integration_tests/android_views/lib/motion_event_diff.dart +++ b/dev/integration_tests/android_views/lib/motion_event_diff.dart @@ -40,12 +40,12 @@ String diffMotionEvents( void diffActions(StringBuffer diffBuffer, Map originalEvent, Map synthesizedEvent) { final int synthesizedActionMasked = - getActionMasked(synthesizedEvent['action']); - final int originalActionMasked = getActionMasked(originalEvent['action']); + getActionMasked(synthesizedEvent['action'] as int); + final int originalActionMasked = getActionMasked(originalEvent['action'] as int); final String synthesizedActionName = - getActionName(synthesizedActionMasked, synthesizedEvent['action']); + getActionName(synthesizedActionMasked, synthesizedEvent['action'] as int); final String originalActionName = - getActionName(originalActionMasked, originalEvent['action']); + getActionName(originalActionMasked, originalEvent['action'] as int); if (synthesizedActionMasked != originalActionMasked) diffBuffer.write( @@ -53,8 +53,8 @@ void diffActions(StringBuffer diffBuffer, Map originalEvent, if (kPointerActions.contains(originalActionMasked) && originalActionMasked == synthesizedActionMasked) { - final int originalPointer = getPointerIdx(originalEvent['action']); - final int synthesizedPointer = getPointerIdx(synthesizedEvent['action']); + final int originalPointer = getPointerIdx(originalEvent['action'] as int); + final int synthesizedPointer = getPointerIdx(synthesizedEvent['action'] as int); if (originalPointer != synthesizedPointer) diffBuffer.write( 'pointerIdx (expected: $originalPointer actual: $synthesizedPointer action: $originalActionName '); @@ -64,9 +64,9 @@ void diffActions(StringBuffer diffBuffer, Map originalEvent, void diffPointerProperties(StringBuffer diffBuffer, Map originalEvent, Map synthesizedEvent) { final List> expectedList = - originalEvent['pointerProperties'].cast>(); + (originalEvent['pointerProperties'] as List).cast>(); final List> actualList = - synthesizedEvent['pointerProperties'].cast>(); + (synthesizedEvent['pointerProperties'] as List).cast>(); if (expectedList.length != actualList.length) { diffBuffer.write( @@ -86,9 +86,9 @@ void diffPointerProperties(StringBuffer diffBuffer, void diffPointerCoordsList(StringBuffer diffBuffer, Map originalEvent, Map synthesizedEvent) { final List> expectedList = - originalEvent['pointerCoords'].cast>(); + (originalEvent['pointerCoords'] as List).cast>(); final List> actualList = - synthesizedEvent['pointerCoords'].cast>(); + (synthesizedEvent['pointerCoords'] as List).cast>(); if (expectedList.length != actualList.length) { diffBuffer.write( diff --git a/dev/integration_tests/android_views/lib/motion_events_page.dart b/dev/integration_tests/android_views/lib/motion_events_page.dart index a546177d38..48be7dea52 100644 --- a/dev/integration_tests/android_views/lib/motion_events_page.dart +++ b/dev/integration_tests/android_views/lib/motion_events_page.dart @@ -115,7 +115,7 @@ class MotionEventsBodyState extends State { const StandardMessageCodec codec = StandardMessageCodec(); try { final ByteData data = await rootBundle.load('packages/assets_for_android_views/assets/touchEvents'); - final List unTypedRecordedEvents = codec.decodeMessage(data); + final List unTypedRecordedEvents = codec.decodeMessage(data) as List; final List> recordedEvents = unTypedRecordedEvents .cast>() .map>((Map e) =>e.cast()) @@ -204,7 +204,7 @@ class MotionEventsBodyState extends State { Future onMethodChannelCall(MethodCall call) { switch (call.method) { case 'onTouch': - final Map map = call.arguments; + final Map map = call.arguments as Map; flutterViewEvents.insert(0, map.cast()); if (flutterViewEvents.length > kEventsBufferSize) flutterViewEvents.removeLast(); @@ -217,7 +217,7 @@ class MotionEventsBodyState extends State { Future onViewMethodChannelCall(MethodCall call) { switch (call.method) { case 'onTouch': - final Map map = call.arguments; + final Map map = call.arguments as Map; embeddedViewEvents.insert(0, map.cast()); if (embeddedViewEvents.length > kEventsBufferSize) embeddedViewEvents.removeLast(); @@ -248,7 +248,7 @@ class TouchEventDiff extends StatelessWidget { Color color; final String diff = diffMotionEvents(originalEvent, synthesizedEvent); String msg; - final int action = synthesizedEvent['action']; + final int action = synthesizedEvent['action'] as int; final String actionName = getActionName(getActionMasked(action), action); if (diff.isEmpty) { color = Colors.green; @@ -274,7 +274,7 @@ class TouchEventDiff extends StatelessWidget { void prettyPrintEvent(Map event) { final StringBuffer buffer = StringBuffer(); - final int action = event['action']; + final int action = event['action'] as int; final int maskedAction = getActionMasked(action); final String actionName = getActionName(maskedAction, action); @@ -283,7 +283,7 @@ class TouchEventDiff extends StatelessWidget { buffer.write('pointer: ${getPointerIdx(action)} '); } - final List> coords = event['pointerCoords'].cast>(); + final List> coords = (event['pointerCoords'] as List).cast>(); for (int i = 0; i < coords.length; i++) { buffer.write('p$i x: ${coords[i]['x']} y: ${coords[i]['y']}, pressure: ${coords[i]['pressure']} '); } diff --git a/dev/integration_tests/channels/lib/src/test_step.dart b/dev/integration_tests/channels/lib/src/test_step.dart index daaca73d23..4662d0338d 100644 --- a/dev/integration_tests/channels/lib/src/test_step.dart +++ b/dev/integration_tests/channels/lib/src/test_step.dart @@ -46,7 +46,7 @@ class TestStepResult { if (snapshot.hasData) { return snapshot.data; } else { - final TestStepResult result = snapshot.error; + final TestStepResult result = snapshot.error as TestStepResult; return result; } break; diff --git a/dev/integration_tests/codegen/lib/main.dart b/dev/integration_tests/codegen/lib/main.dart index bd69255fb5..a71a3e7567 100644 --- a/dev/integration_tests/codegen/lib/main.dart +++ b/dev/integration_tests/codegen/lib/main.dart @@ -45,6 +45,6 @@ class _ExampleWidgetState extends State { class GeneratedWidget extends StatelessWidget { @override Widget build(BuildContext context) { - return Text(generated.message); + return Text(generated.message as String); } } diff --git a/dev/integration_tests/ios_add2app/flutterapp/lib/marquee.dart b/dev/integration_tests/ios_add2app/flutterapp/lib/marquee.dart index ebd939308a..ad81d9c83b 100644 --- a/dev/integration_tests/ios_add2app/flutterapp/lib/marquee.dart +++ b/dev/integration_tests/ios_add2app/flutterapp/lib/marquee.dart @@ -12,7 +12,7 @@ class _MarqueeText extends AnimatedWidget { @override Widget build(BuildContext context) { - final Animation animation = listenable; + final Animation animation = listenable as Animation; return Container( margin: EdgeInsets.only(left: animation.value), child: const Text( diff --git a/dev/integration_tests/platform_interaction/lib/src/test_step.dart b/dev/integration_tests/platform_interaction/lib/src/test_step.dart index b39d9afec4..61b884904c 100644 --- a/dev/integration_tests/platform_interaction/lib/src/test_step.dart +++ b/dev/integration_tests/platform_interaction/lib/src/test_step.dart @@ -25,7 +25,7 @@ class TestStepResult { if (snapshot.hasData) { return snapshot.data; } else { - final TestStepResult result = snapshot.error; + final TestStepResult result = snapshot.error as TestStepResult; return result; } break; diff --git a/dev/manual_tests/lib/actions.dart b/dev/manual_tests/lib/actions.dart index 744e2d5160..16acf1ef12 100644 --- a/dev/manual_tests/lib/actions.dart +++ b/dev/manual_tests/lib/actions.dart @@ -166,7 +166,7 @@ class UndoIntent extends Intent { @override bool isEnabled(BuildContext context) { - final UndoableActionDispatcher manager = Actions.of(context, nullOk: true); + final UndoableActionDispatcher manager = Actions.of(context, nullOk: true) as UndoableActionDispatcher; return manager.canUndo; } } @@ -176,7 +176,7 @@ class RedoIntent extends Intent { @override bool isEnabled(BuildContext context) { - final UndoableActionDispatcher manager = Actions.of(context, nullOk: true); + final UndoableActionDispatcher manager = Actions.of(context, nullOk: true) as UndoableActionDispatcher; return manager.canRedo; } } @@ -189,7 +189,7 @@ final Action kUndoAction = CallbackAction( if (node?.context == null) { return; } - final UndoableActionDispatcher manager = Actions.of(node.context, nullOk: true); + final UndoableActionDispatcher manager = Actions.of(node.context, nullOk: true) as UndoableActionDispatcher; manager?.undo(); }, ); @@ -202,7 +202,7 @@ final Action kRedoAction = CallbackAction( if (node?.context == null) { return; } - final UndoableActionDispatcher manager = Actions.of(node.context, nullOk: true); + final UndoableActionDispatcher manager = Actions.of(node.context, nullOk: true) as UndoableActionDispatcher; manager?.redo(); }, ); diff --git a/dev/manual_tests/lib/card_collection.dart b/dev/manual_tests/lib/card_collection.dart index bda7364d75..c8288a0666 100644 --- a/dev/manual_tests/lib/card_collection.dart +++ b/dev/manual_tests/lib/card_collection.dart @@ -231,7 +231,7 @@ class CardCollectionState extends State { ); } - Widget _buildAppBar(BuildContext context) { + AppBar _buildAppBar(BuildContext context) { return AppBar( actions: [ Text(_dismissDirectionText(_dismissDirection)), diff --git a/dev/manual_tests/lib/material_arc.dart b/dev/manual_tests/lib/material_arc.dart index fb8e5b3672..7d2c83915a 100644 --- a/dev/manual_tests/lib/material_arc.dart +++ b/dev/manual_tests/lib/material_arc.dart @@ -139,7 +139,7 @@ class _PointDemoState extends State<_PointDemo> { if (_dragTarget != null) return _IgnoreDrag(); - final RenderBox box = _painterKey.currentContext.findRenderObject(); + final RenderBox box = _painterKey.currentContext.findRenderObject() as RenderBox; final double startOffset = (box.localToGlobal(_begin) - position).distanceSquared; final double endOffset = (box.localToGlobal(_end) - position).distanceSquared; setState(() { @@ -307,7 +307,7 @@ class _RectangleDemoState extends State<_RectangleDemo> { if (_dragTarget != null) return _IgnoreDrag(); - final RenderBox box = _painterKey.currentContext.findRenderObject(); + final RenderBox box = _painterKey.currentContext.findRenderObject() as RenderBox; final double startOffset = (box.localToGlobal(_begin.center) - position).distanceSquared; final double endOffset = (box.localToGlobal(_end.center) - position).distanceSquared; setState(() { diff --git a/dev/manual_tests/lib/overlay_geometry.dart b/dev/manual_tests/lib/overlay_geometry.dart index eb06c2b5ac..54f68c7667 100644 --- a/dev/manual_tests/lib/overlay_geometry.dart +++ b/dev/manual_tests/lib/overlay_geometry.dart @@ -171,7 +171,7 @@ class OverlayGeometryAppState extends State { void handleTapUp(GlobalKey target, Offset globalPosition) { setState(() { markers[MarkerType.touch] = globalPosition; - final RenderBox box = target.currentContext.findRenderObject(); + final RenderBox box = target.currentContext.findRenderObject() as RenderBox; markers[MarkerType.topLeft] = box.localToGlobal(const Offset(0.0, 0.0)); final Size size = box.size; markers[MarkerType.bottomRight] = box.localToGlobal(Offset(size.width, size.height)); diff --git a/dev/manual_tests/lib/page_view.dart b/dev/manual_tests/lib/page_view.dart index ab0dc3acf9..94e4187639 100644 --- a/dev/manual_tests/lib/page_view.dart +++ b/dev/manual_tests/lib/page_view.dart @@ -111,7 +111,7 @@ class PageViewAppState extends State { ); } - Widget _buildAppBar() { + AppBar _buildAppBar() { return AppBar( title: const Text('PageView'), actions: [ diff --git a/dev/manual_tests/lib/text.dart b/dev/manual_tests/lib/text.dart index 557f133d19..37b421c6d0 100644 --- a/dev/manual_tests/lib/text.dart +++ b/dev/manual_tests/lib/text.dart @@ -156,7 +156,7 @@ class _FuzzerState extends State with SingleTickerProviderStateMixin { return TextSpan( text: _fiddleWithText(node.text), style: _fiddleWithStyle(node.style), - children: _fiddleWithChildren(node.children?.map((InlineSpan child) => _fiddleWith(child))?.toList() ?? []), + children: _fiddleWithChildren(node.children?.map((InlineSpan child) => _fiddleWith(child as TextSpan))?.toList() ?? []), ); } @@ -343,7 +343,7 @@ class _FuzzerState extends State with SingleTickerProviderStateMixin { if (node.children == null || node.children.isEmpty) return 0; int result = 0; - for (TextSpan child in node.children) + for (TextSpan child in node.children.cast()) result = math.max(result, depthOf(child)); return result; } diff --git a/dev/manual_tests/test/mock_image_http.dart b/dev/manual_tests/test/mock_image_http.dart index 4f9cd77d81..0ff525fb94 100644 --- a/dev/manual_tests/test/mock_image_http.dart +++ b/dev/manual_tests/test/mock_image_http.dart @@ -21,10 +21,10 @@ MockHttpClient createMockImageHttpClient(SecurityContext _) { when(response.contentLength).thenReturn(kTransparentImage.length); when(response.statusCode).thenReturn(HttpStatus.ok); when(response.listen(any)).thenAnswer((Invocation invocation) { - final void Function(List) onData = invocation.positionalArguments[0]; - final void Function() onDone = invocation.namedArguments[#onDone]; - final void Function(Object, [StackTrace]) onError = invocation.namedArguments[#onError]; - final bool cancelOnError = invocation.namedArguments[#cancelOnError]; + final void Function(List) onData = invocation.positionalArguments[0] as void Function(List); + final void Function() onDone = invocation.namedArguments[#onDone] as void Function(); + final void Function(Object, [StackTrace]) onError = invocation.namedArguments[#onError] as void Function(Object, [StackTrace]); + final bool cancelOnError = invocation.namedArguments[#cancelOnError] as bool; return Stream>.fromIterable(>[kTransparentImage]).listen(onData, onDone: onDone, onError: onError, cancelOnError: cancelOnError); }); return client; diff --git a/dev/snippets/lib/main.dart b/dev/snippets/lib/main.dart index 3141078a6f..e9f9d8adc6 100644 --- a/dev/snippets/lib/main.dart +++ b/dev/snippets/lib/main.dart @@ -99,7 +99,7 @@ void main(List argList) { final ArgResults args = parser.parse(argList); - if (args[_kHelpOption]) { + if (args[_kHelpOption] as bool) { stderr.writeln(parser.usage); exit(0); } @@ -119,28 +119,30 @@ void main(List argList) { 'line, or in the INPUT environment variable.'); } - final File input = File(args['input']); + final File input = File(args['input'] as String); if (!input.existsSync()) { errorExit('The input file ${input.path} does not exist.'); } String template; if (snippetType == SnippetType.application) { - if (args[_kTemplateOption] == null || args[_kTemplateOption].isEmpty) { + final String templateArg = args[_kTemplateOption] as String; + if (templateArg == null || templateArg.isEmpty) { stderr.writeln(parser.usage); errorExit('The --$_kTemplateOption option must be specified on the command ' 'line for application snippets.'); } - template = args[_kTemplateOption].toString().replaceAll(RegExp(r'.tmpl$'), ''); + template = templateArg.replaceAll(RegExp(r'.tmpl$'), ''); } - final String packageName = args[_kPackageOption] != null && args[_kPackageOption].isNotEmpty ? args[_kPackageOption] : null; - final String libraryName = args[_kLibraryOption] != null && args[_kLibraryOption].isNotEmpty ? args[_kLibraryOption] : null; - final String elementName = args[_kElementOption] != null && args[_kElementOption].isNotEmpty ? args[_kElementOption] : null; - final String serial = args[_kSerialOption] != null && args[_kSerialOption].isNotEmpty ? args[_kSerialOption] : null; + String emptyToNull(String value) => value?.isEmpty ?? true ? null : value; + final String packageName = emptyToNull(args[_kPackageOption] as String); + final String libraryName = emptyToNull(args[_kLibraryOption] as String); + final String elementName = emptyToNull(args[_kElementOption] as String); + final String serial = emptyToNull(args[_kSerialOption] as String); final List id = []; if (args[_kOutputOption] != null) { - id.add(path.basename(path.basenameWithoutExtension(args[_kOutputOption]))); + id.add(path.basename(path.basenameWithoutExtension(args[_kOutputOption] as String))); } else { if (packageName != null && packageName != 'flutter') { id.add(packageName); @@ -165,9 +167,9 @@ void main(List argList) { stdout.write(generator.generate( input, snippetType, - showDartPad: args[_kShowDartPad], + showDartPad: args[_kShowDartPad] as bool, template: template, - output: args[_kOutputOption] != null ? File(args[_kOutputOption]) : null, + output: args[_kOutputOption] != null ? File(args[_kOutputOption] as String) : null, metadata: { 'sourcePath': environment['SOURCE_PATH'], 'sourceLine': environment['SOURCE_LINE'] != null diff --git a/dev/snippets/lib/snippets.dart b/dev/snippets/lib/snippets.dart index 289d719b4d..3e955b08fb 100644 --- a/dev/snippets/lib/snippets.dart +++ b/dev/snippets/lib/snippets.dart @@ -129,8 +129,8 @@ class SnippetGenerator { 'code': htmlEscape.convert(result.join('\n')), 'language': language ?? 'dart', 'serial': '', - 'id': metadata['id'], - 'element': metadata['element'] ?? '', + 'id': metadata['id'] as String, + 'element': metadata['element'] as String ?? '', 'app': '', }; if (type == SnippetType.application) { @@ -253,7 +253,7 @@ class SnippetGenerator { } snippetData.add(_ComponentTuple('app', app.split('\n'))); - final File outputFile = output ?? getOutputFile(metadata['id']); + final File outputFile = output ?? getOutputFile(metadata['id'] as String); stderr.writeln('Writing to ${outputFile.absolute.path}'); outputFile.writeAsStringSync(app); diff --git a/dev/snippets/test/snippets_test.dart b/dev/snippets/test/snippets_test.dart index e8611f7a71..3d93f024c1 100644 --- a/dev/snippets/test/snippets_test.dart +++ b/dev/snippets/test/snippets_test.dart @@ -191,7 +191,7 @@ void main() { metadata: {'sourcePath': 'some/path.dart', 'id': 'id'}, ); expect(expectedMetadataFile.existsSync(), isTrue); - final Map json = jsonDecode(expectedMetadataFile.readAsStringSync()); + final Map json = jsonDecode(expectedMetadataFile.readAsStringSync()) as Map; expect(json['id'], equals('id')); expect(json['file'], equals('snippet_out.dart')); expect(json['description'], equals('A description of the snippet.\n\nOn several lines.')); diff --git a/dev/tools/dartdoc.dart b/dev/tools/dartdoc.dart index a035f5d5dc..103697e248 100644 --- a/dev/tools/dartdoc.dart +++ b/dev/tools/dartdoc.dart @@ -31,7 +31,7 @@ const String kSnippetsRoot = 'dev/snippets'; Future main(List arguments) async { final ArgParser argParser = _createArgsParser(); final ArgResults args = argParser.parse(arguments); - if (args['help']) { + if (args['help'] as bool) { print ('Usage:'); print (argParser.usage); exit(0); @@ -111,7 +111,7 @@ Future main(List arguments) async { final List dartdocBaseArgs = [ 'global', 'run', - if (args['checked']) '-c', + if (args['checked'] as bool) '-c', 'dartdoc', ]; @@ -130,8 +130,8 @@ Future main(List arguments) async { final List dartdocArgs = [ ...dartdocBaseArgs, '--allow-tools', - if (args['json']) '--json', - if (args['validate-links']) '--validate-links' else '--no-validate-links', + if (args['json'] as bool) '--json', + if (args['validate-links'] as bool) '--validate-links' else '--no-validate-links', '--link-to-source-excludes', '../../bin/cache', '--link-to-source-root', '../..', '--link-to-source-uri-template', 'https://github.com/flutter/flutter/blob/master/%f%#L%l%', @@ -207,14 +207,14 @@ Future main(List arguments) async { workingDirectory: kDocsRoot, environment: pubEnvironment, )); - printStream(process.stdout, prefix: args['json'] ? '' : 'dartdoc:stdout: ', - filter: args['verbose'] ? const [] : [ + printStream(process.stdout, prefix: args['json'] as bool ? '' : 'dartdoc:stdout: ', + filter: args['verbose'] as bool ? const [] : [ RegExp(r'^generating docs for library '), // unnecessary verbosity RegExp(r'^pars'), // unnecessary verbosity ], ); - printStream(process.stderr, prefix: args['json'] ? '' : 'dartdoc:stderr: ', - filter: args['verbose'] ? const [] : [ + printStream(process.stderr, prefix: args['json'] as bool ? '' : 'dartdoc:stderr: ', + filter: args['verbose'] as bool ? const [] : [ RegExp(r'^ warning: .+: \(.+/\.pub-cache/hosted/pub.dartlang.org/.+\)'), // packages outside our control ], ); @@ -252,7 +252,7 @@ String getBranchName() { if (gitResult.exitCode != 0) throw 'git status exit with non-zero exit code: ${gitResult.exitCode}'; final Match gitBranchMatch = gitBranchRegexp.firstMatch( - gitResult.stdout.trim().split('\n').first); + (gitResult.stdout as String).trim().split('\n').first); return gitBranchMatch == null ? '' : gitBranchMatch.group(1).split('...').first; } @@ -262,7 +262,7 @@ String gitRevision() { final ProcessResult gitResult = Process.runSync('git', ['rev-parse', 'HEAD']); if (gitResult.exitCode != 0) throw 'git rev-parse exit with non-zero exit code: ${gitResult.exitCode}'; - final String gitRevision = gitResult.stdout.trim(); + final String gitRevision = (gitResult.stdout as String).trim(); return gitRevision.length > kGitRevisionLength ? gitRevision.substring(0, kGitRevisionLength) : gitRevision; } @@ -454,7 +454,7 @@ List findPackageNames() { } /// Finds all packages in the Flutter SDK -List findPackages() { +List findPackages() { return Directory('packages') .listSync() .where((FileSystemEntity entity) { diff --git a/dev/tools/gen_keycodes/bin/gen_keycodes.dart b/dev/tools/gen_keycodes/bin/gen_keycodes.dart index 715d5cd519..511a09f152 100644 --- a/dev/tools/gen_keycodes/bin/gen_keycodes.dart +++ b/dev/tools/gen_keycodes/bin/gen_keycodes.dart @@ -132,61 +132,61 @@ Future main(List rawArguments) async { final ArgResults parsedArguments = argParser.parse(rawArguments); - if (parsedArguments['help']) { + if (parsedArguments['help'] as bool) { print(argParser.usage); exit(0); } KeyData data; - if (parsedArguments['collect']) { + if (parsedArguments['collect'] as bool) { String hidCodes; if (parsedArguments['chromium-hid-codes'] == null) { hidCodes = await getChromiumConversions(); } else { - hidCodes = File(parsedArguments['chromium-hid-codes']).readAsStringSync(); + hidCodes = File(parsedArguments['chromium-hid-codes'] as String).readAsStringSync(); } - final String supplementalHidCodes = File(parsedArguments['supplemental-hid-codes']).readAsStringSync(); + final String supplementalHidCodes = File(parsedArguments['supplemental-hid-codes'] as String).readAsStringSync(); hidCodes = '$hidCodes\n$supplementalHidCodes'; String androidKeyCodes; if (parsedArguments['android-keycodes'] == null) { androidKeyCodes = await getAndroidKeyCodes(); } else { - androidKeyCodes = File(parsedArguments['android-keycodes']).readAsStringSync(); + androidKeyCodes = File(parsedArguments['android-keycodes'] as String).readAsStringSync(); } String androidScanCodes; if (parsedArguments['android-scancodes'] == null) { androidScanCodes = await getAndroidScanCodes(); } else { - androidScanCodes = File(parsedArguments['android-scancodes']).readAsStringSync(); + androidScanCodes = File(parsedArguments['android-scancodes'] as String).readAsStringSync(); } String glfwKeyCodes; if (parsedArguments['glfw-keycodes'] == null) { glfwKeyCodes = await getGlfwKeyCodes(); } else { - glfwKeyCodes = File(parsedArguments['glfw-keycodes']).readAsStringSync(); + glfwKeyCodes = File(parsedArguments['glfw-keycodes'] as String).readAsStringSync(); } - final String glfwToDomKey = File(parsedArguments['glfw-domkey']).readAsStringSync(); - final String androidToDomKey = File(parsedArguments['android-domkey']).readAsStringSync(); + final String glfwToDomKey = File(parsedArguments['glfw-domkey'] as String).readAsStringSync(); + final String androidToDomKey = File(parsedArguments['android-domkey'] as String).readAsStringSync(); data = KeyData(hidCodes, androidScanCodes, androidKeyCodes, androidToDomKey, glfwKeyCodes, glfwToDomKey); const JsonEncoder encoder = JsonEncoder.withIndent(' '); - File(parsedArguments['data']).writeAsStringSync(encoder.convert(data.toJson())); + File(parsedArguments['data'] as String).writeAsStringSync(encoder.convert(data.toJson())); } else { - data = KeyData.fromJson(json.decode(await File(parsedArguments['data']).readAsString())); + data = KeyData.fromJson(json.decode(await File(parsedArguments['data'] as String).readAsString()) as Map); } - final File codeFile = File(parsedArguments['code']); + final File codeFile = File(parsedArguments['code'] as String); if (!codeFile.existsSync()) { codeFile.createSync(recursive: true); } - final File mapsFile = File(parsedArguments['maps']); + final File mapsFile = File(parsedArguments['maps'] as String); if (!mapsFile.existsSync()) { mapsFile.createSync(recursive: true); } diff --git a/dev/tools/gen_keycodes/lib/code_gen.dart b/dev/tools/gen_keycodes/lib/code_gen.dart index 555f0d3226..8d7d2d25c4 100644 --- a/dev/tools/gen_keycodes/lib/code_gen.dart +++ b/dev/tools/gen_keycodes/lib/code_gen.dart @@ -87,7 +87,7 @@ $otherComments static const LogicalKeyboardKey $constantName = LogicalKeyboardK // plane. final Key entry = keyData.data.firstWhere((Key item) => item.name == Key.synonyms[name][0]); final Set unionNames = Key.synonyms[name].map((dynamic name) { - return upperCamelToLowerCamel(name); + return upperCamelToLowerCamel(name as String); }).toSet(); printKey(Key.synonymPlane | entry.flutterId, entry.keyLabel, name, Key.getCommentName(name), otherComments: wrapString('This key represents the union of the keys ' @@ -100,7 +100,7 @@ $otherComments static const LogicalKeyboardKey $constantName = LogicalKeyboardK String get logicalSynonyms { final StringBuffer synonyms = StringBuffer(); for (String name in Key.synonyms.keys) { - for (String synonym in Key.synonyms[name]) { + for (String synonym in Key.synonyms[name].cast()) { final String keyName = upperCamelToLowerCamel(synonym); synonyms.writeln(' $keyName: $name,'); } diff --git a/dev/tools/gen_keycodes/lib/key_data.dart b/dev/tools/gen_keycodes/lib/key_data.dart index 10308fc88d..9c755a081b 100644 --- a/dev/tools/gen_keycodes/lib/key_data.dart +++ b/dev/tools/gen_keycodes/lib/key_data.dart @@ -38,12 +38,12 @@ class KeyData { _nameToAndroidKeyCode = _readAndroidKeyCodes(androidKeyCodeHeader); _nameToGlfwKeyCode = _readGlfwKeyCodes(glfwKeyCodeHeader); // Cast Android dom map - final Map> dynamicAndroidNames = json.decode(androidNameMap).cast>(); + final Map> dynamicAndroidNames = (json.decode(androidNameMap) as Map>).cast>(); _nameToAndroidName = dynamicAndroidNames.map>((String key, List value) { return MapEntry>(key, value.cast()); }); // Cast GLFW dom map - final Map> dynamicGlfwNames = json.decode(glfwNameMap).cast>(); + final Map> dynamicGlfwNames = (json.decode(glfwNameMap) as Map>).cast>(); _nameToGlfwName = dynamicGlfwNames.map>((String key, List value) { return MapEntry>(key, value.cast()); }); @@ -53,7 +53,7 @@ class KeyData { /// Parses the given JSON data and populates the data structure from it. KeyData.fromJson(Map contentMap) { data = [ - for (String key in contentMap.keys) Key.fromJsonMapEntry(key, contentMap[key]), + for (String key in contentMap.keys) Key.fromJsonMapEntry(key, contentMap[key] as Map>), ]; } @@ -200,9 +200,9 @@ class KeyData { replaced.forEach((String key, dynamic value) { // Some definition values point to other definitions (e.g #define GLFW_KEY_LAST GLFW_KEY_MENU). if (value is String) { - result[key] = replaced[value]; + result[key] = replaced[value] as int; } else { - result[key] = value; + result[key] = value as int; } }); return result; @@ -285,18 +285,18 @@ class Key { factory Key.fromJsonMapEntry(String name, Map map) { return Key( enumName: name, - name: map['names']['domkey'], - chromiumName: map['names']['chromium'], - usbHidCode: map['scanCodes']['usb'], - androidKeyNames: map['names']['android']?.cast(), - androidScanCodes: map['scanCodes']['android']?.cast(), - androidKeyCodes: map['keyCodes']['android']?.cast(), - linuxScanCode: map['scanCodes']['linux'], - xKbScanCode: map['scanCodes']['xkb'], - windowsScanCode: map['scanCodes']['windows'], - macOsScanCode: map['scanCodes']['macos'], - glfwKeyNames: map['names']['glfw']?.cast(), - glfwKeyCodes: map['keyCodes']['glfw']?.cast(), + name: map['names']['domkey'] as String, + chromiumName: map['names']['chromium'] as String, + usbHidCode: map['scanCodes']['usb'] as int, + androidKeyNames: (map['names']['android'] as List)?.cast(), + androidScanCodes: (map['scanCodes']['android'] as List)?.cast(), + androidKeyCodes: (map['keyCodes']['android'] as List)?.cast(), + linuxScanCode: map['scanCodes']['linux'] as int, + xKbScanCode: map['scanCodes']['xkb'] as int, + windowsScanCode: map['scanCodes']['windows'] as int, + macOsScanCode: map['scanCodes']['macos'] as int, + glfwKeyNames: (map['names']['glfw'] as List)?.cast(), + glfwKeyCodes: (map['keyCodes']['glfw'] as List)?.cast(), ); } @@ -427,7 +427,7 @@ class Key { static Map get printable { if (_printable == null) { final String printableKeys = File(path.join(flutterRoot.path, 'dev', 'tools', 'gen_keycodes', 'data', 'printable.json',)).readAsStringSync(); - final Map printable = json.decode(printableKeys); + final Map printable = json.decode(printableKeys) as Map; _printable = printable.cast(); } return _printable; @@ -442,7 +442,7 @@ class Key { static Map> get synonyms { if (_synonym == null) { final String synonymKeys = File(path.join(flutterRoot.path, 'dev', 'tools', 'gen_keycodes', 'data', 'synonyms.json',)).readAsStringSync(); - final Map synonym = json.decode(synonymKeys); + final Map synonym = json.decode(synonymKeys) as Map; _synonym = synonym.cast>(); } return _synonym; diff --git a/dev/tools/java_and_objc_doc.dart b/dev/tools/java_and_objc_doc.dart index ce0580137f..7f41dffeee 100644 --- a/dev/tools/java_and_objc_doc.dart +++ b/dev/tools/java_and_objc_doc.dart @@ -60,7 +60,7 @@ Future generateDocs(String url, String docName, String checkFile) async { if (!af.name.endsWith('/')) { final File file = File('${output.path}/${af.name}'); file.createSync(recursive: true); - file.writeAsBytesSync(af.content); + file.writeAsBytesSync(af.content as List); } } diff --git a/dev/tools/lib/roll_dev.dart b/dev/tools/lib/roll_dev.dart index b51558a4f6..1eae90e1ae 100644 --- a/dev/tools/lib/roll_dev.dart +++ b/dev/tools/lib/roll_dev.dart @@ -66,12 +66,12 @@ void main(List args) { exit(1); } - final String level = argResults[kIncrement]; - final String commit = argResults[kCommit]; - final String origin = argResults[kOrigin]; - final bool justPrint = argResults[kJustPrint]; - final bool autoApprove = argResults[kYes]; - final bool help = argResults[kHelp]; + final String level = argResults[kIncrement] as String; + final String commit = argResults[kCommit] as String; + final String origin = argResults[kOrigin] as String; + final bool justPrint = argResults[kJustPrint] as bool; + final bool autoApprove = argResults[kYes] as bool; + final bool help = argResults[kHelp] as bool; if (help || level == null) { print('roll_dev.dart --increment=level --commit=hash • update the version tags and roll a new dev build.\n'); @@ -174,8 +174,8 @@ Match parseFullTag(String version) { String getGitOutput(String command, String explanation) { final ProcessResult result = _runGit(command); - if (result.stderr.isEmpty && result.exitCode == 0) - return result.stdout.trim(); + if ((result.stderr as String).isEmpty && result.exitCode == 0) + return (result.stdout as String).trim(); _reportGitFailureAndExit(result, explanation); return null; // for the analyzer's sake } @@ -196,9 +196,9 @@ void _reportGitFailureAndExit(ProcessResult result, String explanation) { } else { print('Failed to $explanation.'); } - if (result.stdout.isNotEmpty) + if ((result.stdout as String).isNotEmpty) print('stdout from git:\n${result.stdout}\n'); - if (result.stderr.isNotEmpty) + if ((result.stderr as String).isNotEmpty) print('stderr from git:\n${result.stderr}\n'); exit(1); } diff --git a/dev/tools/localization/encode_kn_arb_files.dart b/dev/tools/localization/encode_kn_arb_files.dart index 1754ee3a8a..ab648f0b56 100644 --- a/dev/tools/localization/encode_kn_arb_files.dart +++ b/dev/tools/localization/encode_kn_arb_files.dart @@ -32,7 +32,7 @@ import 'localizations_utils.dart'; Map loadBundle(File file) { if (!FileSystemEntity.isFileSync(file.path)) exitWithError('Unable to find input file: ${file.path}'); - return json.decode(file.readAsStringSync()); + return json.decode(file.readAsStringSync()) as Map; } void encodeBundleTranslations(Map bundle) { @@ -41,7 +41,7 @@ void encodeBundleTranslations(Map bundle) { // to encode them. if (key.startsWith('@')) continue; - final String translation = bundle[key]; + final String translation = bundle[key] as String; // Rewrite the string as a series of unicode characters in JSON format. // Like "\u0012\u0123\u1234". bundle[key] = translation.runes.map((int code) { diff --git a/dev/tools/localization/gen_date_localizations.dart b/dev/tools/localization/gen_date_localizations.dart index 62781dc34c..2a52fe79f8 100644 --- a/dev/tools/localization/gen_date_localizations.dart +++ b/dev/tools/localization/gen_date_localizations.dart @@ -108,7 +108,7 @@ Future main(List rawArgs) async { buffer.writeln('const Map> datePatterns = > {'); patternFiles.forEach((String locale, File data) { if (_supportedLocales().contains(locale)) { - final Map patterns = json.decode(data.readAsStringSync()); + final Map patterns = json.decode(data.readAsStringSync()) as Map; buffer.writeln("'$locale': {"); patterns.forEach((String key, dynamic value) { assert(value is String); @@ -177,12 +177,13 @@ Set _supportedLocales() { Map _listIntlData(Directory directory) { final Map localeFiles = {}; - for (FileSystemEntity entity in directory.listSync()) { - final String filePath = entity.path; - if (FileSystemEntity.isFileSync(filePath) && filePath.endsWith('.json')) { - final String locale = path.basenameWithoutExtension(filePath); - localeFiles[locale] = entity; - } + final Iterable files = directory + .listSync() + .whereType() + .where((File file) => file.path.endsWith('.json')); + for (File file in files) { + final String locale = path.basenameWithoutExtension(file.path); + localeFiles[locale] = file; } final List locales = localeFiles.keys.toList(growable: false); diff --git a/dev/tools/localization/gen_l10n.dart b/dev/tools/localization/gen_l10n.dart index 3bdad947d9..0d954cddf5 100644 --- a/dev/tools/localization/gen_l10n.dart +++ b/dev/tools/localization/gen_l10n.dart @@ -154,9 +154,9 @@ int sortFilesByPath (FileSystemEntity a, FileSystemEntity b) { } List genMethodParameters(Map bundle, String key, String type) { - final Map attributesMap = bundle['@$key']; + final Map attributesMap = bundle['@$key'] as Map; if (attributesMap != null && attributesMap.containsKey('placeholders')) { - final Map placeholders = attributesMap['placeholders']; + final Map placeholders = attributesMap['placeholders'] as Map; return placeholders.keys.map((String parameter) => '$type $parameter').toList(); } return []; @@ -164,14 +164,14 @@ List genMethodParameters(Map bundle, String key, String List genIntlMethodArgs(Map bundle, String key) { final List attributes = ['name: \'$key\'']; - final Map attributesMap = bundle['@$key']; + final Map attributesMap = bundle['@$key'] as Map; if (attributesMap != null) { if (attributesMap.containsKey('description')) { - final String description = attributesMap['description']; + final String description = attributesMap['description'] as String; attributes.add('desc: ${generateString(description)}'); } if (attributesMap.containsKey('placeholders')) { - final Map placeholders = attributesMap['placeholders']; + final Map placeholders = attributesMap['placeholders'] as Map; if (placeholders.isNotEmpty) { final String args = placeholders.keys.join(', '); attributes.add('args: [$args]'); @@ -183,15 +183,15 @@ List genIntlMethodArgs(Map bundle, String key) { String genSimpleMethod(Map bundle, String key) { String genSimpleMethodMessage(Map bundle, String key) { - String message = bundle[key]; - final Map attributesMap = bundle['@$key']; - final Map placeholders = attributesMap['placeholders']; + String message = bundle[key] as String; + final Map attributesMap = bundle['@$key'] as Map; + final Map placeholders = attributesMap['placeholders'] as Map; for (String placeholder in placeholders.keys) message = message.replaceAll('{$placeholder}', '\$$placeholder'); return generateString(message); } - final Map attributesMap = bundle['@$key']; + final Map attributesMap = bundle['@$key'] as Map; if (attributesMap == null) exitWithError( 'Resource attribute "@$key" was not found. Please ensure that each ' @@ -208,18 +208,18 @@ String genSimpleMethod(Map bundle, String key) { return getterMethodTemplate .replaceAll('@methodName', key) - .replaceAll('@message', '${generateString(bundle[key])}') + .replaceAll('@message', '${generateString(bundle[key] as String)}') .replaceAll('@intlMethodArgs', genIntlMethodArgs(bundle, key).join(',\n ')); } String genPluralMethod(Map bundle, String key) { - final Map attributesMap = bundle['@$key']; + final Map attributesMap = bundle['@$key'] as Map; assert(attributesMap != null && attributesMap.containsKey('placeholders')); - final Iterable placeholders = attributesMap['placeholders'].keys; + final Iterable placeholders = attributesMap['placeholders'].keys as Iterable; // To make it easier to parse the plurals message, temporarily replace each // "{placeholder}" parameter with "#placeholder#". - String message = bundle[key]; + String message = bundle[key] as String; for (String placeholder in placeholders) message = message.replaceAll('{$placeholder}', '#$placeholder#'); @@ -354,13 +354,13 @@ Future main(List arguments) async { exit(0); } - final String arbPathString = results['arb-dir']; - final String outputFileString = results['output-localization-file']; + final String arbPathString = results['arb-dir'] as String; + final String outputFileString = results['output-localization-file'] as String; final Directory l10nDirectory = Directory(arbPathString); - final File templateArbFile = File(path.join(l10nDirectory.path, results['template-arb-file'])); + final File templateArbFile = File(path.join(l10nDirectory.path, results['template-arb-file'] as String)); final File outputFile = File(path.join(l10nDirectory.path, outputFileString)); - final String stringsClassName = results['output-class']; + final String stringsClassName = results['output-class'] as String; if (!l10nDirectory.existsSync()) exitWithError( @@ -395,8 +395,8 @@ Future main(List arguments) async { final RegExp arbFilenameRE = RegExp(r'(\w+)\.arb$'); if (arbFilenameRE.hasMatch(entityPath)) { final File arbFile = File(entityPath); - final Map arbContents = json.decode(arbFile.readAsStringSync()); - String localeString = arbContents['@@locale']; + final Map arbContents = json.decode(arbFile.readAsStringSync()) as Map; + String localeString = arbContents['@@locale'] as String; if (localeString == null) { final RegExp arbFilenameLocaleRE = RegExp(r'^[^_]*_(\w+)\.arb$'); @@ -430,7 +430,7 @@ Future main(List arguments) async { Map bundle; try { - bundle = json.decode(templateArbFile.readAsStringSync()); + bundle = json.decode(templateArbFile.readAsStringSync()) as Map; } on FileSystemException catch (e) { exitWithError('Unable to read input arb file: $e'); } on FormatException catch (e) { @@ -447,7 +447,7 @@ Future main(List arguments) async { 'Invalid key format: $key \n It has to be in camel case, cannot start ' 'with a number, and cannot contain non-alphanumeric characters.' ); - if (pluralValueRE.hasMatch(bundle[key])) + if (pluralValueRE.hasMatch(bundle[key] as String)) classMethods.add(genPluralMethod(bundle, key)); else classMethods.add(genSimpleMethod(bundle, key)); diff --git a/dev/tools/localization/gen_localizations.dart b/dev/tools/localization/gen_localizations.dart index dac73a147b..b10043f69d 100644 --- a/dev/tools/localization/gen_localizations.dart +++ b/dev/tools/localization/gen_localizations.dart @@ -136,7 +136,7 @@ String generateArbBasedLocalizationSubclasses({ final Map languageResources = localeToResources[languageLocale]; for (String key in allKeys) { - final Map attributes = localeToResourceAttributes[canonicalLocale][key]; + final Map attributes = localeToResourceAttributes[canonicalLocale][key] as Map; output.writeln(generateGetter(key, languageResources[key], attributes, languageLocale)); } output.writeln('}'); @@ -158,7 +158,7 @@ String generateArbBasedLocalizationSubclasses({ for (String key in scriptResources.keys.toList()..sort()) { if (languageResources[key] == scriptResources[key]) continue; - final Map attributes = localeToResourceAttributes[canonicalLocale][key]; + final Map attributes = localeToResourceAttributes[canonicalLocale][key] as Map; output.writeln(generateGetter(key, scriptResources[key], attributes, languageLocale)); } output.writeln('}'); @@ -183,7 +183,7 @@ String generateArbBasedLocalizationSubclasses({ // When script fallback contains the key, we compare to it instead of language fallback. if (scriptResources.containsKey(key) ? scriptResources[key] == localeResources[key] : languageResources[key] == localeResources[key]) continue; - final Map attributes = localeToResourceAttributes[canonicalLocale][key]; + final Map attributes = localeToResourceAttributes[canonicalLocale][key] as Map; output.writeln(generateGetter(key, localeResources[key], attributes, languageLocale)); } output.writeln('}'); @@ -207,7 +207,7 @@ String generateArbBasedLocalizationSubclasses({ for (String key in localeResources.keys) { if (languageResources[key] == localeResources[key]) continue; - final Map attributes = localeToResourceAttributes[canonicalLocale][key]; + final Map attributes = localeToResourceAttributes[canonicalLocale][key] as Map; output.writeln(generateGetter(key, localeResources[key], attributes, languageLocale)); } output.writeln('}'); @@ -380,7 +380,7 @@ $factoryDeclaration /// Used by [generateGetter] below. String generateType(Map attributes) { if (attributes != null) { - switch (attributes['x-flutter-type']) { + switch (attributes['x-flutter-type'] as String) { case 'icuShortTimePattern': return 'TimeOfDayFormat'; case 'scriptCategory': @@ -401,7 +401,7 @@ String generateKey(String key, Map attributes) { if (attributes != null) { if (attributes.containsKey('parameters')) return '${key}Raw'; - switch (attributes['x-flutter-type']) { + switch (attributes['x-flutter-type'] as String) { case 'icuShortTimePattern': return '${key}Raw'; } @@ -443,7 +443,7 @@ String generateValue(String value, Map attributes, LocaleInfo l return null; // cupertino_en.arb doesn't use x-flutter-type. if (attributes != null) { - switch (attributes['x-flutter-type']) { + switch (attributes['x-flutter-type'] as String) { case 'icuShortTimePattern': if (!_icuTimeOfDayToEnum.containsKey(value)) { throw Exception( diff --git a/dev/tools/localization/localizations_utils.dart b/dev/tools/localization/localizations_utils.dart index 7312ebd5c6..61d830d620 100644 --- a/dev/tools/localization/localizations_utils.dart +++ b/dev/tools/localization/localizations_utils.dart @@ -114,10 +114,8 @@ class LocaleInfo implements Comparable { @override bool operator ==(Object other) { - if (!(other is LocaleInfo)) - return false; - final LocaleInfo otherLocale = other; - return originalString == otherLocale.originalString; + return other is LocaleInfo + && other.originalString == originalString; } @override @@ -167,13 +165,13 @@ void loadMatchingArbsIntoBundleMaps({ void populateResources(LocaleInfo locale, File file) { final Map resources = localeToResources[locale]; final Map attributes = localeToResourceAttributes[locale]; - final Map bundle = json.decode(file.readAsStringSync()); + final Map bundle = json.decode(file.readAsStringSync()) as Map; for (String key in bundle.keys) { // The ARB file resource "attributes" for foo are called @foo. if (key.startsWith('@')) attributes[key.substring(1)] = bundle[key]; else - resources[key] = bundle[key]; + resources[key] = bundle[key] as String; } } // Only pre-assume scriptCode if there is a country or script code to assume off of. @@ -247,9 +245,9 @@ GeneratorOptions parseArgs(List rawArgs) { defaultsTo: false, ); final argslib.ArgResults args = argParser.parse(rawArgs); - final bool writeToFile = args['overwrite']; - final bool materialOnly = args['material']; - final bool cupertinoOnly = args['cupertino']; + final bool writeToFile = args['overwrite'] as bool; + final bool materialOnly = args['material'] as bool; + final bool cupertinoOnly = args['cupertino'] as bool; return GeneratorOptions(writeToFile: writeToFile, materialOnly: materialOnly, cupertinoOnly: cupertinoOnly); } diff --git a/dev/tools/localization/localizations_validator.dart b/dev/tools/localization/localizations_validator.dart index 5f1df3861d..17cd9c88ce 100644 --- a/dev/tools/localization/localizations_validator.dart +++ b/dev/tools/localization/localizations_validator.dart @@ -36,7 +36,7 @@ void validateEnglishLocalizations(File file) { throw ValidationError(errorMessages.toString()); } - final Map bundle = json.decode(file.readAsStringSync()); + final Map bundle = json.decode(file.readAsStringSync()) as Map; for (String resourceId in bundle.keys) { if (resourceId.startsWith('@')) @@ -67,11 +67,11 @@ void validateEnglishLocalizations(File file) { continue; } - final String description = atResource['description']; + final String description = atResource['description'] as String; if (description == null) errorMessages.writeln('No description specified for $atResourceId'); - final String plural = atResource['plural']; + final String plural = atResource['plural'] as String; final String resourceId = atResourceId.substring(1); if (plural != null) { final String resourceIdOther = '${resourceId}Other'; diff --git a/dev/tools/mega_gallery.dart b/dev/tools/mega_gallery.dart index 31a392ff4e..7dcaa669cb 100644 --- a/dev/tools/mega_gallery.dart +++ b/dev/tools/mega_gallery.dart @@ -25,7 +25,7 @@ void main(List args) { final ArgResults results = argParser.parse(args); - if (results['help']) { + if (results['help'] as bool) { print('Generate n copies of flutter_gallery.\n'); print('usage: dart mega_gallery.dart '); print(argParser.usage); @@ -33,9 +33,9 @@ void main(List args) { } final Directory source = Directory(_normalize('examples/flutter_gallery')); - final Directory out = Directory(_normalize(results['out'])); + final Directory out = Directory(_normalize(results['out'] as String)); - if (results['delete']) { + if (results['delete'] as bool) { if (out.existsSync()) { print('Deleting ${out.path}'); out.deleteSync(recursive: true); @@ -55,7 +55,7 @@ void main(List args) { final SourceStats stats = getStatsFor(_dir(source, 'lib')); copies = (kTargetLineCount / stats.lines).round(); } else { - copies = int.parse(results['copies']); + copies = int.parse(results['copies'] as String); } print('Making $copies copies of flutter_gallery.'); @@ -89,7 +89,7 @@ void main(List args) { _file(out, '.dartignore').writeAsStringSync(''); // Count source lines and number of files; tell how to run it. - print(' ${path.relative(results["out"])} : ${getStatsFor(out)}'); + print(' ${path.relative(results["out"] as String)} : ${getStatsFor(out)}'); } // TODO(devoncarew): Create an entry-point that builds a UI with all `n` copies. diff --git a/dev/tools/update_icons.dart b/dev/tools/update_icons.dart index 5863b35df1..d5b07b06b9 100644 --- a/dev/tools/update_icons.dart +++ b/dev/tools/update_icons.dart @@ -158,12 +158,12 @@ void main(List args) { argParser.addFlag(kOptionDryRun, defaultsTo: false); final ArgResults argResults = argParser.parse(args); - final File iconFile = File(path.absolute(argResults[kOptionIconsPath])); + final File iconFile = File(path.absolute(argResults[kOptionIconsPath] as String)); if (!iconFile.existsSync()) { stderr.writeln('Icons file not found: ${iconFile.path}'); exit(1); } - final File codepointsFile = File(path.absolute(argResults[kOptionCodepointsPath])); + final File codepointsFile = File(path.absolute(argResults[kOptionCodepointsPath] as String)); if (!codepointsFile.existsSync()) { stderr.writeln('Codepoints file not found: ${codepointsFile.path}'); exit(1); @@ -173,7 +173,7 @@ void main(List args) { final String codepointData = codepointsFile.readAsStringSync(); final String newIconData = regenerateIconsFile(iconData, codepointData); - if (argResults[kOptionDryRun]) + if (argResults[kOptionDryRun] as bool) stdout.writeln(newIconData); else iconFile.writeAsStringSync(newIconData); diff --git a/dev/tools/vitool/bin/main.dart b/dev/tools/vitool/bin/main.dart index cfdf9ab926..29d24d2bb3 100644 --- a/dev/tools/vitool/bin/main.dart +++ b/dev/tools/vitool/bin/main.dart @@ -56,7 +56,7 @@ void main(List args) { final ArgResults argResults = parser.parse(args); - if (argResults['help'] || + if (argResults['help'] as bool || !argResults.wasParsed('output') || !argResults.wasParsed('asset-name') || argResults.rest.isEmpty) { @@ -71,20 +71,20 @@ void main(List args) { final StringBuffer generatedSb = StringBuffer(); if (argResults.wasParsed('header')) { - generatedSb.write(File(argResults['header']).readAsStringSync()); + generatedSb.write(File(argResults['header'] as String).readAsStringSync()); generatedSb.write('\n'); } - if (argResults['codegen_comment']) + if (argResults['codegen_comment'] as bool) generatedSb.write(kCodegenComment); if (argResults.wasParsed('part-of')) generatedSb.write('part of ${argResults['part-of']};\n'); final Animation animation = Animation.fromFrameData(frames); - generatedSb.write(animation.toDart('_AnimatedIconData', argResults['asset-name'])); + generatedSb.write(animation.toDart('_AnimatedIconData', argResults['asset-name'] as String)); - final File outFile = File(argResults['output']); + final File outFile = File(argResults['output'] as String); outFile.writeAsStringSync(generatedSb.toString()); } diff --git a/dev/tools/vitool/lib/vitool.dart b/dev/tools/vitool/lib/vitool.dart index b8dd447285..52e07e5a8d 100644 --- a/dev/tools/vitool/lib/vitool.dart +++ b/dev/tools/vitool/lib/vitool.dart @@ -204,7 +204,7 @@ List _interpretSvgGroup(List children, _Transform transform) { for (XmlNode node in children) { if (node.nodeType != XmlNodeType.ELEMENT) continue; - final XmlElement element = node; + final XmlElement element = node as XmlElement; if (element.name.local == 'path') { paths.add(SvgPath.fromElement(element).applyTransform(transform)); @@ -270,9 +270,9 @@ class FrameData { bool operator ==(Object other) { if (runtimeType != other.runtimeType) return false; - final FrameData typedOther = other; - return size == typedOther.size - && const ListEquality().equals(paths, typedOther.paths); + return other is FrameData + && other.size == size + && const ListEquality().equals(other.paths, paths); } @override @@ -322,10 +322,10 @@ class SvgPath { bool operator ==(Object other) { if (runtimeType != other.runtimeType) return false; - final SvgPath typedOther = other; - return id == typedOther.id - && opacity == typedOther.opacity - && const ListEquality().equals(commands, typedOther.commands); + return other is SvgPath + && other.id == id + && other.opacity == opacity + && const ListEquality().equals(other.commands, commands); } @override @@ -371,9 +371,9 @@ class SvgPathCommand { bool operator ==(Object other) { if (runtimeType != other.runtimeType) return false; - final SvgPathCommand typedOther = other; - return type == typedOther.type - && const ListEquality>().equals(points, typedOther.points); + return other is SvgPathCommand + && other.type == type + && const ListEquality>().equals(other.points, points); } @override @@ -554,7 +554,7 @@ XmlElement _extractSvgElement(XmlDocument document) { return document.children.singleWhere( (XmlNode node) => node.nodeType == XmlNodeType.ELEMENT && _asElement(node).name.local == 'svg' - ); + ) as XmlElement; } -XmlElement _asElement(XmlNode node) => node; +XmlElement _asElement(XmlNode node) => node as XmlElement; diff --git a/dev/tools/vitool/test/vitool_test.dart b/dev/tools/vitool/test/vitool_test.dart index 12fefd777f..82d20209c7 100644 --- a/dev/tools/vitool/test/vitool_test.dart +++ b/dev/tools/vitool/test/vitool_test.dart @@ -622,7 +622,7 @@ class PathMatcher extends Matcher { if (item.runtimeType != actual.runtimeType) return false; - final SvgPath other = item; + final SvgPath other = item as SvgPath; if (other.id != actual.id || other.opacity != actual.opacity) return false; @@ -666,7 +666,7 @@ class PathAnimationMatcher extends Matcher { if (item.runtimeType != expected.runtimeType) return false; - final PathAnimation other = item; + final PathAnimation other = item as PathAnimation; if (!const ListEquality().equals(other.opacities, expected.opacities)) return false;