From 5dae5989182021eae6eaf2946a14b7c27544d4bb Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Tue, 10 Jan 2023 06:17:39 -0800 Subject: [PATCH] [various] Enable `avoid_dynamic_calls` (#6834) * Enable the option * Fix camera * Fix webview * Remove unnecessary 'call's from camera tests * Fix maps * Fix sign-in * fix image_picker * Fix IAP * Fix shared_preferences * Fix url_launcher_android * Version bumps * Fix tool * Re-apply webview test fix * Re-bump versions * Fix one new tool issue --- .../lib/src/common/git_version_finder.dart | 3 ++- .../lib/src/common/pub_version_finder.dart | 12 ++++++----- .../src/create_all_packages_app_command.dart | 21 +++++++++---------- .../lib/src/dependabot_check_command.dart | 5 +++-- script/tool/lib/src/format_command.dart | 4 ++-- .../tool/lib/src/pubspec_check_command.dart | 15 ++++++------- script/tool/lib/src/readme_check_command.dart | 3 ++- .../test/common/git_version_finder_test.dart | 8 ++++--- .../common/package_looping_command_test.dart | 4 +++- 9 files changed, 42 insertions(+), 33 deletions(-) diff --git a/script/tool/lib/src/common/git_version_finder.dart b/script/tool/lib/src/common/git_version_finder.dart index b135424827..3965ae0ace 100644 --- a/script/tool/lib/src/common/git_version_finder.dart +++ b/script/tool/lib/src/common/git_version_finder.dart @@ -88,7 +88,8 @@ class GitVersionFinder { if (fileContent.trim().isEmpty) { return null; } - final String? versionString = loadYaml(fileContent)['version'] as String?; + final YamlMap fileYaml = loadYaml(fileContent) as YamlMap; + final String? versionString = fileYaml['version'] as String?; return versionString == null ? null : Version.parse(versionString); } diff --git a/script/tool/lib/src/common/pub_version_finder.dart b/script/tool/lib/src/common/pub_version_finder.dart index 572cb913aa..c24ec429f8 100644 --- a/script/tool/lib/src/common/pub_version_finder.dart +++ b/script/tool/lib/src/common/pub_version_finder.dart @@ -44,11 +44,13 @@ class PubVersionFinder { result: PubVersionFinderResult.fail, httpResponse: response); } - final List versions = - (json.decode(response.body)['versions'] as List) - .map((final dynamic versionString) => - Version.parse(versionString as String)) - .toList(); + final Map responseBody = + json.decode(response.body) as Map; + final List versions = (responseBody['versions']! as List) + .cast() + .map( + (final String versionString) => Version.parse(versionString)) + .toList(); return PubVersionFinderResponse( versions: versions, diff --git a/script/tool/lib/src/create_all_packages_app_command.dart b/script/tool/lib/src/create_all_packages_app_command.dart index 4660413bc9..e7719e9f66 100644 --- a/script/tool/lib/src/create_all_packages_app_command.dart +++ b/script/tool/lib/src/create_all_packages_app_command.dart @@ -244,24 +244,23 @@ dev_dependencies:${_pubspecMapString(pubspec.devDependencies)} ###'''; } - String _pubspecMapString(Map values) { + String _pubspecMapString(Map values) { final StringBuffer buffer = StringBuffer(); - for (final MapEntry entry in values.entries) { + for (final MapEntry entry in values.entries) { buffer.writeln(); - if (entry.value is VersionConstraint) { - String value = entry.value.toString(); + final Object? entryValue = entry.value; + if (entryValue is VersionConstraint) { + String value = entryValue.toString(); // Range constraints require quoting. if (value.startsWith('>') || value.startsWith('<')) { value = "'$value'"; } buffer.write(' ${entry.key}: $value'); - } else if (entry.value is SdkDependency) { - final SdkDependency dep = entry.value as SdkDependency; - buffer.write(' ${entry.key}: \n sdk: ${dep.sdk}'); - } else if (entry.value is PathDependency) { - final PathDependency dep = entry.value as PathDependency; - String depPath = dep.path; + } else if (entryValue is SdkDependency) { + buffer.write(' ${entry.key}: \n sdk: ${entryValue.sdk}'); + } else if (entryValue is PathDependency) { + String depPath = entryValue.path; if (path.style == p.Style.windows) { // Posix-style path separators are preferred in pubspec.yaml (and // using a consistent format makes unit testing simpler), so convert. @@ -278,7 +277,7 @@ dev_dependencies:${_pubspecMapString(pubspec.devDependencies)} buffer.write(' ${entry.key}: \n path: $depPath'); } else { throw UnimplementedError( - 'Not available for type: ${entry.value.runtimeType}', + 'Not available for type: ${entryValue.runtimeType}', ); } } diff --git a/script/tool/lib/src/dependabot_check_command.dart b/script/tool/lib/src/dependabot_check_command.dart index 5aa762e916..77b44e11b5 100644 --- a/script/tool/lib/src/dependabot_check_command.dart +++ b/script/tool/lib/src/dependabot_check_command.dart @@ -58,8 +58,9 @@ class DependabotCheckCommand extends PackageLoopingCommand { const String typeKey = 'package-ecosystem'; const String dirKey = 'directory'; _gradleDirs = entries - .where((dynamic entry) => entry[typeKey] == 'gradle') - .map((dynamic entry) => (entry as YamlMap)[dirKey] as String) + .cast() + .where((YamlMap entry) => entry[typeKey] == 'gradle') + .map((YamlMap entry) => entry[dirKey] as String) .toSet(); } diff --git a/script/tool/lib/src/format_command.dart b/script/tool/lib/src/format_command.dart index 8198f6d36a..43c450cbcf 100644 --- a/script/tool/lib/src/format_command.dart +++ b/script/tool/lib/src/format_command.dart @@ -298,13 +298,13 @@ class FormatCommand extends PackageCommand { Future> _whichAll(String command) async { try { final io.ProcessResult result = - await processRunner.run('which', ['-a', command]); + await processRunner.run('which', ['-a', command]); if (result.exitCode != 0) { return []; } - final String stdout = result.stdout.trim() as String; + final String stdout = (result.stdout as String).trim(); if (stdout.isEmpty) { return []; } diff --git a/script/tool/lib/src/pubspec_check_command.dart b/script/tool/lib/src/pubspec_check_command.dart index 79ef1e1d3e..5682ba0576 100644 --- a/script/tool/lib/src/pubspec_check_command.dart +++ b/script/tool/lib/src/pubspec_check_command.dart @@ -244,8 +244,8 @@ class PubspecCheckCommand extends PackageLoopingCommand { required RepositoryPackage package, }) { if (_isImplementationPackage(package)) { - final String? implements = - pubspec.flutter!['plugin']!['implements'] as String?; + final YamlMap pluginSection = pubspec.flutter!['plugin'] as YamlMap; + final String? implements = pluginSection['implements'] as String?; final String expectedImplements = package.directory.parent.basename; if (implements == null) { return 'Missing "implements: $expectedImplements" in "plugin" section.'; @@ -265,19 +265,20 @@ class PubspecCheckCommand extends PackageLoopingCommand { Pubspec pubspec, { required RepositoryPackage package, }) { - final dynamic platformsEntry = pubspec.flutter!['plugin']!['platforms']; - if (platformsEntry == null) { + final YamlMap pluginSection = pubspec.flutter!['plugin'] as YamlMap; + final YamlMap? platforms = pluginSection['platforms'] as YamlMap?; + if (platforms == null) { logWarning('Does not implement any platforms'); return null; } - final YamlMap platforms = platformsEntry as YamlMap; final String packageName = package.directory.basename; // Validate that the default_package entries look correct (e.g., no typos). final Set defaultPackages = {}; - for (final MapEntry platformEntry in platforms.entries) { + for (final MapEntry platformEntry in platforms.entries) { + final YamlMap platformDetails = platformEntry.value! as YamlMap; final String? defaultPackage = - platformEntry.value['default_package'] as String?; + platformDetails['default_package'] as String?; if (defaultPackage != null) { defaultPackages.add(defaultPackage); if (!defaultPackage.startsWith('${packageName}_')) { diff --git a/script/tool/lib/src/readme_check_command.dart b/script/tool/lib/src/readme_check_command.dart index e3fbc7bc45..cbbb8b835a 100644 --- a/script/tool/lib/src/readme_check_command.dart +++ b/script/tool/lib/src/readme_check_command.dart @@ -234,7 +234,8 @@ class ReadmeCheckCommand extends PackageLoopingCommand { } // Validate that the supported OS lists match. - final dynamic platformsEntry = pubspec.flutter!['plugin']!['platforms']; + final YamlMap pluginSection = pubspec.flutter!['plugin'] as YamlMap; + final dynamic platformsEntry = pluginSection['platforms']; if (platformsEntry == null) { logWarning('Plugin not support any platforms'); return null; diff --git a/script/tool/test/common/git_version_finder_test.dart b/script/tool/test/common/git_version_finder_test.dart index d5a5dd4fe8..538b72a900 100644 --- a/script/tool/test/common/git_version_finder_test.dart +++ b/script/tool/test/common/git_version_finder_test.dart @@ -22,12 +22,14 @@ void main() { gitDir = MockGitDir(); when(gitDir.runCommand(any, throwOnError: anyNamed('throwOnError'))) .thenAnswer((Invocation invocation) { - gitDirCommands.add(invocation.positionalArguments[0] as List?); + final List arguments = + invocation.positionalArguments[0]! as List; + gitDirCommands.add(arguments); final MockProcessResult mockProcessResult = MockProcessResult(); - if (invocation.positionalArguments[0][0] == 'diff') { + if (arguments[0] == 'diff') { when(mockProcessResult.stdout as String?) .thenReturn(gitDiffResponse); - } else if (invocation.positionalArguments[0][0] == 'merge-base') { + } else if (arguments[0] == 'merge-base') { when(mockProcessResult.stdout as String?) .thenReturn(mergeBaseResponse); } diff --git a/script/tool/test/common/package_looping_command_test.dart b/script/tool/test/common/package_looping_command_test.dart index f90d58e122..34f346c62f 100644 --- a/script/tool/test/common/package_looping_command_test.dart +++ b/script/tool/test/common/package_looping_command_test.dart @@ -110,8 +110,10 @@ void main() { final MockGitDir gitDir = MockGitDir(); when(gitDir.runCommand(any, throwOnError: anyNamed('throwOnError'))) .thenAnswer((Invocation invocation) { + final List arguments = + invocation.positionalArguments[0]! as List; final MockProcessResult mockProcessResult = MockProcessResult(); - if (invocation.positionalArguments[0][0] == 'diff') { + if (arguments[0] == 'diff') { when(mockProcessResult.stdout as String?) .thenReturn(gitDiffResponse); }