[flutter_tool] Remove some async file io (#38654)
diff --git a/packages/flutter_tools/lib/runner.dart b/packages/flutter_tools/lib/runner.dart index 6999486..0734f13 100644 --- a/packages/flutter_tools/lib/runner.dart +++ b/packages/flutter_tools/lib/runner.dart
@@ -179,12 +179,12 @@ buffer.writeln('```\n${await _doctorText()}```'); try { - await crashFile.writeAsString(buffer.toString()); + crashFile.writeAsStringSync(buffer.toString()); } on FileSystemException catch (_) { // Fallback to the system temporary directory. crashFile = getUniqueFile(crashFileSystem.systemTempDirectory, 'flutter', 'log'); try { - await crashFile.writeAsString(buffer.toString()); + crashFile.writeAsStringSync(buffer.toString()); } on FileSystemException catch (e) { printError('Could not write crash report to disk: $e'); printError(buffer.toString());
diff --git a/packages/flutter_tools/lib/src/asset.dart b/packages/flutter_tools/lib/src/asset.dart index d121d83..737c9c7 100644 --- a/packages/flutter_tools/lib/src/asset.dart +++ b/packages/flutter_tools/lib/src/asset.dart
@@ -235,7 +235,7 @@ entries[_fontManifestJson] = DevFSStringContent(json.encode(fonts)); // TODO(ianh): Only do the following line if we've changed packages or if our LICENSE file changed - entries[_license] = await _obtainLicenses(packageMap, assetBasePath, reportPackages: reportLicensedPackages); + entries[_license] = _obtainLicenses(packageMap, assetBasePath, reportPackages: reportLicensedPackages); return 0; } @@ -325,11 +325,11 @@ final String _licenseSeparator = '\n' + ('-' * 80) + '\n'; /// Returns a DevFSContent representing the license file. -Future<DevFSContent> _obtainLicenses( +DevFSContent _obtainLicenses( PackageMap packageMap, String assetBase, { bool reportPackages, -}) async { +}) { // Read the LICENSE file from each package in the .packages file, splitting // each one into each component license (so that we can de-dupe if possible). // @@ -347,30 +347,32 @@ final Set<String> allPackages = <String>{}; for (String packageName in packageMap.map.keys) { final Uri package = packageMap.map[packageName]; - if (package != null && package.scheme == 'file') { - final File file = fs.file(package.resolve('../LICENSE')); - if (file.existsSync()) { - final List<String> rawLicenses = - (await file.readAsString()).split(_licenseSeparator); - for (String rawLicense in rawLicenses) { - List<String> packageNames; - String licenseText; - if (rawLicenses.length > 1) { - final int split = rawLicense.indexOf('\n\n'); - if (split >= 0) { - packageNames = rawLicense.substring(0, split).split('\n'); - licenseText = rawLicense.substring(split + 2); - } - } - if (licenseText == null) { - packageNames = <String>[packageName]; - licenseText = rawLicense; - } - packageLicenses.putIfAbsent(licenseText, () => <String>{}) - ..addAll(packageNames); - allPackages.addAll(packageNames); + if (package == null || package.scheme != 'file') { + continue; + } + final File file = fs.file(package.resolve('../LICENSE')); + if (!file.existsSync()) { + continue; + } + final List<String> rawLicenses = + file.readAsStringSync().split(_licenseSeparator); + for (String rawLicense in rawLicenses) { + List<String> packageNames; + String licenseText; + if (rawLicenses.length > 1) { + final int split = rawLicense.indexOf('\n\n'); + if (split >= 0) { + packageNames = rawLicense.substring(0, split).split('\n'); + licenseText = rawLicense.substring(split + 2); } } + if (licenseText == null) { + packageNames = <String>[packageName]; + licenseText = rawLicense; + } + packageLicenses.putIfAbsent(licenseText, () => <String>{}) + ..addAll(packageNames); + allPackages.addAll(packageNames); } }
diff --git a/packages/flutter_tools/lib/src/base/build.dart b/packages/flutter_tools/lib/src/base/build.dart index 51bcbcc..695d869 100644 --- a/packages/flutter_tools/lib/src/base/build.dart +++ b/packages/flutter_tools/lib/src/base/build.dart
@@ -180,7 +180,7 @@ // gen_snapshot would provide an argument to do this automatically. if (platform == TargetPlatform.ios && bitcode) { final IOSink sink = fs.file('$assembly.bitcode').openWrite(); - for (String line in await fs.file(assembly).readAsLines()) { + for (String line in fs.file(assembly).readAsLinesSync()) { if (line.startsWith('.section __DWARF')) { break; } @@ -192,7 +192,7 @@ // Write path to gen_snapshot, since snapshots have to be re-generated when we roll // the Dart SDK. final String genSnapshotPath = GenSnapshot.getSnapshotterPath(snapshotType); - await outputDir.childFile('gen_snapshot.d').writeAsString('gen_snapshot.d: $genSnapshotPath\n'); + outputDir.childFile('gen_snapshot.d').writeAsStringSync('gen_snapshot.d: $genSnapshotPath\n'); // On iOS, we use Xcode to compile the snapshot into a dynamic library that the // end-developer can link into their app. @@ -313,7 +313,7 @@ // Write path to frontend_server, since things need to be re-generated when that changes. final String frontendPath = artifacts.getArtifactPath(Artifact.frontendServerSnapshotForEngineDartSdk); - await fs.directory(outputPath).childFile('frontend_server.d').writeAsString('frontend_server.d: $frontendPath\n'); + fs.directory(outputPath).childFile('frontend_server.d').writeAsStringSync('frontend_server.d: $frontendPath\n'); return compilerOutput?.outputFilename; }
diff --git a/packages/flutter_tools/lib/src/base/fingerprint.dart b/packages/flutter_tools/lib/src/base/fingerprint.dart index 69ce8fc..663a254 100644 --- a/packages/flutter_tools/lib/src/base/fingerprint.dart +++ b/packages/flutter_tools/lib/src/base/fingerprint.dart
@@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:async'; - import 'package:crypto/crypto.dart' show md5; import 'package:meta/meta.dart'; import 'package:quiver/core.dart' show hash2; @@ -52,12 +50,12 @@ final List<String> _depfilePaths; final FingerprintPathFilter _pathFilter; - Future<Fingerprint> buildFingerprint() async { - final List<String> paths = await _getPaths(); + Fingerprint buildFingerprint() { + final List<String> paths = _getPaths(); return Fingerprint.fromBuildInputs(_properties, paths); } - Future<bool> doesFingerprintMatch() async { + bool doesFingerprintMatch() { if (_disableBuildCache) { return false; } @@ -69,12 +67,12 @@ if (!_depfilePaths.every(fs.isFileSync)) return false; - final List<String> paths = await _getPaths(); + final List<String> paths = _getPaths(); if (!paths.every(fs.isFileSync)) return false; - final Fingerprint oldFingerprint = Fingerprint.fromJson(await fingerprintFile.readAsString()); - final Fingerprint newFingerprint = await buildFingerprint(); + final Fingerprint oldFingerprint = Fingerprint.fromJson(fingerprintFile.readAsStringSync()); + final Fingerprint newFingerprint = buildFingerprint(); return oldFingerprint == newFingerprint; } catch (e) { // Log exception and continue, fingerprinting is only a performance improvement. @@ -83,9 +81,9 @@ return false; } - Future<void> writeFingerprint() async { + void writeFingerprint() { try { - final Fingerprint fingerprint = await buildFingerprint(); + final Fingerprint fingerprint = buildFingerprint(); fs.file(fingerprintPath).writeAsStringSync(fingerprint.toJson()); } catch (e) { // Log exception and continue, fingerprinting is only a performance improvement. @@ -93,11 +91,11 @@ } } - Future<List<String>> _getPaths() async { + List<String> _getPaths() { final Set<String> paths = <String>{ ..._paths, for (String depfilePath in _depfilePaths) - ...await readDepfile(depfilePath), + ...readDepfile(depfilePath), }; final FingerprintPathFilter filter = _pathFilter ?? (String path) => true; return paths.where(filter).toList()..sort(); @@ -183,10 +181,10 @@ /// outfile : file1.dart fil\\e2.dart fil\ e3.dart /// /// will return a set containing: 'file1.dart', 'fil\e2.dart', 'fil e3.dart'. -Future<Set<String>> readDepfile(String depfilePath) async { +Set<String> readDepfile(String depfilePath) { // Depfile format: // outfile1 outfile2 : file1.dart file2.dart file3.dart - final String contents = await fs.file(depfilePath).readAsString(); + final String contents = fs.file(depfilePath).readAsStringSync(); final String dependencies = contents.split(': ')[1]; return dependencies
diff --git a/packages/flutter_tools/lib/src/base/platform.dart b/packages/flutter_tools/lib/src/base/platform.dart index 9ab824d..24d8a55 100644 --- a/packages/flutter_tools/lib/src/base/platform.dart +++ b/packages/flutter_tools/lib/src/base/platform.dart
@@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:async'; - import 'package:platform/platform.dart'; import 'context.dart'; @@ -25,17 +23,17 @@ /// subdirectory. /// /// Returns the existing platform. -Future<Platform> getRecordingPlatform(String location) async { +Platform getRecordingPlatform(String location) { final Directory dir = getRecordingSink(location, _kRecordingType); final File file = _getPlatformManifest(dir); - await file.writeAsString(platform.toJson(), flush: true); + file.writeAsStringSync(platform.toJson(), flush: true); return platform; } -Future<FakePlatform> getReplayPlatform(String location) async { +FakePlatform getReplayPlatform(String location) { final Directory dir = getReplaySource(location, _kRecordingType); final File file = _getPlatformManifest(dir); - final String json = await file.readAsString(); + final String json = file.readAsStringSync(); return FakePlatform.fromJson(json); }
diff --git a/packages/flutter_tools/lib/src/base/process.dart b/packages/flutter_tools/lib/src/base/process.dart index 1dd5765..f94384e 100644 --- a/packages/flutter_tools/lib/src/base/process.dart +++ b/packages/flutter_tools/lib/src/base/process.dart
@@ -15,7 +15,7 @@ typedef StringConverter = String Function(String string); /// A function that will be run before the VM exits. -typedef ShutdownHook = Future<dynamic> Function(); +typedef ShutdownHook = FutureOr<dynamic> Function(); // TODO(ianh): We have way too many ways to run subprocesses in this project. // Convert most of these into one or more lightweight wrappers around the @@ -83,8 +83,12 @@ printTrace('Shutdown hook priority ${stage.priority}'); final List<ShutdownHook> hooks = _shutdownHooks.remove(stage); final List<Future<dynamic>> futures = <Future<dynamic>>[]; - for (ShutdownHook shutdownHook in hooks) - futures.add(shutdownHook()); + for (ShutdownHook shutdownHook in hooks) { + final FutureOr<dynamic> result = shutdownHook(); + if (result is Future<dynamic>) { + futures.add(result); + } + } await Future.wait<dynamic>(futures); } } finally {
diff --git a/packages/flutter_tools/lib/src/build_runner/build_runner.dart b/packages/flutter_tools/lib/src/build_runner/build_runner.dart index 6265c02..a550c8f 100644 --- a/packages/flutter_tools/lib/src/build_runner/build_runner.dart +++ b/packages/flutter_tools/lib/src/build_runner/build_runner.dart
@@ -102,7 +102,7 @@ } stringBuffer.writeln(' build_runner: ^$kMinimumBuildRunnerVersion'); stringBuffer.writeln(' build_daemon: $kSupportedBuildDaemonVersion'); - await syntheticPubspec.writeAsString(stringBuffer.toString()); + syntheticPubspec.writeAsStringSync(stringBuffer.toString()); await pubGet( context: PubContext.pubGet,
diff --git a/packages/flutter_tools/lib/src/build_runner/build_script.dart b/packages/flutter_tools/lib/src/build_runner/build_script.dart index 4a1a284..728a1f3 100644 --- a/packages/flutter_tools/lib/src/build_runner/build_script.dart +++ b/packages/flutter_tools/lib/src/build_runner/build_script.dart
@@ -376,7 +376,7 @@ final Iterable<AssetId> allSrcs = allDeps.expand((Module module) => module.sources); await scratchSpace.ensureAssets(allSrcs, buildStep); - final String packageFile = await _createPackageFile(allSrcs, buildStep, scratchSpace); + final String packageFile = _createPackageFile(allSrcs, buildStep, scratchSpace); final String dartPath = dartEntrypointId.path.startsWith('lib/') ? 'package:${dartEntrypointId.package}/' '${dartEntrypointId.path.substring('lib/'.length)}' @@ -430,7 +430,7 @@ /// The filename is based off the MD5 hash of the asset path so that files are /// unique regarless of situations like `web/foo/bar.dart` vs /// `web/foo-bar.dart`. -Future<String> _createPackageFile(Iterable<AssetId> inputSources, BuildStep buildStep, ScratchSpace scratchSpace) async { +String _createPackageFile(Iterable<AssetId> inputSources, BuildStep buildStep, ScratchSpace scratchSpace) { final Uri inputUri = buildStep.inputId.uri; final String packageFileName = '.package-${md5.convert(inputUri.toString().codeUnits)}'; @@ -439,8 +439,7 @@ final Set<String> packageNames = inputSources.map((AssetId s) => s.package).toSet(); final String packagesFileContent = packageNames.map((String name) => '$name:packages/$name/').join('\n'); - await packagesFile - .writeAsString('# Generated for $inputUri\n$packagesFileContent'); + packagesFile .writeAsStringSync('# Generated for $inputUri\n$packagesFileContent'); return packageFileName; }
diff --git a/packages/flutter_tools/lib/src/build_runner/build_script_generator.dart b/packages/flutter_tools/lib/src/build_runner/build_script_generator.dart index ff010dd..8b59f9b 100644 --- a/packages/flutter_tools/lib/src/build_runner/build_script_generator.dart +++ b/packages/flutter_tools/lib/src/build_runner/build_script_generator.dart
@@ -49,8 +49,8 @@ // ignore_for_file: directives_ordering ${library.accept(emitter)}'''); final File output = fs.file(location); - await output.create(recursive: true); - await fs.file(location).writeAsString(result); + output.createSync(recursive: true); + fs.file(location).writeAsStringSync(result); } on FormatterException { throwToolExit('Generated build script could not be parsed. ' 'This is likely caused by a misconfigured builder definition.');
diff --git a/packages/flutter_tools/lib/src/bundle.dart b/packages/flutter_tools/lib/src/bundle.dart index f298114..573f985 100644 --- a/packages/flutter_tools/lib/src/bundle.dart +++ b/packages/flutter_tools/lib/src/bundle.dart
@@ -99,8 +99,8 @@ } kernelContent = DevFSFileContent(fs.file(compilerOutput.outputFilename)); - await fs.directory(getBuildDirectory()).childFile('frontend_server.d') - .writeAsString('frontend_server.d: ${artifacts.getArtifactPath(Artifact.frontendServerSnapshotForEngineDartSdk)}\n'); + fs.directory(getBuildDirectory()).childFile('frontend_server.d') + .writeAsStringSync('frontend_server.d: ${artifacts.getArtifactPath(Artifact.frontendServerSnapshotForEngineDartSdk)}\n'); } final AssetBundle assets = await buildAssets(
diff --git a/packages/flutter_tools/lib/src/commands/create.dart b/packages/flutter_tools/lib/src/commands/create.dart index fa8a198..c29458a 100644 --- a/packages/flutter_tools/lib/src/commands/create.dart +++ b/packages/flutter_tools/lib/src/commands/create.dart
@@ -407,7 +407,7 @@ break; } if (sampleCode != null) { - generatedFileCount += await _applySample(relativeDir, sampleCode); + generatedFileCount += _applySample(relativeDir, sampleCode); } printStatus('Wrote $generatedFileCount files.'); printStatus('\nAll done!'); @@ -566,13 +566,13 @@ // documentation website in sampleCode. Returns the difference in the number // of files after applying the sample, since it also deletes the application's // test directory (since the template's test doesn't apply to the sample). - Future<int> _applySample(Directory directory, String sampleCode) async { + int _applySample(Directory directory, String sampleCode) { final File mainDartFile = directory.childDirectory('lib').childFile('main.dart'); - await mainDartFile.create(recursive: true); - await mainDartFile.writeAsString(sampleCode); + mainDartFile.createSync(recursive: true); + mainDartFile.writeAsStringSync(sampleCode); final Directory testDir = directory.childDirectory('test'); final List<FileSystemEntity> files = testDir.listSync(recursive: true); - await testDir.delete(recursive: true); + testDir.deleteSync(recursive: true); return -files.length; }
diff --git a/packages/flutter_tools/lib/src/commands/packages.dart b/packages/flutter_tools/lib/src/commands/packages.dart index 6078a17..510e9bf 100644 --- a/packages/flutter_tools/lib/src/commands/packages.dart +++ b/packages/flutter_tools/lib/src/commands/packages.dart
@@ -79,9 +79,9 @@ return usageValues; } final FlutterProject rootProject = FlutterProject.fromPath(target); - final bool hasPlugins = await rootProject.flutterPluginsFile.exists(); + final bool hasPlugins = rootProject.flutterPluginsFile.existsSync(); if (hasPlugins) { - final int numberOfPlugins = (await rootProject.flutterPluginsFile.readAsLines()).length; + final int numberOfPlugins = (rootProject.flutterPluginsFile.readAsLinesSync()).length; usageValues[CustomDimensions.commandPackagesNumberPlugins] = '$numberOfPlugins'; } else { usageValues[CustomDimensions.commandPackagesNumberPlugins] = '0';
diff --git a/packages/flutter_tools/lib/src/commands/screenshot.dart b/packages/flutter_tools/lib/src/commands/screenshot.dart index e98f6ed..bda6f33 100644 --- a/packages/flutter_tools/lib/src/commands/screenshot.dart +++ b/packages/flutter_tools/lib/src/commands/screenshot.dart
@@ -106,7 +106,7 @@ } catch (error) { throwToolExit('Error taking screenshot: $error'); } - await showOutputFileInfo(outputFile); + _showOutputFileInfo(outputFile); } Future<void> runSkia(File outputFile) async { @@ -115,8 +115,8 @@ final IOSink sink = outputFile.openWrite(); sink.add(base64.decode(skp['skp'])); await sink.close(); - await showOutputFileInfo(outputFile); - await _ensureOutputIsNotJsonRpcError(outputFile); + _showOutputFileInfo(outputFile); + _ensureOutputIsNotJsonRpcError(outputFile); } Future<void> runRasterizer(File outputFile) async { @@ -125,8 +125,8 @@ final IOSink sink = outputFile.openWrite(); sink.add(base64.decode(response['screenshot'])); await sink.close(); - await showOutputFileInfo(outputFile); - await _ensureOutputIsNotJsonRpcError(outputFile); + _showOutputFileInfo(outputFile); + _ensureOutputIsNotJsonRpcError(outputFile); } Future<Map<String, dynamic>> _invokeVmServiceRpc(String method) async { @@ -135,18 +135,20 @@ return await vmService.vm.invokeRpcRaw(method); } - Future<void> _ensureOutputIsNotJsonRpcError(File outputFile) async { - if (await outputFile.length() < 1000) { - final String content = await outputFile.readAsString( - encoding: const AsciiCodec(allowInvalid: true), - ); - if (content.startsWith('{"jsonrpc":"2.0", "error"')) - throwToolExit('\nIt appears the output file contains an error message, not valid skia output.'); + void _ensureOutputIsNotJsonRpcError(File outputFile) { + if (outputFile.lengthSync() >= 1000) { + return; + } + final String content = outputFile.readAsStringSync( + encoding: const AsciiCodec(allowInvalid: true), + ); + if (content.startsWith('{"jsonrpc":"2.0", "error"')) { + throwToolExit('It appears the output file contains an error message, not valid skia output.'); } } - Future<void> showOutputFileInfo(File outputFile) async { - final int sizeKB = (await outputFile.length()) ~/ 1024; + void _showOutputFileInfo(File outputFile) { + final int sizeKB = (outputFile.lengthSync()) ~/ 1024; printStatus('Screenshot written to ${fs.path.relative(outputFile.path)} (${sizeKB}kB).'); } }
diff --git a/packages/flutter_tools/lib/src/ios/mac.dart b/packages/flutter_tools/lib/src/ios/mac.dart index f800f4c..ef8df16 100644 --- a/packages/flutter_tools/lib/src/ios/mac.dart +++ b/packages/flutter_tools/lib/src/ios/mac.dart
@@ -269,7 +269,7 @@ bool codesign = true, bool usesTerminalUi = true, }) async { - if (!await upgradePbxProjWithFlutterAssets(app.project)) + if (!upgradePbxProjWithFlutterAssets(app.project)) return XcodeBuildResult(success: false); if (!_checkXcodeVersion()) @@ -679,10 +679,10 @@ manifest.writeAsStringSync(json.encode(jsonObject), mode: FileMode.write, flush: true); } -Future<bool> upgradePbxProjWithFlutterAssets(IosProject project) async { +bool upgradePbxProjWithFlutterAssets(IosProject project) { final File xcodeProjectFile = project.xcodeProjectInfoFile; - assert(await xcodeProjectFile.exists()); - final List<String> lines = await xcodeProjectFile.readAsLines(); + assert(xcodeProjectFile.existsSync()); + final List<String> lines = xcodeProjectFile.readAsLinesSync(); final RegExp oldAssets = RegExp(r'\/\* (flutter_assets|app\.flx)'); final StringBuffer buffer = StringBuffer(); @@ -697,6 +697,6 @@ buffer.writeln(line); } } - await xcodeProjectFile.writeAsString(buffer.toString()); + xcodeProjectFile.writeAsStringSync(buffer.toString()); return true; }
diff --git a/packages/flutter_tools/lib/src/macos/cocoapod_utils.dart b/packages/flutter_tools/lib/src/macos/cocoapod_utils.dart index aa7f701..45e3fe9 100644 --- a/packages/flutter_tools/lib/src/macos/cocoapod_utils.dart +++ b/packages/flutter_tools/lib/src/macos/cocoapod_utils.dart
@@ -38,9 +38,9 @@ xcodeProject: xcodeProject, engineDir: flutterFrameworkDir(buildMode), isSwift: xcodeProject.isSwift, - dependenciesChanged: !await fingerprinter.doesFingerprintMatch(), + dependenciesChanged: !fingerprinter.doesFingerprintMatch(), ); if (didPodInstall) { - await fingerprinter.writeFingerprint(); + fingerprinter.writeFingerprint(); } }
diff --git a/packages/flutter_tools/lib/src/macos/cocoapods.dart b/packages/flutter_tools/lib/src/macos/cocoapods.dart index 9729387..ca2577f 100644 --- a/packages/flutter_tools/lib/src/macos/cocoapods.dart +++ b/packages/flutter_tools/lib/src/macos/cocoapods.dart
@@ -106,7 +106,7 @@ bool isSwift = false, bool dependenciesChanged = true, }) async { - if (!(await xcodeProject.podfile.exists())) { + if (!xcodeProject.podfile.existsSync()) { throwToolExit('Podfile missing'); } if (await _checkPodCondition()) {
diff --git a/packages/flutter_tools/lib/src/resident_runner.dart b/packages/flutter_tools/lib/src/resident_runner.dart index ac96adb..d5d8bbd 100644 --- a/packages/flutter_tools/lib/src/resident_runner.dart +++ b/packages/flutter_tools/lib/src/resident_runner.dart
@@ -747,7 +747,7 @@ } } } - final int sizeKB = (await outputFile.length()) ~/ 1024; + final int sizeKB = outputFile.lengthSync() ~/ 1024; status.stop(); printStatus('Screenshot written to ${fs.path.relative(outputFile.path)} (${sizeKB}kB).'); } catch (error) {
diff --git a/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart b/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart index de8e4f9..5a16863 100644 --- a/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart +++ b/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart
@@ -303,15 +303,15 @@ ..writeln() ..writeln('# rest') ..writeln(topLevelResults.rest); - await manifest.writeAsString(buffer.toString(), flush: true); + manifest.writeAsStringSync(buffer.toString(), flush: true); // ZIP the recording up once the recording has been serialized. - addShutdownHook(() async { + addShutdownHook(() { final File zipFile = getUniqueFile(fs.currentDirectory, 'bugreport', 'zip'); os.zip(tempDir, zipFile); printStatus(userMessages.runnerBugReportFinished(zipFile.basename)); }, ShutdownStage.POST_PROCESS_RECORDING); - addShutdownHook(() => tempDir.delete(recursive: true), ShutdownStage.CLEANUP); + addShutdownHook(() => tempDir.deleteSync(recursive: true), ShutdownStage.CLEANUP); } assert(recordTo == null || replayFrom == null); @@ -323,7 +323,7 @@ contextOverrides.addAll(<Type, dynamic>{ ProcessManager: getRecordingProcessManager(recordTo), FileSystem: getRecordingFileSystem(recordTo), - Platform: await getRecordingPlatform(recordTo), + Platform: getRecordingPlatform(recordTo), }); VMService.enableRecordingConnection(recordTo); } @@ -335,7 +335,7 @@ contextOverrides.addAll(<Type, dynamic>{ ProcessManager: await getReplayProcessManager(replayFrom), FileSystem: getReplayFileSystem(replayFrom), - Platform: await getReplayPlatform(replayFrom), + Platform: getReplayPlatform(replayFrom), }); VMService.enableReplayConnection(replayFrom); }
diff --git a/packages/flutter_tools/lib/src/tracing.dart b/packages/flutter_tools/lib/src/tracing.dart index 0a2de0c..f208305 100644 --- a/packages/flutter_tools/lib/src/tracing.dart +++ b/packages/flutter_tools/lib/src/tracing.dart
@@ -78,12 +78,14 @@ final File traceInfoFile = fs.file(traceInfoFilePath); // Delete old startup data, if any. - if (await traceInfoFile.exists()) - await traceInfoFile.delete(); + if (traceInfoFile.existsSync()) { + traceInfoFile.deleteSync(); + } // Create "build" directory, if missing. - if (!(await traceInfoFile.parent.exists())) - await traceInfoFile.parent.create(); + if (!traceInfoFile.parent.existsSync()) { + traceInfoFile.parent.createSync(); + } final Tracing tracing = Tracing(observatory);
diff --git a/packages/flutter_tools/lib/src/version.dart b/packages/flutter_tools/lib/src/version.dart index f1f4a42..61666df 100644 --- a/packages/flutter_tools/lib/src/version.dart +++ b/packages/flutter_tools/lib/src/version.dart
@@ -99,8 +99,9 @@ String get engineRevision => Cache.instance.engineRevision; String get engineRevisionShort => _shortGitRevision(engineRevision); - Future<void> ensureVersionFile() async { + Future<void> ensureVersionFile() { fs.file(fs.path.join(Cache.flutterRoot, 'version')).writeAsStringSync(_frameworkVersion); + return Future<void>.value(); } @override
diff --git a/packages/flutter_tools/lib/src/vmservice_record_replay.dart b/packages/flutter_tools/lib/src/vmservice_record_replay.dart index 9da5bf4..dcf04a2 100644 --- a/packages/flutter_tools/lib/src/vmservice_record_replay.dart +++ b/packages/flutter_tools/lib/src/vmservice_record_replay.dart
@@ -24,7 +24,7 @@ class RecordingVMServiceChannel extends DelegatingStreamChannel<String> { RecordingVMServiceChannel(StreamChannel<String> delegate, Directory location) : super(delegate) { - addShutdownHook(() async { + addShutdownHook(() { // Sort the messages such that they are ordered // `[request1, response1, request2, response2, ...]`. This serves no // purpose other than to make the serialized format more human-readable. @@ -32,7 +32,7 @@ final File file = _getManifest(location); final String json = const JsonEncoder.withIndent(' ').convert(_messages); - await file.writeAsString(json, flush: true); + file.writeAsStringSync(json, flush: true); }, ShutdownStage.SERIALIZE_RECORDING); }
diff --git a/packages/flutter_tools/test/general.shard/base/fingerprint_test.dart b/packages/flutter_tools/test/general.shard/base/fingerprint_test.dart index 9c1f5a8..5068a49 100644 --- a/packages/flutter_tools/test/general.shard/base/fingerprint_test.dart +++ b/packages/flutter_tools/test/general.shard/base/fingerprint_test.dart
@@ -32,10 +32,10 @@ FileSystem: () => fs, }; - testUsingContext('throws when depfile is malformed', () async { - await fs.file('a.dart').create(); - await fs.file('b.dart').create(); - await fs.file('depfile').create(); + testUsingContext('throws when depfile is malformed', () { + fs.file('a.dart').createSync(); + fs.file('b.dart').createSync(); + fs.file('depfile').createSync(); final Fingerprinter fingerprinter = Fingerprinter( fingerprintPath: 'out.fingerprint', @@ -46,11 +46,11 @@ 'wobble': 'womble', }, ); - expect(() async => await fingerprinter.buildFingerprint(), throwsA(anything)); + expect(() => fingerprinter.buildFingerprint(), throwsA(anything)); }, overrides: contextOverrides); - testUsingContext('creates fingerprint with specified properties and files', () async { - await fs.file('a.dart').create(); + testUsingContext('creates fingerprint with specified properties and files', () { + fs.file('a.dart').createSync(); final Fingerprinter fingerprinter = Fingerprinter( fingerprintPath: 'out.fingerprint', @@ -60,17 +60,17 @@ 'wibble': 'wobble', }, ); - final Fingerprint fingerprint = await fingerprinter.buildFingerprint(); + final Fingerprint fingerprint = fingerprinter.buildFingerprint(); expect(fingerprint, Fingerprint.fromBuildInputs(<String, String>{ 'foo': 'bar', 'wibble': 'wobble', }, <String>['a.dart'])); }, overrides: contextOverrides); - testUsingContext('creates fingerprint with file checksums', () async { - await fs.file('a.dart').create(); - await fs.file('b.dart').create(); - await fs.file('depfile').writeAsString('depfile : b.dart'); + testUsingContext('creates fingerprint with file checksums', () { + fs.file('a.dart').createSync(); + fs.file('b.dart').createSync(); + fs.file('depfile').writeAsStringSync('depfile : b.dart'); final Fingerprinter fingerprinter = Fingerprinter( fingerprintPath: 'out.fingerprint', @@ -81,16 +81,16 @@ 'wobble': 'womble', }, ); - final Fingerprint fingerprint = await fingerprinter.buildFingerprint(); + final Fingerprint fingerprint = fingerprinter.buildFingerprint(); expect(fingerprint, Fingerprint.fromBuildInputs(<String, String>{ 'bar': 'baz', 'wobble': 'womble', }, <String>['a.dart', 'b.dart'])); }, overrides: contextOverrides); - testUsingContext('fingerprint does not match if not present', () async { - await fs.file('a.dart').create(); - await fs.file('b.dart').create(); + testUsingContext('fingerprint does not match if not present', () { + fs.file('a.dart').createSync(); + fs.file('b.dart').createSync(); final Fingerprinter fingerprinter = Fingerprinter( fingerprintPath: 'out.fingerprint', @@ -100,12 +100,12 @@ 'wobble': 'womble', }, ); - expect(await fingerprinter.doesFingerprintMatch(), isFalse); + expect(fingerprinter.doesFingerprintMatch(), isFalse); }, overrides: contextOverrides); - testUsingContext('fingerprint does match if different', () async { - await fs.file('a.dart').create(); - await fs.file('b.dart').create(); + testUsingContext('fingerprint does match if different', () { + fs.file('a.dart').createSync(); + fs.file('b.dart').createSync(); final Fingerprinter fingerprinter1 = Fingerprinter( fingerprintPath: 'out.fingerprint', @@ -115,7 +115,7 @@ 'wobble': 'womble', }, ); - await fingerprinter1.writeFingerprint(); + fingerprinter1.writeFingerprint(); final Fingerprinter fingerprinter2 = Fingerprinter( fingerprintPath: 'out.fingerprint', @@ -125,13 +125,13 @@ 'wobble': 'elbmow', }, ); - expect(await fingerprinter2.doesFingerprintMatch(), isFalse); + expect(fingerprinter2.doesFingerprintMatch(), isFalse); }, overrides: contextOverrides); - testUsingContext('fingerprint does not match if depfile is malformed', () async { - await fs.file('a.dart').create(); - await fs.file('b.dart').create(); - await fs.file('depfile').writeAsString('depfile : b.dart'); + testUsingContext('fingerprint does not match if depfile is malformed', () { + fs.file('a.dart').createSync(); + fs.file('b.dart').createSync(); + fs.file('depfile').writeAsStringSync('depfile : b.dart'); // Write a valid fingerprint final Fingerprinter fingerprinter = Fingerprinter( @@ -143,10 +143,10 @@ 'wobble': 'womble', }, ); - await fingerprinter.writeFingerprint(); + fingerprinter.writeFingerprint(); // Write a corrupt depfile. - await fs.file('depfile').writeAsString(''); + fs.file('depfile').writeAsStringSync(''); final Fingerprinter badFingerprinter = Fingerprinter( fingerprintPath: 'out.fingerprint', paths: <String>['a.dart', 'b.dart'], @@ -157,13 +157,13 @@ }, ); - expect(await badFingerprinter.doesFingerprintMatch(), isFalse); + expect(badFingerprinter.doesFingerprintMatch(), isFalse); }, overrides: contextOverrides); - testUsingContext('fingerprint does not match if previous fingerprint is malformed', () async { - await fs.file('a.dart').create(); - await fs.file('b.dart').create(); - await fs.file('out.fingerprint').writeAsString('** not JSON **'); + testUsingContext('fingerprint does not match if previous fingerprint is malformed', () { + fs.file('a.dart').createSync(); + fs.file('b.dart').createSync(); + fs.file('out.fingerprint').writeAsStringSync('** not JSON **'); final Fingerprinter fingerprinter = Fingerprinter( fingerprintPath: 'out.fingerprint', @@ -174,12 +174,12 @@ 'wobble': 'womble', }, ); - expect(await fingerprinter.doesFingerprintMatch(), isFalse); + expect(fingerprinter.doesFingerprintMatch(), isFalse); }, overrides: contextOverrides); - testUsingContext('fingerprint does match if identical', () async { - await fs.file('a.dart').create(); - await fs.file('b.dart').create(); + testUsingContext('fingerprint does match if identical', () { + fs.file('a.dart').createSync(); + fs.file('b.dart').createSync(); final Fingerprinter fingerprinter = Fingerprinter( fingerprintPath: 'out.fingerprint', @@ -189,15 +189,15 @@ 'wobble': 'womble', }, ); - await fingerprinter.writeFingerprint(); - expect(await fingerprinter.doesFingerprintMatch(), isTrue); + fingerprinter.writeFingerprint(); + expect(fingerprinter.doesFingerprintMatch(), isTrue); }, overrides: contextOverrides); final Platform mockPlatformDisabledCache = MockPlatform(); mockPlatformDisabledCache.environment['DISABLE_FLUTTER_BUILD_CACHE'] = 'true'; - testUsingContext('can be disabled with an environment variable', () async { - await fs.file('a.dart').create(); - await fs.file('b.dart').create(); + testUsingContext('can be disabled with an environment variable', () { + fs.file('a.dart').createSync(); + fs.file('b.dart').createSync(); final Fingerprinter fingerprinter = Fingerprinter( fingerprintPath: 'out.fingerprint', @@ -207,8 +207,8 @@ 'wobble': 'womble', }, ); - await fingerprinter.writeFingerprint(); - expect(await fingerprinter.doesFingerprintMatch(), isFalse); + fingerprinter.writeFingerprint(); + expect(fingerprinter.doesFingerprintMatch(), isFalse); }, overrides: <Type, Generator>{ Platform: () => mockPlatformDisabledCache, ...contextOverrides, @@ -216,9 +216,9 @@ final Platform mockPlatformEnabledCache = MockPlatform(); mockPlatformEnabledCache.environment['DISABLE_FLUTTER_BUILD_CACHE'] = 'false'; - testUsingContext('can be not-disabled with an environment variable', () async { - await fs.file('a.dart').create(); - await fs.file('b.dart').create(); + testUsingContext('can be not-disabled with an environment variable', () { + fs.file('a.dart').createSync(); + fs.file('b.dart').createSync(); final Fingerprinter fingerprinter = Fingerprinter( fingerprintPath: 'out.fingerprint', @@ -228,14 +228,14 @@ 'wobble': 'womble', }, ); - await fingerprinter.writeFingerprint(); - expect(await fingerprinter.doesFingerprintMatch(), isTrue); + fingerprinter.writeFingerprint(); + expect(fingerprinter.doesFingerprintMatch(), isTrue); }, overrides: <Type, Generator>{ Platform: () => mockPlatformEnabledCache, ...contextOverrides, }); - testUsingContext('fails to write fingerprint if inputs are missing', () async { + testUsingContext('fails to write fingerprint if inputs are missing', () { final Fingerprinter fingerprinter = Fingerprinter( fingerprintPath: 'out.fingerprint', paths: <String>['a.dart'], @@ -244,14 +244,14 @@ 'wibble': 'wobble', }, ); - await fingerprinter.writeFingerprint(); + fingerprinter.writeFingerprint(); expect(fs.file('out.fingerprint').existsSync(), isFalse); }, overrides: contextOverrides); - testUsingContext('applies path filter to inputs paths', () async { - await fs.file('a.dart').create(); - await fs.file('ab.dart').create(); - await fs.file('depfile').writeAsString('depfile : ab.dart c.dart'); + testUsingContext('applies path filter to inputs paths', () { + fs.file('a.dart').createSync(); + fs.file('ab.dart').createSync(); + fs.file('depfile').writeAsStringSync('depfile : ab.dart c.dart'); final Fingerprinter fingerprinter = Fingerprinter( fingerprintPath: 'out.fingerprint', @@ -263,7 +263,7 @@ }, pathFilter: (String path) => path.startsWith('a'), ); - await fingerprinter.writeFingerprint(); + fingerprinter.writeFingerprint(); expect(fs.file('out.fingerprint').existsSync(), isTrue); }, overrides: contextOverrides); }); @@ -284,17 +284,17 @@ fs = MemoryFileSystem(); }); - testUsingContext('throws if any input file does not exist', () async { - await fs.file('a.dart').create(); + testUsingContext('throws if any input file does not exist', () { + fs.file('a.dart').createSync(); expect( () => Fingerprint.fromBuildInputs(<String, String>{}, <String>['a.dart', 'b.dart']), throwsArgumentError, ); }, overrides: <Type, Generator>{FileSystem: () => fs}); - testUsingContext('populates checksums for valid files', () async { - await fs.file('a.dart').writeAsString('This is a'); - await fs.file('b.dart').writeAsString('This is b'); + testUsingContext('populates checksums for valid files', () { + fs.file('a.dart').writeAsStringSync('This is a'); + fs.file('b.dart').writeAsStringSync('This is b'); final Fingerprint fingerprint = Fingerprint.fromBuildInputs(<String, String>{}, <String>['a.dart', 'b.dart']); final Map<String, dynamic> jsonObject = json.decode(fingerprint.toJson()); @@ -321,13 +321,13 @@ }); group('fromJson', () { - testUsingContext('throws if JSON is invalid', () async { + testUsingContext('throws if JSON is invalid', () { expect(() => Fingerprint.fromJson('<xml></xml>'), throwsA(anything)); }, overrides: <Type, Generator>{ FlutterVersion: () => mockVersion, }); - testUsingContext('creates fingerprint from valid JSON', () async { + testUsingContext('creates fingerprint from valid JSON', () { final String jsonString = json.encode(<String, dynamic>{ 'version': kVersion, 'properties': <String, String>{ @@ -355,7 +355,7 @@ FlutterVersion: () => mockVersion, }); - testUsingContext('throws ArgumentError for unknown versions', () async { + testUsingContext('throws ArgumentError for unknown versions', () { final String jsonString = json.encode(<String, dynamic>{ 'version': 'bad', 'properties': <String, String>{}, @@ -366,7 +366,7 @@ FlutterVersion: () => mockVersion, }); - testUsingContext('throws ArgumentError if version is not present', () async { + testUsingContext('throws ArgumentError if version is not present', () { final String jsonString = json.encode(<String, dynamic>{ 'properties': <String, String>{}, 'files': <String, String>{}, @@ -376,7 +376,7 @@ FlutterVersion: () => mockVersion, }); - testUsingContext('treats missing properties and files entries as if empty', () async { + testUsingContext('treats missing properties and files entries as if empty', () { final String jsonString = json.encode(<String, dynamic>{ 'version': kVersion, }); @@ -387,7 +387,7 @@ }); group('operator ==', () { - testUsingContext('reports not equal if properties do not match', () async { + testUsingContext('reports not equal if properties do not match', () { final Map<String, dynamic> a = <String, dynamic>{ 'version': kVersion, 'properties': <String, String>{ @@ -404,7 +404,7 @@ FlutterVersion: () => mockVersion, }); - testUsingContext('reports not equal if file checksums do not match', () async { + testUsingContext('reports not equal if file checksums do not match', () { final Map<String, dynamic> a = <String, dynamic>{ 'version': kVersion, 'properties': <String, String>{}, @@ -423,7 +423,7 @@ FlutterVersion: () => mockVersion, }); - testUsingContext('reports not equal if file paths do not match', () async { + testUsingContext('reports not equal if file paths do not match', () { final Map<String, dynamic> a = <String, dynamic>{ 'version': kVersion, 'properties': <String, String>{}, @@ -442,7 +442,7 @@ FlutterVersion: () => mockVersion, }); - testUsingContext('reports equal if properties and file checksums match', () async { + testUsingContext('reports equal if properties and file checksums match', () { final Map<String, dynamic> a = <String, dynamic>{ 'version': kVersion, 'properties': <String, String>{ @@ -461,7 +461,7 @@ }); }); group('hashCode', () { - testUsingContext('is consistent with equals, even if map entries are reordered', () async { + testUsingContext('is consistent with equals, even if map entries are reordered', () { final Fingerprint a = Fingerprint.fromJson('{"version":"$kVersion","properties":{"a":"A","b":"B"},"files":{}}'); final Fingerprint b = Fingerprint.fromJson('{"version":"$kVersion","properties":{"b":"B","a":"A"},"files":{}}'); expect(a, b); @@ -482,31 +482,31 @@ final Map<Type, Generator> contextOverrides = <Type, Generator>{FileSystem: () => fs}; - testUsingContext('returns one file if only one is listed', () async { - await fs.file('a.d').writeAsString('snapshot.d: /foo/a.dart'); - expect(await readDepfile('a.d'), unorderedEquals(<String>['/foo/a.dart'])); + testUsingContext('returns one file if only one is listed', () { + fs.file('a.d').writeAsStringSync('snapshot.d: /foo/a.dart'); + expect(readDepfile('a.d'), unorderedEquals(<String>['/foo/a.dart'])); }, overrides: contextOverrides); - testUsingContext('returns multiple files', () async { - await fs.file('a.d').writeAsString('snapshot.d: /foo/a.dart /foo/b.dart'); - expect(await readDepfile('a.d'), unorderedEquals(<String>[ + testUsingContext('returns multiple files', () { + fs.file('a.d').writeAsStringSync('snapshot.d: /foo/a.dart /foo/b.dart'); + expect(readDepfile('a.d'), unorderedEquals(<String>[ '/foo/a.dart', '/foo/b.dart', ])); }, overrides: contextOverrides); - testUsingContext('trims extra spaces between files', () async { - await fs.file('a.d').writeAsString('snapshot.d: /foo/a.dart /foo/b.dart /foo/c.dart'); - expect(await readDepfile('a.d'), unorderedEquals(<String>[ + testUsingContext('trims extra spaces between files', () { + fs.file('a.d').writeAsStringSync('snapshot.d: /foo/a.dart /foo/b.dart /foo/c.dart'); + expect(readDepfile('a.d'), unorderedEquals(<String>[ '/foo/a.dart', '/foo/b.dart', '/foo/c.dart', ])); }, overrides: contextOverrides); - testUsingContext('returns files with spaces and backslashes', () async { - await fs.file('a.d').writeAsString(r'snapshot.d: /foo/a\ a.dart /foo/b\\b.dart /foo/c\\ c.dart'); - expect(await readDepfile('a.d'), unorderedEquals(<String>[ + testUsingContext('returns files with spaces and backslashes', () { + fs.file('a.d').writeAsStringSync(r'snapshot.d: /foo/a\ a.dart /foo/b\\b.dart /foo/c\\ c.dart'); + expect(readDepfile('a.d'), unorderedEquals(<String>[ r'/foo/a a.dart', r'/foo/b\b.dart', r'/foo/c\ c.dart',
diff --git a/packages/flutter_tools/test/general.shard/ios/mac_test.dart b/packages/flutter_tools/test/general.shard/ios/mac_test.dart index e284fd5..75313fa 100644 --- a/packages/flutter_tools/test/general.shard/ios/mac_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/mac_test.dart
@@ -434,12 +434,12 @@ when(project.xcodeProjectInfoFile).thenReturn(pbxprojFile); when(project.hostAppBundleName).thenReturn('UnitTestRunner.app'); - when(pbxprojFile.readAsLines()) - .thenAnswer((_) => Future<List<String>>.value(flutterAssetPbxProjLines)); - when(pbxprojFile.exists()) - .thenAnswer((_) => Future<bool>.value(true)); + when(pbxprojFile.readAsLinesSync()) + .thenAnswer((_) => flutterAssetPbxProjLines); + when(pbxprojFile.existsSync()) + .thenAnswer((_) => true); - bool result = await upgradePbxProjWithFlutterAssets(project); + bool result = upgradePbxProjWithFlutterAssets(project); expect(result, true); expect( testLogger.statusText, @@ -447,9 +447,9 @@ ); testLogger.clear(); - when(pbxprojFile.readAsLines()) - .thenAnswer((_) => Future<List<String>>.value(appFlxPbxProjLines)); - result = await upgradePbxProjWithFlutterAssets(project); + when(pbxprojFile.readAsLinesSync()) + .thenAnswer((_) => appFlxPbxProjLines); + result = upgradePbxProjWithFlutterAssets(project); expect(result, true); expect( testLogger.statusText, @@ -457,9 +457,9 @@ ); testLogger.clear(); - when(pbxprojFile.readAsLines()) - .thenAnswer((_) => Future<List<String>>.value(cleanPbxProjLines)); - result = await upgradePbxProjWithFlutterAssets(project); + when(pbxprojFile.readAsLinesSync()) + .thenAnswer((_) => cleanPbxProjLines); + result = upgradePbxProjWithFlutterAssets(project); expect(result, true); expect( testLogger.statusText,