Update flutter_tools to use package:file throughout (#7385) This removes direct file access from within flutter_tools in favor of using `package:file` via a `FileSystem` that's accessed via the `ApplicationContext`. This lays the groundwork for us to be able to easily swap out the underlying file system when running Flutter tools, which will be used to provide a record/replay file system, analogous to what we have for process invocations.
diff --git a/packages/flutter_tools/lib/executable.dart b/packages/flutter_tools/lib/executable.dart index 33846d2..a5a7bb6 100644 --- a/packages/flutter_tools/lib/executable.dart +++ b/packages/flutter_tools/lib/executable.dart
@@ -3,7 +3,7 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; +import 'dart:io' as io; import 'package:args/command_runner.dart'; import 'package:stack_trace/stack_trace.dart'; @@ -11,6 +11,7 @@ import 'src/base/common.dart'; import 'src/base/config.dart'; import 'src/base/context.dart'; +import 'src/base/file_system.dart'; import 'src/base/logger.dart'; import 'src/base/os.dart'; import 'src/base/process.dart'; @@ -101,6 +102,7 @@ // in those locations as well to see if you need a similar update there. // Seed these context entries first since others depend on them + context.putIfAbsent(FileSystem, () => new LocalFileSystem()); context.putIfAbsent(ProcessManager, () => new ProcessManager()); context.putIfAbsent(Logger, () => new StdoutLogger()); @@ -123,9 +125,9 @@ _exit(0); }, onError: (dynamic error, Chain chain) { if (error is UsageException) { - stderr.writeln(error.message); - stderr.writeln(); - stderr.writeln( + io.stderr.writeln(error.message); + io.stderr.writeln(); + io.stderr.writeln( "Run 'flutter -h' (or 'flutter <command> -h') for available " "flutter commands and options." ); @@ -133,11 +135,11 @@ _exit(64); } else if (error is ToolExit) { if (error.message != null) - stderr.writeln(error.message); + io.stderr.writeln(error.message); if (verbose) { - stderr.writeln(); - stderr.writeln(chain.terse.toString()); - stderr.writeln(); + io.stderr.writeln(); + io.stderr.writeln(chain.terse.toString()); + io.stderr.writeln(); } _exit(error.exitCode ?? 1); } else if (error is ProcessExit) { @@ -145,23 +147,23 @@ _exit(error.exitCode); } else { // We've crashed; emit a log report. - stderr.writeln(); + io.stderr.writeln(); flutterUsage.sendException(error, chain); if (isRunningOnBot) { // Print the stack trace on the bots - don't write a crash report. - stderr.writeln('$error'); - stderr.writeln(chain.terse.toString()); + io.stderr.writeln('$error'); + io.stderr.writeln(chain.terse.toString()); _exit(1); } else { if (error is String) - stderr.writeln('Oops; flutter has exited unexpectedly: "$error".'); + io.stderr.writeln('Oops; flutter has exited unexpectedly: "$error".'); else - stderr.writeln('Oops; flutter has exited unexpectedly.'); + io.stderr.writeln('Oops; flutter has exited unexpectedly.'); _createCrashReport(args, error, chain).then((File file) { - stderr.writeln( + io.stderr.writeln( 'Crash report written to ${file.path};\n' 'please let us know at https://github.com/flutter/flutter/issues.' ); @@ -174,7 +176,7 @@ } Future<File> _createCrashReport(List<String> args, dynamic error, Chain chain) async { - File crashFile = getUniqueFile(Directory.current, 'flutter', 'log'); + File crashFile = getUniqueFile(fs.currentDirectory, 'flutter', 'log'); StringBuffer buffer = new StringBuffer(); @@ -194,7 +196,7 @@ crashFile.writeAsStringSync(buffer.toString()); } on FileSystemException catch (_) { // Fallback to the system temporary directory. - crashFile = getUniqueFile(Directory.systemTemp, 'flutter', 'log'); + crashFile = getUniqueFile(fs.systemTempDirectory, 'flutter', 'log'); try { crashFile.writeAsStringSync(buffer.toString()); } on FileSystemException catch (e) {
diff --git a/packages/flutter_tools/lib/src/android/android_device.dart b/packages/flutter_tools/lib/src/android/android_device.dart index 3af6e17..cda0f21 100644 --- a/packages/flutter_tools/lib/src/android/android_device.dart +++ b/packages/flutter_tools/lib/src/android/android_device.dart
@@ -4,12 +4,13 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:io'; +import 'dart:io' as io; import '../android/android_sdk.dart'; import '../application_package.dart'; -import '../base/os.dart'; +import '../base/file_system.dart'; import '../base/logger.dart'; +import '../base/os.dart'; import '../base/process.dart'; import '../base/process_manager.dart'; import '../build_info.dart'; @@ -60,7 +61,7 @@ try { // We pass an encoding of LATIN1 so that we don't try and interpret the // `adb shell getprop` result as UTF8. - ProcessResult result = processManager.runSync( + io.ProcessResult result = processManager.runSync( propCommand.first, propCommand.sublist(1), stdoutEncoding: LATIN1 @@ -201,7 +202,7 @@ String _getSourceSha1(ApplicationPackage app) { AndroidApk apk = app; - File shaFile = new File('${apk.apkPath}.sha1'); + File shaFile = fs.file('${apk.apkPath}.sha1'); return shaFile.existsSync() ? shaFile.readAsStringSync() : ''; } @@ -222,7 +223,7 @@ @override bool installApp(ApplicationPackage app) { AndroidApk apk = app; - if (!FileSystemEntity.isFileSync(apk.apkPath)) { + if (!fs.isFileSync(apk.apkPath)) { printError('"${apk.apkPath}" does not exist.'); return false; } @@ -558,7 +559,7 @@ final AndroidDevice device; StreamController<String> _linesController; - Process _process; + io.Process _process; @override Stream<String> get logLines => _linesController.stream; @@ -584,7 +585,7 @@ _timeOrigin = _adbTimestampToDateTime(lastTimestamp); else _timeOrigin = null; - runCommand(device.adbCommandForDevice(args)).then((Process process) { + runCommand(device.adbCommandForDevice(args)).then((io.Process process) { _process = process; _process.stdout.transform(UTF8.decoder).transform(const LineSplitter()).listen(_onLine); _process.stderr.transform(UTF8.decoder).transform(const LineSplitter()).listen(_onLine);
diff --git a/packages/flutter_tools/lib/src/android/android_sdk.dart b/packages/flutter_tools/lib/src/android/android_sdk.dart index caf9686..832d7fe 100644 --- a/packages/flutter_tools/lib/src/android/android_sdk.dart +++ b/packages/flutter_tools/lib/src/android/android_sdk.dart
@@ -2,13 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:io'; +import 'dart:io' as io; import 'package:path/path.dart' as path; import 'package:pub_semver/pub_semver.dart'; import '../base/common.dart'; import '../base/context.dart'; +import '../base/file_system.dart'; import '../base/os.dart'; import '../globals.dart'; @@ -64,12 +65,12 @@ static AndroidSdk locateAndroidSdk() { String androidHomeDir; - if (Platform.environment.containsKey(kAndroidHome)) { - androidHomeDir = Platform.environment[kAndroidHome]; - } else if (Platform.isLinux) { + if (io.Platform.environment.containsKey(kAndroidHome)) { + androidHomeDir = io.Platform.environment[kAndroidHome]; + } else if (io.Platform.isLinux) { if (homeDirPath != null) androidHomeDir = '$homeDirPath/Android/Sdk'; - } else if (Platform.isMacOS) { + } else if (io.Platform.isMacOS) { if (homeDirPath != null) androidHomeDir = '$homeDirPath/Library/Android/sdk'; } @@ -84,7 +85,7 @@ File aaptBin = os.which('aapt'); // in build-tools/$version/aapt if (aaptBin != null) { // Make sure we're using the aapt from the SDK. - aaptBin = new File(aaptBin.resolveSymbolicLinksSync()); + aaptBin = fs.file(aaptBin.resolveSymbolicLinksSync()); String dir = aaptBin.parent.parent.parent.path; if (validSdkDirectory(dir)) return new AndroidSdk(dir); @@ -93,7 +94,7 @@ File adbBin = os.which('adb'); // in platform-tools/adb if (adbBin != null) { // Make sure we're using the adb from the SDK. - adbBin = new File(adbBin.resolveSymbolicLinksSync()); + adbBin = fs.file(adbBin.resolveSymbolicLinksSync()); String dir = adbBin.parent.parent.path; if (validSdkDirectory(dir)) return new AndroidSdk(dir); @@ -105,7 +106,7 @@ } static bool validSdkDirectory(String dir) { - return FileSystemEntity.isDirectorySync(path.join(dir, 'platform-tools')); + return fs.isDirectorySync(path.join(dir, 'platform-tools')); } List<AndroidSdkVersion> get sdkVersions => _sdkVersions; @@ -117,7 +118,7 @@ /// Validate the Android SDK. This returns an empty list if there are no /// issues; otherwise, it returns a list of issues found. List<String> validateSdkWellFormed() { - if (!FileSystemEntity.isFileSync(adbPath)) + if (!fs.isFileSync(adbPath)) return <String>['Android SDK file not found: $adbPath.']; if (sdkVersions.isEmpty || latestVersion == null) @@ -133,7 +134,7 @@ void _init() { List<String> platforms = <String>[]; // android-22, ... - Directory platformsDir = new Directory(path.join(directory, 'platforms')); + Directory platformsDir = fs.directory(path.join(directory, 'platforms')); if (platformsDir.existsSync()) { platforms = platformsDir .listSync() @@ -144,7 +145,7 @@ List<Version> buildTools = <Version>[]; // 19.1.0, 22.0.1, ... - Directory buildToolsDir = new Directory(path.join(directory, 'build-tools')); + Directory buildToolsDir = fs.directory(path.join(directory, 'build-tools')); if (buildToolsDir.existsSync()) { buildTools = buildToolsDir .listSync() @@ -253,7 +254,7 @@ String toString() => '[${sdk.directory}, SDK version $sdkLevel, build-tools $buildToolsVersionName]'; String _exists(String path) { - if (!FileSystemEntity.isFileSync(path)) + if (!fs.isFileSync(path)) return 'Android SDK file not found: $path.'; return null; }
diff --git a/packages/flutter_tools/lib/src/android/gradle.dart b/packages/flutter_tools/lib/src/android/gradle.dart index 0c873a6..3c29be0 100644 --- a/packages/flutter_tools/lib/src/android/gradle.dart +++ b/packages/flutter_tools/lib/src/android/gradle.dart
@@ -3,11 +3,11 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; import 'package:path/path.dart' as path; import '../base/common.dart'; +import '../base/file_system.dart'; import '../base/logger.dart'; import '../base/os.dart'; import '../base/process.dart'; @@ -21,13 +21,13 @@ const String gradleAppOut = 'android/app/build/outputs/apk/app-debug.apk'; bool isProjectUsingGradle() { - return FileSystemEntity.isFileSync('android/build.gradle'); + return fs.isFileSync('android/build.gradle'); } String locateSystemGradle({ bool ensureExecutable: true }) { String gradle = _locateSystemGradle(); if (ensureExecutable && gradle != null) { - File file = new File(gradle); + File file = fs.file(gradle); if (file.existsSync()) os.makeExecutable(file); } @@ -38,7 +38,7 @@ // See if the user has explicitly configured gradle-dir. String gradleDir = config.getValue('gradle-dir'); if (gradleDir != null) { - if (FileSystemEntity.isFileSync(gradleDir)) + if (fs.isFileSync(gradleDir)) return gradleDir; return path.join(gradleDir, 'bin', 'gradle'); } @@ -48,7 +48,7 @@ if (studioPath == null && os.isMacOS) { final String kDefaultMacPath = '/Applications/Android Studio.app'; - if (FileSystemEntity.isDirectorySync(kDefaultMacPath)) + if (fs.isDirectorySync(kDefaultMacPath)) studioPath = kDefaultMacPath; } @@ -57,13 +57,13 @@ if (os.isMacOS && !studioPath.endsWith('Contents')) studioPath = path.join(studioPath, 'Contents'); - Directory dir = new Directory(path.join(studioPath, 'gradle')); + Directory dir = fs.directory(path.join(studioPath, 'gradle')); if (dir.existsSync()) { // We find the first valid gradle directory. for (FileSystemEntity entity in dir.listSync()) { if (entity is Directory && path.basename(entity.path).startsWith('gradle-')) { String executable = path.join(entity.path, 'bin', 'gradle'); - if (FileSystemEntity.isFileSync(executable)) + if (fs.isFileSync(executable)) return executable; } } @@ -82,9 +82,9 @@ String locateProjectGradlew({ bool ensureExecutable: true }) { final String path = 'android/gradlew'; - if (FileSystemEntity.isFileSync(path)) { + if (fs.isFileSync(path)) { if (ensureExecutable) - os.makeExecutable(new File(path)); + os.makeExecutable(fs.file(path)); return path; } else { return null; @@ -93,7 +93,7 @@ Future<Null> buildGradleProject(BuildMode buildMode) async { // Create android/local.properties. - File localProperties = new File('android/local.properties'); + File localProperties = fs.file('android/local.properties'); if (!localProperties.existsSync()) { localProperties.writeAsStringSync( 'sdk.dir=${androidSdk.directory}\n' @@ -120,7 +120,7 @@ } // Stamp the android/app/build.gradle file with the current android sdk and build tools version. - File appGradleFile = new File('android/app/build.gradle'); + File appGradleFile = fs.file('android/app/build.gradle'); if (appGradleFile.existsSync()) { _GradleFile gradleFile = new _GradleFile.parse(appGradleFile); AndroidSdkVersion sdkVersion = androidSdk.latestVersion; @@ -152,7 +152,7 @@ // Run 'gradlew build'. Status status = logger.startProgress('Running \'gradlew build\'...'); int exitcode = await runCommandAndStreamOutput( - <String>[new File('android/gradlew').absolute.path, 'build'], + <String>[fs.file('android/gradlew').absolute.path, 'build'], workingDirectory: 'android', allowReentrantFlutter: true ); @@ -161,7 +161,7 @@ if (exitcode != 0) throwToolExit('Gradlew failed: $exitcode', exitCode: exitcode); - File apkFile = new File(gradleAppOut); + File apkFile = fs.file(gradleAppOut); printStatus('Built $gradleAppOut (${getSizeAsMB(apkFile.lengthSync())}).'); }
diff --git a/packages/flutter_tools/lib/src/application_package.dart b/packages/flutter_tools/lib/src/application_package.dart index 0a73e28..45fef2c 100644 --- a/packages/flutter_tools/lib/src/application_package.dart +++ b/packages/flutter_tools/lib/src/application_package.dart
@@ -2,13 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:io'; - import 'package:path/path.dart' as path; import 'package:xml/xml.dart' as xml; import 'android/android_sdk.dart'; import 'android/gradle.dart'; +import 'base/file_system.dart'; import 'base/os.dart' show os; import 'base/process.dart'; import 'build_info.dart'; @@ -89,10 +88,10 @@ apkPath = path.join(getAndroidBuildDirectory(), 'app.apk'); } - if (!FileSystemEntity.isFileSync(manifestPath)) + if (!fs.isFileSync(manifestPath)) return null; - String manifestString = new File(manifestPath).readAsStringSync(); + String manifestString = fs.file(manifestPath).readAsStringSync(); xml.XmlDocument document = xml.parse(manifestString); Iterable<xml.XmlElement> manifests = document.findElements('manifest'); @@ -135,10 +134,10 @@ factory IOSApp.fromIpa(String applicationBinary) { Directory bundleDir; try { - Directory tempDir = Directory.systemTemp.createTempSync('flutter_app_'); + Directory tempDir = fs.systemTempDirectory.createTempSync('flutter_app_'); addShutdownHook(() async => await tempDir.delete(recursive: true)); - os.unzip(new File(applicationBinary), tempDir); - Directory payloadDir = new Directory(path.join(tempDir.path, 'Payload')); + os.unzip(fs.file(applicationBinary), tempDir); + Directory payloadDir = fs.directory(path.join(tempDir.path, 'Payload')); bundleDir = payloadDir.listSync().singleWhere(_isBundleDirectory); } on StateError catch (e, stackTrace) { printError('Invalid prebuilt iOS binary: ${e.toString()}', stackTrace);
diff --git a/packages/flutter_tools/lib/src/asset.dart b/packages/flutter_tools/lib/src/asset.dart index 36a8cf8..3a5729f 100644 --- a/packages/flutter_tools/lib/src/asset.dart +++ b/packages/flutter_tools/lib/src/asset.dart
@@ -4,12 +4,13 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:io'; +import 'dart:io' as io; import 'package:json_schema/json_schema.dart'; import 'package:path/path.dart' as path; import 'package:yaml/yaml.dart'; +import 'base/file_system.dart'; import 'build_info.dart'; import 'cache.dart'; import 'dart/package_map.dart'; @@ -74,7 +75,7 @@ final String assetPath = path.join(projectRoot, asset); final String archivePath = asset; entries.add( - new AssetBundleEntry.fromFile(archivePath, new File(assetPath))); + new AssetBundleEntry.fromFile(archivePath, fs.file(assetPath))); } } @@ -84,7 +85,7 @@ if (_lastBuildTimestamp == null) return true; - FileStat stat = new File(manifestPath).statSync(); + FileStat stat = fs.file(manifestPath).statSync(); if (stat.type == FileSystemEntityType.NOT_FOUND) return true; @@ -206,7 +207,7 @@ final String source; File get assetFile { - return new File(source != null ? '$base/$source' : '$base/$relativePath'); + return fs.file(source != null ? '$base/$source' : '$base/$relativePath'); } bool get assetFileExists => assetFile.existsSync(); @@ -228,7 +229,7 @@ String fontsPath = path.join(path.absolute(Cache.flutterRoot), 'packages', 'flutter_tools', 'schema', 'material_fonts.yaml'); - return loadYaml(new File(fontsPath).readAsStringSync()); + return loadYaml(fs.file(fontsPath).readAsStringSync()); } final Map<String, dynamic> _materialFontsManifest = _readMaterialFontsManifest(); @@ -280,7 +281,7 @@ for (String packageName in packageMap.map.keys) { final Uri package = packageMap.map[packageName]; if (package != null && package.scheme == 'file') { - final File file = new File.fromUri(package.resolve('../LICENSE')); + final File file = fs.file(package.resolve('../LICENSE')); if (file.existsSync()) { final List<String> rawLicenses = (await file.readAsString()).split(_licenseSeparator); @@ -377,7 +378,7 @@ return result; excludeDirs = excludeDirs.map( - (String exclude) => path.absolute(exclude) + Platform.pathSeparator).toList(); + (String exclude) => path.absolute(exclude) + io.Platform.pathSeparator).toList(); if (manifestDescriptor.containsKey('assets')) { for (String asset in manifestDescriptor['assets']) { @@ -394,12 +395,12 @@ // Find asset variants String assetPath = baseAsset.assetFile.path; String assetFilename = path.basename(assetPath); - Directory assetDir = new Directory(path.dirname(assetPath)); + Directory assetDir = fs.directory(path.dirname(assetPath)); List<FileSystemEntity> files = assetDir.listSync(recursive: true); for (FileSystemEntity entity in files) { - if (!FileSystemEntity.isFileSync(entity.path)) + if (!fs.isFileSync(entity.path)) continue; // Exclude any files in the given directories. @@ -446,7 +447,7 @@ String assetBase, String asset ) { - if (asset.startsWith('packages/') && !FileSystemEntity.isFileSync(path.join(assetBase, asset))) { + if (asset.startsWith('packages/') && !fs.isFileSync(path.join(assetBase, asset))) { // Convert packages/flutter_gallery_assets/clouds-0.png to clouds-0.png. String packageKey = asset.substring(9); String relativeAsset = asset; @@ -459,7 +460,7 @@ Uri uri = packageMap.map[packageKey]; if (uri != null && uri.scheme == 'file') { - File file = new File.fromUri(uri); + File file = fs.file(uri); return new _Asset(base: file.path, assetEntry: asset, relativePath: relativeAsset); } } @@ -468,9 +469,9 @@ } dynamic _loadFlutterYamlManifest(String manifestPath) { - if (manifestPath == null || !FileSystemEntity.isFileSync(manifestPath)) + if (manifestPath == null || !fs.isFileSync(manifestPath)) return null; - String manifestDescriptor = new File(manifestPath).readAsStringSync(); + String manifestDescriptor = fs.file(manifestPath).readAsStringSync(); return loadYaml(manifestDescriptor); }
diff --git a/packages/flutter_tools/lib/src/base/config.dart b/packages/flutter_tools/lib/src/base/config.dart index 6a53013..1bae133 100644 --- a/packages/flutter_tools/lib/src/base/config.dart +++ b/packages/flutter_tools/lib/src/base/config.dart
@@ -3,15 +3,16 @@ // found in the LICENSE file. import 'dart:convert'; -import 'dart:io'; +import 'dart:io' as io; import 'package:path/path.dart' as path; import 'context.dart'; +import 'file_system.dart'; class Config { Config([File configFile]) { - _configFile = configFile ?? new File(path.join(_userHomeDir(), '.flutter_settings')); + _configFile = configFile ?? fs.file(path.join(_userHomeDir(), '.flutter_settings')); if (_configFile.existsSync()) _values = JSON.decode(_configFile.readAsStringSync()); } @@ -45,7 +46,7 @@ } String _userHomeDir() { - String envKey = Platform.operatingSystem == 'windows' ? 'APPDATA' : 'HOME'; - String value = Platform.environment[envKey]; + String envKey = io.Platform.operatingSystem == 'windows' ? 'APPDATA' : 'HOME'; + String value = io.Platform.environment[envKey]; return value == null ? '.' : value; }
diff --git a/packages/flutter_tools/lib/src/base/file_system.dart b/packages/flutter_tools/lib/src/base/file_system.dart index ded0080..b3d9ce9 100644 --- a/packages/flutter_tools/lib/src/base/file_system.dart +++ b/packages/flutter_tools/lib/src/base/file_system.dart
@@ -2,50 +2,57 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:io' as dart_io; +import 'dart:io' as io; import 'package:file/file.dart'; import 'package:file/local.dart'; import 'package:file/memory.dart'; +import 'package:meta/meta.dart'; import 'package:path/path.dart' as path; +import 'context.dart'; + export 'package:file/file.dart'; export 'package:file/local.dart'; +const FileSystem _kLocalFs = const LocalFileSystem(); + /// Currently active implementation of the file system. /// /// By default it uses local disk-based implementation. Override this in tests /// with [MemoryFileSystem]. -FileSystem fs = new LocalFileSystem(); +FileSystem get fs => context == null ? _kLocalFs : context[FileSystem]; /// Exits the process with the given [exitCode]. typedef void ExitFunction([int exitCode]); final ExitFunction _defaultExitFunction = ([int exitCode]) { - dart_io.exit(exitCode); + io.exit(exitCode); }; +ExitFunction _exitFunction = _defaultExitFunction; + /// Exits the process. -ExitFunction exit = _defaultExitFunction; +/// +/// During tests, this may be set to a testing-friendly value by calling +/// [setExitFunctionForTests] (and then restored with [restoreExitFunction]). +ExitFunction get exit => _exitFunction; -/// Restores [fs] to the default local disk-based implementation. -void restoreFileSystem() { - fs = new LocalFileSystem(); - exit = _defaultExitFunction; -} - -/// Uses in-memory replacments for `dart:io` functionality. Useful in tests. -void useInMemoryFileSystem({ String cwd: '/', ExitFunction exitFunction }) { - fs = new MemoryFileSystem(); - if (!fs.directory(cwd).existsSync()) { - fs.directory(cwd).createSync(recursive: true); - } - fs.currentDirectory = cwd; - exit = exitFunction ?? ([int exitCode]) { +/// Sets the [exit] function to a function that throws an exception rather +/// than exiting the process; intended for testing purposes. +@visibleForTesting +void setExitFunctionForTests([ExitFunction exitFunction]) { + _exitFunction = exitFunction ?? ([int exitCode]) { throw new Exception('Exited with code $exitCode'); }; } +/// Restores the [exit] function to the `dart:io` implementation. +@visibleForTesting +void restoreExitFunction() { + _exitFunction = _defaultExitFunction; +} + /// Create the ancestor directories of a file path if they do not already exist. void ensureDirectoryExists(String filePath) { String dirPath = path.dirname(filePath); @@ -57,20 +64,20 @@ /// Recursively copies a folder from `srcPath` to `destPath` void copyFolderSync(String srcPath, String destPath) { - dart_io.Directory srcDir = new dart_io.Directory(srcPath); + Directory srcDir = fs.directory(srcPath); if (!srcDir.existsSync()) throw new Exception('Source directory "${srcDir.path}" does not exist, nothing to copy'); - dart_io.Directory destDir = new dart_io.Directory(destPath); + Directory destDir = fs.directory(destPath); if (!destDir.existsSync()) destDir.createSync(recursive: true); - srcDir.listSync().forEach((dart_io.FileSystemEntity entity) { + srcDir.listSync().forEach((FileSystemEntity entity) { String newPath = path.join(destDir.path, path.basename(entity.path)); - if (entity is dart_io.File) { - dart_io.File newFile = new dart_io.File(newPath); + if (entity is File) { + File newFile = fs.file(newPath); newFile.writeAsBytesSync(entity.readAsBytesSync()); - } else if (entity is dart_io.Directory) { + } else if (entity is Directory) { copyFolderSync(entity.path, newPath); } else { throw new Exception('${entity.path} is neither File nor Directory');
diff --git a/packages/flutter_tools/lib/src/base/os.dart b/packages/flutter_tools/lib/src/base/os.dart index 01c46d3..96ba3ec 100644 --- a/packages/flutter_tools/lib/src/base/os.dart +++ b/packages/flutter_tools/lib/src/base/os.dart
@@ -3,12 +3,13 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; +import 'dart:io' as io; import 'package:archive/archive.dart'; import 'package:path/path.dart' as path; import 'context.dart'; +import 'file_system.dart'; import 'process.dart'; import 'process_manager.dart'; @@ -17,7 +18,7 @@ abstract class OperatingSystemUtils { factory OperatingSystemUtils() { - if (Platform.isWindows) { + if (io.Platform.isWindows) { return new _WindowsUtils(); } else { return new _PosixUtils(); @@ -26,14 +27,14 @@ OperatingSystemUtils._private(); - String get operatingSystem => Platform.operatingSystem; + String get operatingSystem => io.Platform.operatingSystem; bool get isMacOS => operatingSystem == 'macos'; bool get isWindows => operatingSystem == 'windows'; bool get isLinux => operatingSystem == 'linux'; /// Make the given file executable. This may be a no-op on some platforms. - ProcessResult makeExecutable(File file); + io.ProcessResult makeExecutable(File file); /// Return the path (with symlinks resolved) to the given executable, or `null` /// if `which` was not able to locate the binary. @@ -49,7 +50,7 @@ _PosixUtils() : super._private(); @override - ProcessResult makeExecutable(File file) { + io.ProcessResult makeExecutable(File file) { return processManager.runSync('chmod', <String>['a+x', file.path]); } @@ -57,11 +58,11 @@ /// to locate the binary. @override File which(String execName) { - ProcessResult result = processManager.runSync('which', <String>[execName]); + io.ProcessResult result = processManager.runSync('which', <String>[execName]); if (result.exitCode != 0) return null; String path = result.stdout.trim().split('\n').first.trim(); - return new File(path); + return fs.file(path); } // unzip -o -q zipfile -d dest @@ -73,7 +74,7 @@ @override File makePipe(String path) { runSync(<String>['mkfifo', path]); - return new File(path); + return fs.file(path); } } @@ -82,16 +83,16 @@ // This is a no-op. @override - ProcessResult makeExecutable(File file) { - return new ProcessResult(0, 0, null, null); + io.ProcessResult makeExecutable(File file) { + return new io.ProcessResult(0, 0, null, null); } @override File which(String execName) { - ProcessResult result = processManager.runSync('where', <String>[execName]); + io.ProcessResult result = processManager.runSync('where', <String>[execName]); if (result.exitCode != 0) return null; - return new File(result.stdout.trim().split('\n').first.trim()); + return fs.file(result.stdout.trim().split('\n').first.trim()); } @override @@ -103,7 +104,7 @@ if (!archiveFile.isFile || archiveFile.name.endsWith('/')) continue; - File destFile = new File(path.join(targetDirectory.path, archiveFile.name)); + File destFile = fs.file(path.join(targetDirectory.path, archiveFile.name)); if (!destFile.parent.existsSync()) destFile.parent.createSync(recursive: true); destFile.writeAsBytesSync(archiveFile.content); @@ -117,7 +118,7 @@ } Future<int> findAvailablePort() async { - ServerSocket socket = await ServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0); + io.ServerSocket socket = await io.ServerSocket.bind(io.InternetAddress.LOOPBACK_IP_V4, 0); int port = socket.port; await socket.close(); return port; @@ -142,7 +143,7 @@ Future<bool> _isPortAvailable(int port) async { try { - ServerSocket socket = await ServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, port); + io.ServerSocket socket = await io.ServerSocket.bind(io.InternetAddress.LOOPBACK_IP_V4, port); await socket.close(); return true; } catch (error) { @@ -156,11 +157,11 @@ /// or if the project root is the flutter repository root. String findProjectRoot([String directory]) { const String kProjectRootSentinel = 'pubspec.yaml'; - directory ??= Directory.current.path; + directory ??= fs.currentDirectory.path; while (true) { - if (FileSystemEntity.isFileSync(path.join(directory, kProjectRootSentinel))) + if (fs.isFileSync(path.join(directory, kProjectRootSentinel))) return directory; - String parent = FileSystemEntity.parentOf(directory); + String parent = path.dirname(directory); if (directory == parent) return null; directory = parent; }
diff --git a/packages/flutter_tools/lib/src/base/process_manager.dart b/packages/flutter_tools/lib/src/base/process_manager.dart index d3b9cde..1641d67 100644 --- a/packages/flutter_tools/lib/src/base/process_manager.dart +++ b/packages/flutter_tools/lib/src/base/process_manager.dart
@@ -4,13 +4,14 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:io'; +import 'dart:io' as io; import 'package:archive/archive.dart'; import 'package:intl/intl.dart'; import 'package:path/path.dart' as path; import 'context.dart'; +import 'file_system.dart'; import 'os.dart'; import 'process.dart'; @@ -31,14 +32,14 @@ /// methods to allow the implementation of these methods to be mocked out or /// decorated for testing or debugging purposes. class ProcessManager { - Future<Process> start( + Future<io.Process> start( String executable, List<String> arguments, { String workingDirectory, Map<String, String> environment, - ProcessStartMode mode: ProcessStartMode.NORMAL, + io.ProcessStartMode mode: io.ProcessStartMode.NORMAL, }) { - return Process.start( + return io.Process.start( executable, arguments, workingDirectory: workingDirectory, @@ -47,15 +48,15 @@ ); } - Future<ProcessResult> run( + Future<io.ProcessResult> run( String executable, List<String> arguments, { String workingDirectory, Map<String, String> environment, - Encoding stdoutEncoding: SYSTEM_ENCODING, - Encoding stderrEncoding: SYSTEM_ENCODING, + Encoding stdoutEncoding: io.SYSTEM_ENCODING, + Encoding stderrEncoding: io.SYSTEM_ENCODING, }) { - return Process.run( + return io.Process.run( executable, arguments, workingDirectory: workingDirectory, @@ -65,15 +66,15 @@ ); } - ProcessResult runSync( + io.ProcessResult runSync( String executable, List<String> arguments, { String workingDirectory, Map<String, String> environment, - Encoding stdoutEncoding: SYSTEM_ENCODING, - Encoding stderrEncoding: SYSTEM_ENCODING, + Encoding stdoutEncoding: io.SYSTEM_ENCODING, + Encoding stderrEncoding: io.SYSTEM_ENCODING, }) { - return Process.runSync( + return io.Process.runSync( executable, arguments, workingDirectory: workingDirectory, @@ -83,8 +84,8 @@ ); } - bool killPid(int pid, [ProcessSignal signal = ProcessSignal.SIGTERM]) { - return Process.killPid(pid, signal); + bool killPid(int pid, [io.ProcessSignal signal = io.ProcessSignal.SIGTERM]) { + return io.Process.killPid(pid, signal); } } @@ -101,7 +102,7 @@ final String _recordTo; final ProcessManager _delegate = new ProcessManager(); - final Directory _tmpDir = Directory.systemTemp.createTempSync('flutter_tools_'); + final Directory _tmpDir = fs.systemTempDirectory.createTempSync('flutter_tools_'); final List<Map<String, dynamic>> _manifest = <Map<String, dynamic>>[]; final Map<int, Future<int>> _runningProcesses = <int, Future<int>>{}; @@ -121,14 +122,14 @@ } @override - Future<Process> start( + Future<io.Process> start( String executable, List<String> arguments, { String workingDirectory, Map<String, String> environment, - ProcessStartMode mode: ProcessStartMode.NORMAL, + io.ProcessStartMode mode: io.ProcessStartMode.NORMAL, }) async { - Process process = await _delegate.start( + io.Process process = await _delegate.start( executable, arguments, workingDirectory: workingDirectory, @@ -163,15 +164,15 @@ } @override - Future<ProcessResult> run( + Future<io.ProcessResult> run( String executable, List<String> arguments, { String workingDirectory, Map<String, String> environment, - Encoding stdoutEncoding: SYSTEM_ENCODING, - Encoding stderrEncoding: SYSTEM_ENCODING, + Encoding stdoutEncoding: io.SYSTEM_ENCODING, + Encoding stderrEncoding: io.SYSTEM_ENCODING, }) async { - ProcessResult result = await _delegate.run( + io.ProcessResult result = await _delegate.run( executable, arguments, workingDirectory: workingDirectory, @@ -201,7 +202,7 @@ Future<Null> _recordData(dynamic data, Encoding encoding, String basename) async { String path = '${_tmpDir.path}/$basename'; - File file = await new File(path).create(); + File file = await fs.file(path).create(); RandomAccessFile recording = await file.open(mode: FileMode.WRITE); try { if (encoding == null) @@ -215,15 +216,15 @@ } @override - ProcessResult runSync( + io.ProcessResult runSync( String executable, List<String> arguments, { String workingDirectory, Map<String, String> environment, - Encoding stdoutEncoding: SYSTEM_ENCODING, - Encoding stderrEncoding: SYSTEM_ENCODING, + Encoding stdoutEncoding: io.SYSTEM_ENCODING, + Encoding stderrEncoding: io.SYSTEM_ENCODING, }) { - ProcessResult result = _delegate.runSync( + io.ProcessResult result = _delegate.runSync( executable, arguments, workingDirectory: workingDirectory, @@ -253,7 +254,7 @@ void _recordDataSync(dynamic data, Encoding encoding, String basename) { String path = '${_tmpDir.path}/$basename'; - File file = new File(path)..createSync(); + File file = fs.file(path)..createSync(); RandomAccessFile recording = file.openSync(mode: FileMode.WRITE); try { if (encoding == null) @@ -267,7 +268,7 @@ } @override - bool killPid(int pid, [ProcessSignal signal = ProcessSignal.SIGTERM]) { + bool killPid(int pid, [io.ProcessSignal signal = io.ProcessSignal.SIGTERM]) { return _delegate.killPid(pid, signal); } @@ -280,7 +281,7 @@ List<String> arguments, String workingDirectory, Map<String, String> environment, - ProcessStartMode mode, + io.ProcessStartMode mode, Encoding stdoutEncoding, Encoding stderrEncoding, int exitCode, @@ -331,7 +332,7 @@ await _waitForRunningProcessesToExitWithTimeout( onTimeout: (int pid, Map<String, dynamic> manifestEntry) { manifestEntry['daemon'] = true; - Process.killPid(pid); + io.Process.killPid(pid); }); // Now that we explicitly signalled the processes that timed out asking // them to shutdown, wait one more time for those processes to exit. @@ -358,7 +359,7 @@ Future<Null> _writeManifestToDisk() async { JsonEncoder encoder = new JsonEncoder.withIndent(' '); String encodedManifest = encoder.convert(_manifest); - File manifestFile = await new File('${_tmpDir.path}/$_kManifestName').create(); + File manifestFile = await fs.file('${_tmpDir.path}/$_kManifestName').create(); await manifestFile.writeAsString(encodedManifest, flush: true); } @@ -373,18 +374,18 @@ /// in the [new RecordingProcessManager] constructor. Future<File> _createZipFile() async { File zipFile; - String recordTo = _recordTo ?? Directory.current.path; - if (FileSystemEntity.typeSync(recordTo) == FileSystemEntityType.DIRECTORY) { - zipFile = new File('$recordTo/$kDefaultRecordTo'); + String recordTo = _recordTo ?? fs.currentDirectory.path; + if (fs.isDirectorySync(recordTo)) { + zipFile = fs.file('$recordTo/$kDefaultRecordTo'); } else { - zipFile = new File(recordTo); - await new Directory(path.dirname(zipFile.path)).create(recursive: true); + zipFile = fs.file(recordTo); + await fs.directory(path.dirname(zipFile.path)).create(recursive: true); } // Resolve collisions. String basename = path.basename(zipFile.path); for (int i = 1; zipFile.existsSync(); i++) { - assert(FileSystemEntity.isFileSync(zipFile.path)); + assert(fs.isFileSync(zipFile.path)); String disambiguator = new NumberFormat('00').format(i); String newBasename = basename; if (basename.contains('.')) { @@ -394,7 +395,7 @@ } else { newBasename += '-$disambiguator'; } - zipFile = new File(path.join(path.dirname(zipFile.path), newBasename)); + zipFile = fs.file(path.join(path.dirname(zipFile.path), newBasename)); } return await zipFile.create(); @@ -404,7 +405,7 @@ Future<List<int>> _getRecordingZipBytes() async { Archive archive = new Archive(); Stream<FileSystemEntity> files = _tmpDir.list(recursive: true) - .where((FileSystemEntity entity) => FileSystemEntity.isFileSync(entity.path)); + .where((FileSystemEntity entity) => fs.isFileSync(entity.path)); List<Future<dynamic>> addAllFilesToArchive = <Future<dynamic>>[]; await files.forEach((FileSystemEntity entity) { File file = entity; @@ -437,8 +438,8 @@ /// A [Process] implementation that records `stdout` and `stderr` stream events /// to disk before forwarding them on to the underlying stream listener. -class _RecordingProcess implements Process { - final Process delegate; +class _RecordingProcess implements io.Process { + final io.Process delegate; final String basename; final RecordingProcessManager manager; @@ -464,7 +465,7 @@ String suffix, ) async { String path = '${manager._tmpDir.path}/$basename.$suffix'; - File file = await new File(path).create(); + File file = await fs.file(path).create(); RandomAccessFile recording = await file.open(mode: FileMode.WRITE); stream.listen( (List<int> data) { @@ -506,7 +507,7 @@ } @override - IOSink get stdin { + io.IOSink get stdin { // We don't currently support recording `stdin`. return delegate.stdin; } @@ -515,7 +516,7 @@ int get pid => delegate.pid; @override - bool kill([ProcessSignal signal = ProcessSignal.SIGTERM]) => delegate.kill(signal); + bool kill([io.ProcessSignal signal = io.ProcessSignal.SIGTERM]) => delegate.kill(signal); } /// A [ProcessManager] implementation that mocks out all process invocations @@ -572,22 +573,22 @@ /// directory, an [ArgumentError] will be thrown. static Future<ReplayProcessManager> create(String location) async { Directory dir; - switch (FileSystemEntity.typeSync(location)) { + switch (fs.typeSync(location)) { case FileSystemEntityType.FILE: - dir = await Directory.systemTemp.createTemp('flutter_tools_'); - os.unzip(new File(location), dir); + dir = await fs.systemTempDirectory.createTemp('flutter_tools_'); + os.unzip(fs.file(location), dir); addShutdownHook(() async { await dir.delete(recursive: true); }); break; case FileSystemEntityType.DIRECTORY: - dir = new Directory(location); + dir = fs.directory(location); break; case FileSystemEntityType.NOT_FOUND: throw new ArgumentError.value(location, 'location', 'Does not exist'); } - File manifestFile = new File(path.join(dir.path, _kManifestName)); + File manifestFile = fs.file(path.join(dir.path, _kManifestName)); if (!manifestFile.existsSync()) { // We use the existence of the manifest as a proxy for this being a // valid replay directory. Namely, we don't validate the structure of the @@ -608,12 +609,12 @@ } @override - Future<Process> start( + Future<io.Process> start( String executable, List<String> arguments, { String workingDirectory, Map<String, String> environment, - ProcessStartMode mode: ProcessStartMode.NORMAL, + io.ProcessStartMode mode: io.ProcessStartMode.NORMAL, }) async { Map<String, dynamic> entry = _popEntry(executable, arguments, mode: mode); _ReplayProcessResult result = await _ReplayProcessResult.create( @@ -622,13 +623,13 @@ } @override - Future<ProcessResult> run( + Future<io.ProcessResult> run( String executable, List<String> arguments, { String workingDirectory, Map<String, String> environment, - Encoding stdoutEncoding: SYSTEM_ENCODING, - Encoding stderrEncoding: SYSTEM_ENCODING, + Encoding stdoutEncoding: io.SYSTEM_ENCODING, + Encoding stderrEncoding: io.SYSTEM_ENCODING, }) async { Map<String, dynamic> entry = _popEntry(executable, arguments, stdoutEncoding: stdoutEncoding, stderrEncoding: stderrEncoding); @@ -637,13 +638,13 @@ } @override - ProcessResult runSync( + io.ProcessResult runSync( String executable, List<String> arguments, { String workingDirectory, Map<String, String> environment, - Encoding stdoutEncoding: SYSTEM_ENCODING, - Encoding stderrEncoding: SYSTEM_ENCODING, + Encoding stdoutEncoding: io.SYSTEM_ENCODING, + Encoding stderrEncoding: io.SYSTEM_ENCODING, }) { Map<String, dynamic> entry = _popEntry(executable, arguments, stdoutEncoding: stdoutEncoding, stderrEncoding: stderrEncoding); @@ -655,7 +656,7 @@ /// the specified process arguments. Once found, it marks the manifest entry /// as having been invoked and thus not eligible for invocation again. Map<String, dynamic> _popEntry(String executable, List<String> arguments, { - ProcessStartMode mode, + io.ProcessStartMode mode, Encoding stdoutEncoding, Encoding stderrEncoding, }) { @@ -674,14 +675,14 @@ ); if (entry == null) - throw new ProcessException(executable, arguments, 'No matching invocation found'); + throw new io.ProcessException(executable, arguments, 'No matching invocation found'); entry['invoked'] = true; return entry; } @override - bool killPid(int pid, [ProcessSignal signal = ProcessSignal.SIGTERM]) { + bool killPid(int pid, [io.ProcessSignal signal = io.ProcessSignal.SIGTERM]) { throw new UnsupportedError( "$runtimeType.killPid() has not been implemented because at the time " "of its writing, it wasn't needed. If you're hitting this error, you " @@ -691,7 +692,7 @@ /// A [ProcessResult] implementation that derives its data from a recording /// fragment. -class _ReplayProcessResult implements ProcessResult { +class _ReplayProcessResult implements io.ProcessResult { @override final int pid; @@ -721,12 +722,12 @@ stderr: await _getData('$basePath.stderr', entry['stderrEncoding']), ); } catch (e) { - throw new ProcessException(executable, arguments, e.toString()); + throw new io.ProcessException(executable, arguments, e.toString()); } } static Future<dynamic> _getData(String path, String encoding) async { - File file = new File(path); + File file = fs.file(path); return encoding == null ? await file.readAsBytes() : await file.readAsString(encoding: _getEncodingByName(encoding)); @@ -747,12 +748,12 @@ stderr: _getDataSync('$basePath.stderr', entry['stderrEncoding']), ); } catch (e) { - throw new ProcessException(executable, arguments, e.toString()); + throw new io.ProcessException(executable, arguments, e.toString()); } } static dynamic _getDataSync(String path, String encoding) { - File file = new File(path); + File file = fs.file(path); return encoding == null ? file.readAsBytesSync() : file.readAsStringSync(encoding: _getEncodingByName(encoding)); @@ -760,13 +761,13 @@ static Encoding _getEncodingByName(String encoding) { if (encoding == 'system') - return const SystemEncoding(); + return const io.SystemEncoding(); else if (encoding != null) return Encoding.getByName(encoding); return null; } - Process asProcess(bool daemon) { + io.Process asProcess(bool daemon) { assert(stdout is List<int>); assert(stderr is List<int>); return new _ReplayProcess(this, daemon); @@ -774,7 +775,7 @@ } /// A [Process] implementation derives its data from a recording fragment. -class _ReplayProcess implements Process { +class _ReplayProcess implements io.Process { @override final int pid; @@ -830,10 +831,10 @@ set exitCode(Future<int> exitCode) => throw new UnsupportedError('set exitCode'); @override - IOSink get stdin => throw new UnimplementedError(); + io.IOSink get stdin => throw new UnimplementedError(); @override - bool kill([ProcessSignal signal = ProcessSignal.SIGTERM]) { + bool kill([io.ProcessSignal signal = io.ProcessSignal.SIGTERM]) { if (!_exitCodeCompleter.isCompleted) { _stdoutController.close(); _stderrController.close();
diff --git a/packages/flutter_tools/lib/src/base/utils.dart b/packages/flutter_tools/lib/src/base/utils.dart index 2d86985..8af34bd 100644 --- a/packages/flutter_tools/lib/src/base/utils.dart +++ b/packages/flutter_tools/lib/src/base/utils.dart
@@ -4,19 +4,21 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:io'; +import 'dart:io' as io; import 'dart:math' show Random; import 'package:crypto/crypto.dart'; import 'package:path/path.dart' as path; +import 'file_system.dart'; + bool get isRunningOnBot { // https://docs.travis-ci.com/user/environment-variables/#Default-Environment-Variables // CHROME_HEADLESS is one property set on Flutter's Chrome Infra bots. return - Platform.environment['TRAVIS'] == 'true' || - Platform.environment['CONTINUOUS_INTEGRATION'] == 'true' || - Platform.environment['CHROME_HEADLESS'] == '1'; + io.Platform.environment['TRAVIS'] == 'true' || + io.Platform.environment['CONTINUOUS_INTEGRATION'] == 'true' || + io.Platform.environment['CHROME_HEADLESS'] == '1'; } String hex(List<int> bytes) { @@ -63,7 +65,7 @@ while (true) { String name = '${baseName}_${i.toString().padLeft(2, '0')}.$ext'; - File file = new File(path.join(dir.path, name)); + File file = fs.file(path.join(dir.path, name)); if (!file.existsSync()) return file; i++; @@ -91,7 +93,7 @@ /// Return a relative path if [fullPath] is contained by the cwd, else return an /// absolute path. String getDisplayPath(String fullPath) { - String cwd = Directory.current.path + Platform.pathSeparator; + String cwd = fs.currentDirectory.path + io.Platform.pathSeparator; return fullPath.startsWith(cwd) ? fullPath.substring(cwd.length) : fullPath; }
diff --git a/packages/flutter_tools/lib/src/cache.dart b/packages/flutter_tools/lib/src/cache.dart index 7aee1d5..9c898a4 100644 --- a/packages/flutter_tools/lib/src/cache.dart +++ b/packages/flutter_tools/lib/src/cache.dart
@@ -3,13 +3,14 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; +import 'dart:io' as io; import 'package:flutter_tools/src/dart/pub.dart'; import 'package:flutter_tools/src/dart/summary.dart'; import 'package:path/path.dart' as path; import 'base/context.dart'; +import 'base/file_system.dart'; import 'base/logger.dart'; import 'base/net.dart'; import 'base/os.dart'; @@ -53,7 +54,7 @@ if (!_lockEnabled) return null; assert(_lock == null); - _lock = new File(path.join(flutterRoot, 'bin', 'cache', 'lockfile')).openSync(mode: FileMode.WRITE); + _lock = fs.file(path.join(flutterRoot, 'bin', 'cache', 'lockfile')).openSync(mode: FileMode.WRITE); bool locked = false; bool printed = false; while (!locked) { @@ -83,7 +84,7 @@ static String get dartSdkVersion { if (_dartSdkVersion == null) { - _dartSdkVersion = Platform.version; + _dartSdkVersion = io.Platform.version; } return _dartSdkVersion; } @@ -92,7 +93,7 @@ static String get engineRevision { if (_engineRevision == null) { - File revisionFile = new File(path.join(flutterRoot, 'bin', 'internal', 'engine.version')); + File revisionFile = fs.file(path.join(flutterRoot, 'bin', 'internal', 'engine.version')); if (revisionFile.existsSync()) _engineRevision = revisionFile.readAsStringSync().trim(); } @@ -104,14 +105,14 @@ /// Return the top-level directory in the cache; this is `bin/cache`. Directory getRoot() { if (_rootOverride != null) - return new Directory(path.join(_rootOverride.path, 'bin', 'cache')); + return fs.directory(path.join(_rootOverride.path, 'bin', 'cache')); else - return new Directory(path.join(flutterRoot, 'bin', 'cache')); + return fs.directory(path.join(flutterRoot, 'bin', 'cache')); } /// Return a directory in the cache dir. For `pkg`, this will return `bin/cache/pkg`. Directory getCacheDir(String name) { - Directory dir = new Directory(path.join(getRoot().path, name)); + Directory dir = fs.directory(path.join(getRoot().path, name)); if (!dir.existsSync()) dir.createSync(recursive: true); return dir; @@ -123,11 +124,11 @@ /// Get a named directory from with the cache's artifact directory; for example, /// `material_fonts` would return `bin/cache/artifacts/material_fonts`. Directory getArtifactDirectory(String name) { - return new Directory(path.join(getCacheArtifacts().path, name)); + return fs.directory(path.join(getCacheArtifacts().path, name)); } String getVersionFor(String artifactName) { - File versionFile = new File(path.join(_rootOverride?.path ?? flutterRoot, 'bin', 'internal', '$artifactName.version')); + File versionFile = fs.file(path.join(_rootOverride?.path ?? flutterRoot, 'bin', 'internal', '$artifactName.version')); return versionFile.existsSync() ? versionFile.readAsStringSync().trim() : null; } @@ -141,7 +142,7 @@ } File getStampFileFor(String artifactName) { - return new File(path.join(getRoot().path, '$artifactName.stamp')); + return fs.file(path.join(getRoot().path, '$artifactName.stamp')); } bool isUpToDate() { @@ -157,11 +158,11 @@ Uri url = Uri.parse(urlStr); Directory thirdPartyDir = getArtifactDirectory('third_party'); - Directory serviceDir = new Directory(path.join(thirdPartyDir.path, serviceName)); + Directory serviceDir = fs.directory(path.join(thirdPartyDir.path, serviceName)); if (!serviceDir.existsSync()) serviceDir.createSync(recursive: true); - File cachedFile = new File(path.join(serviceDir.path, url.pathSegments.last)); + File cachedFile = fs.file(path.join(serviceDir.path, url.pathSegments.last)); if (!cachedFile.existsSync()) { try { await _downloadFileToCache(url, cachedFile, unzip); @@ -198,7 +199,7 @@ if (location is Directory && !location.existsSync()) location.createSync(recursive: true); - File tempFile = new File(path.join(Directory.systemTemp.path, '${url.toString().hashCode}.zip')); + File tempFile = fs.file(path.join(fs.systemTempDirectory.path, '${url.toString().hashCode}.zip')); tempFile.writeAsBytesSync(fileBytes, flush: true); os.unzip(tempFile, location); tempFile.deleteSync(); @@ -263,9 +264,9 @@ if (cache.includeAllPlatforms) dirs.addAll(<String>['ios', 'ios-profile', 'ios-release', 'linux-x64']); - else if (Platform.isMacOS) + else if (io.Platform.isMacOS) dirs.addAll(<String>['ios', 'ios-profile', 'ios-release']); - else if (Platform.isLinux) + else if (io.Platform.isLinux) dirs.add('linux-x64'); return dirs; @@ -277,9 +278,9 @@ return <List<String>>[] ..addAll(_osxToolsDirs) ..addAll(_linuxToolsDirs); - else if (Platform.isMacOS) + else if (io.Platform.isMacOS) return _osxToolsDirs; - else if (Platform.isLinux) + else if (io.Platform.isLinux) return _linuxToolsDirs; else return <List<String>>[]; @@ -302,24 +303,24 @@ for (String pkgName in _getPackageDirs()) { String pkgPath = path.join(pkgDir.path, pkgName); String dotPackagesPath = path.join(pkgPath, '.packages'); - if (!new Directory(pkgPath).existsSync()) + if (!fs.directory(pkgPath).existsSync()) return false; - if (!new File(dotPackagesPath).existsSync()) + if (!fs.file(dotPackagesPath).existsSync()) return false; } - if (!new File(path.join(pkgDir.path, kSkyEngine, kSdkBundle)).existsSync()) + if (!fs.file(path.join(pkgDir.path, kSkyEngine, kSdkBundle)).existsSync()) return false; Directory engineDir = cache.getArtifactDirectory(kName); for (String dirName in _getEngineDirs()) { - Directory dir = new Directory(path.join(engineDir.path, dirName)); + Directory dir = fs.directory(path.join(engineDir.path, dirName)); if (!dir.existsSync()) return false; } for (List<String> toolsDir in _getToolsDirs()) { - Directory dir = new Directory(path.join(engineDir.path, toolsDir[0])); + Directory dir = fs.directory(path.join(engineDir.path, toolsDir[0])); if (!dir.existsSync()) return false; } @@ -334,7 +335,7 @@ Directory pkgDir = cache.getCacheDir('pkg'); for (String pkgName in _getPackageDirs()) { String pkgPath = path.join(pkgDir.path, pkgName); - Directory dir = new Directory(pkgPath); + Directory dir = fs.directory(pkgPath); if (dir.existsSync()) dir.deleteSync(recursive: true); await _downloadItem('Downloading package $pkgName...', url + pkgName + '.zip', pkgDir); @@ -354,12 +355,12 @@ engineDir.deleteSync(recursive: true); for (String dirName in _getEngineDirs()) { - Directory dir = new Directory(path.join(engineDir.path, dirName)); + Directory dir = fs.directory(path.join(engineDir.path, dirName)); await _downloadItem('Downloading engine artifacts $dirName...', url + dirName + '/artifacts.zip', dir); - File frameworkZip = new File(path.join(dir.path, 'Flutter.framework.zip')); + File frameworkZip = fs.file(path.join(dir.path, 'Flutter.framework.zip')); if (frameworkZip.existsSync()) { - Directory framework = new Directory(path.join(dir.path, 'Flutter.framework')); + Directory framework = fs.directory(path.join(dir.path, 'Flutter.framework')); framework.createSync(); os.unzip(frameworkZip, framework); } @@ -368,7 +369,7 @@ for (List<String> toolsDir in _getToolsDirs()) { String cacheDir = toolsDir[0]; String urlPath = toolsDir[1]; - Directory dir = new Directory(path.join(engineDir.path, cacheDir)); + Directory dir = fs.directory(path.join(engineDir.path, cacheDir)); await _downloadItem('Downloading $cacheDir tools...', url + urlPath, dir); _makeFilesExecutable(dir); }
diff --git a/packages/flutter_tools/lib/src/commands/analyze.dart b/packages/flutter_tools/lib/src/commands/analyze.dart index 9b34e38..f46ce8d 100644 --- a/packages/flutter_tools/lib/src/commands/analyze.dart +++ b/packages/flutter_tools/lib/src/commands/analyze.dart
@@ -3,8 +3,8 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; +import '../base/file_system.dart'; import '../runner/flutter_command.dart'; import 'analyze_continuously.dart'; import 'analyze_once.dart'; @@ -46,7 +46,7 @@ return false; // Or we're not in a project directory. - if (!new File('pubspec.yaml').existsSync()) + if (!fs.file('pubspec.yaml').existsSync()) return false; return super.shouldRunPub;
diff --git a/packages/flutter_tools/lib/src/commands/analyze_base.dart b/packages/flutter_tools/lib/src/commands/analyze_base.dart index 2e3ea36..69768ad 100644 --- a/packages/flutter_tools/lib/src/commands/analyze_base.dart +++ b/packages/flutter_tools/lib/src/commands/analyze_base.dart
@@ -3,11 +3,12 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; +import 'dart:io' as io; import 'package:args/args.dart'; import 'package:path/path.dart' as path; +import '../base/file_system.dart'; import '../base/utils.dart'; import '../cache.dart'; import '../globals.dart'; @@ -25,7 +26,7 @@ void dumpErrors(Iterable<String> errors) { if (argResults['write'] != null) { try { - final RandomAccessFile resultsFile = new File(argResults['write']).openSync(mode: FileMode.WRITE); + final RandomAccessFile resultsFile = fs.file(argResults['write']).openSync(mode: FileMode.WRITE); try { resultsFile.lockSync(); resultsFile.writeStringSync(errors.join('\n')); @@ -45,7 +46,7 @@ 'issues': errorCount, 'missingDartDocs': membersMissingDocumentation }; - new File(benchmarkOut).writeAsStringSync(toPrettyJson(data)); + fs.file(benchmarkOut).writeAsStringSync(toPrettyJson(data)); printStatus('Analysis benchmark written to $benchmarkOut ($data).'); } @@ -58,11 +59,11 @@ if (fileList == null || fileList.isEmpty) fileList = <String>[path.current]; String root = path.normalize(path.absolute(Cache.flutterRoot)); - String prefix = root + Platform.pathSeparator; + String prefix = root + io.Platform.pathSeparator; for (String file in fileList) { file = path.normalize(path.absolute(file)); if (file == root || file.startsWith(prefix)) return true; } return false; -} \ No newline at end of file +}
diff --git a/packages/flutter_tools/lib/src/commands/analyze_continuously.dart b/packages/flutter_tools/lib/src/commands/analyze_continuously.dart index b8e5534..23ce702 100644 --- a/packages/flutter_tools/lib/src/commands/analyze_continuously.dart +++ b/packages/flutter_tools/lib/src/commands/analyze_continuously.dart
@@ -4,12 +4,13 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:io'; +import 'dart:io' as io; import 'package:args/args.dart'; import 'package:path/path.dart' as path; import '../base/common.dart'; +import '../base/file_system.dart'; import '../base/logger.dart'; import '../base/process_manager.dart'; import '../base/utils.dart'; @@ -42,8 +43,8 @@ for (String projectPath in directories) printTrace(' ${path.relative(projectPath)}'); } else { - directories = <String>[Directory.current.path]; - analysisTarget = Directory.current.path; + directories = <String>[fs.currentDirectory.path]; + analysisTarget = fs.currentDirectory.path; } AnalysisServer server = new AnalysisServer(dartSdkPath, directories); @@ -78,7 +79,7 @@ // Remove errors for deleted files, sort, and print errors. final List<AnalysisError> errors = <AnalysisError>[]; for (String path in analysisErrors.keys.toList()) { - if (FileSystemEntity.isFileSync(path)) { + if (fs.isFileSync(path)) { errors.addAll(analysisErrors[path]); } else { analysisErrors.remove(path); @@ -149,7 +150,7 @@ final String sdk; final List<String> directories; - Process _process; + io.Process _process; StreamController<bool> _analyzingController = new StreamController<bool>.broadcast(); StreamController<FileAnalysisErrors> _errorsController = new StreamController<FileAnalysisErrors>.broadcast();
diff --git a/packages/flutter_tools/lib/src/commands/analyze_once.dart b/packages/flutter_tools/lib/src/commands/analyze_once.dart index 7b4c266..8792330 100644 --- a/packages/flutter_tools/lib/src/commands/analyze_once.dart +++ b/packages/flutter_tools/lib/src/commands/analyze_once.dart
@@ -4,13 +4,13 @@ import 'dart:async'; import 'dart:collection'; -import 'dart:io'; import 'package:args/args.dart'; import 'package:path/path.dart' as path; import 'package:yaml/yaml.dart' as yaml; import '../base/common.dart'; +import '../base/file_system.dart'; import '../cache.dart'; import '../dart/analysis.dart'; import '../globals.dart'; @@ -36,11 +36,11 @@ for (String file in argResults.rest.toList()) { file = path.normalize(path.absolute(file)); String root = path.rootPrefix(file); - dartFiles.add(new File(file)); + dartFiles.add(fs.file(file)); while (file != root) { file = path.dirname(file); - if (FileSystemEntity.isFileSync(path.join(file, 'pubspec.yaml'))) { - pubSpecDirectories.add(new Directory(file)); + if (fs.isFileSync(path.join(file, 'pubspec.yaml'))) { + pubSpecDirectories.add(fs.directory(file)); break; } } @@ -54,7 +54,7 @@ if (currentDirectory && !flutterRepo) { // ./*.dart - Directory currentDirectory = new Directory('.'); + Directory currentDirectory = fs.directory('.'); bool foundOne = false; for (FileSystemEntity entry in currentDirectory.listSync()) { if (isDartFile(entry)) { @@ -68,7 +68,7 @@ if (currentPackage && !flutterRepo) { // **/.*dart - Directory currentDirectory = new Directory('.'); + Directory currentDirectory = fs.directory('.'); _collectDartFiles(currentDirectory, dartFiles); pubSpecDirectories.add(currentDirectory); } @@ -89,18 +89,18 @@ PackageDependencyTracker dependencies = new PackageDependencyTracker(); for (Directory directory in pubSpecDirectories) { String pubSpecYamlPath = path.join(directory.path, 'pubspec.yaml'); - File pubSpecYamlFile = new File(pubSpecYamlPath); + File pubSpecYamlFile = fs.file(pubSpecYamlPath); if (pubSpecYamlFile.existsSync()) { // we are analyzing the actual canonical source for this package; // make sure we remember that, in case all the packages are actually // pointing elsewhere somehow. - yaml.YamlMap pubSpecYaml = yaml.loadYaml(new File(pubSpecYamlPath).readAsStringSync()); + yaml.YamlMap pubSpecYaml = yaml.loadYaml(fs.file(pubSpecYamlPath).readAsStringSync()); String packageName = pubSpecYaml['name']; String packagePath = path.normalize(path.absolute(path.join(directory.path, 'lib'))); dependencies.addCanonicalCase(packageName, packagePath, pubSpecYamlPath); } String dotPackagesPath = path.join(directory.path, '.packages'); - File dotPackages = new File(dotPackagesPath); + File dotPackages = fs.file(dotPackagesPath); if (dotPackages.existsSync()) { // this directory has opinions about what we should be using dotPackages @@ -228,7 +228,7 @@ List<File> _collectDartFiles(Directory dir, List<File> collected, {FileFilter exclude}) { // Bail out in case of a .dartignore. - if (FileSystemEntity.isFileSync(path.join(path.dirname(dir.path), '.dartignore'))) + if (fs.isFileSync(path.join(path.dirname(dir.path), '.dartignore'))) return collected; for (FileSystemEntity entity in dir.listSync(recursive: false, followLinks: false)) {
diff --git a/packages/flutter_tools/lib/src/commands/build.dart b/packages/flutter_tools/lib/src/commands/build.dart index 21eff64..1957d85 100644 --- a/packages/flutter_tools/lib/src/commands/build.dart +++ b/packages/flutter_tools/lib/src/commands/build.dart
@@ -3,10 +3,11 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; +import 'dart:io' as io; import 'package:meta/meta.dart'; +import '../base/file_system.dart'; import '../build_info.dart'; import '../globals.dart'; import '../runner/flutter_command.dart'; @@ -54,14 +55,14 @@ @mustCallSuper Future<Null> runCommand() async { if (isRunningOnBot) { - File dotPackages = new File('.packages'); + File dotPackages = fs.file('.packages'); printStatus('Contents of .packages:'); if (dotPackages.existsSync()) printStatus(dotPackages.readAsStringSync()); else printError('File not found: ${dotPackages.absolute.path}'); - File pubspecLock = new File('pubspec.lock'); + File pubspecLock = fs.file('pubspec.lock'); printStatus('Contents of pubspec.lock:'); if (pubspecLock.existsSync()) printStatus(pubspecLock.readAsStringSync()); @@ -86,8 +87,8 @@ @override Future<Null> runCommand() async { - Directory buildDir = new Directory(getBuildDirectory()); - printStatus("Deleting '${buildDir.path}${Platform.pathSeparator}'."); + Directory buildDir = fs.directory(getBuildDirectory()); + printStatus("Deleting '${buildDir.path}${io.Platform.pathSeparator}'."); if (!buildDir.existsSync()) return;
diff --git a/packages/flutter_tools/lib/src/commands/build_aot.dart b/packages/flutter_tools/lib/src/commands/build_aot.dart index e5b31a9..f8e8c44 100644 --- a/packages/flutter_tools/lib/src/commands/build_aot.dart +++ b/packages/flutter_tools/lib/src/commands/build_aot.dart
@@ -3,11 +3,12 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; +import 'dart:io' as io; import 'package:path/path.dart' as path; import '../base/common.dart'; +import '../base/file_system.dart'; import '../base/logger.dart'; import '../base/process.dart'; import '../base/utils.dart'; @@ -64,7 +65,7 @@ if (outputPath == null) throwToolExit(null); - printStatus('Built to $outputPath${Platform.pathSeparator}.'); + printStatus('Built to $outputPath${io.Platform.pathSeparator}.'); } } @@ -142,7 +143,7 @@ } } - Directory outputDir = new Directory(outputPath); + Directory outputDir = fs.directory(outputPath); outputDir.createSync(recursive: true); String vmIsolateSnapshot = path.join(outputDir.path, 'snapshot_aot_vmisolate'); String isolateSnapshot = path.join(outputDir.path, 'snapshot_aot_isolate'); @@ -201,7 +202,7 @@ assert(false); } - List<String> missingFiles = filePaths.where((String p) => !FileSystemEntity.isFileSync(p)).toList(); + List<String> missingFiles = filePaths.where((String p) => !fs.isFileSync(p)).toList(); if (missingFiles.isNotEmpty) { printError('Missing files: $missingFiles'); return null;
diff --git a/packages/flutter_tools/lib/src/commands/build_apk.dart b/packages/flutter_tools/lib/src/commands/build_apk.dart index 114b862..b6a1b8f 100644 --- a/packages/flutter_tools/lib/src/commands/build_apk.dart +++ b/packages/flutter_tools/lib/src/commands/build_apk.dart
@@ -4,14 +4,13 @@ import 'dart:async'; import 'dart:convert' show JSON; -import 'dart:io'; import 'package:path/path.dart' as path; import '../android/android_sdk.dart'; import '../android/gradle.dart'; import '../base/common.dart'; -import '../base/file_system.dart' show ensureDirectoryExists; +import '../base/file_system.dart'; import '../base/logger.dart'; import '../base/os.dart'; import '../base/process.dart'; @@ -49,7 +48,7 @@ Directory _assetDir; _AssetBuilder(this.outDir, String assetDirName) { - _assetDir = new Directory('${outDir.path}/$assetDirName'); + _assetDir = fs.directory('${outDir.path}/$assetDirName'); _assetDir.createSync(recursive: true); } @@ -73,10 +72,10 @@ File _jarsigner; _ApkBuilder(this.sdk) { - _androidJar = new File(sdk.androidJarPath); - _aapt = new File(sdk.aaptPath); - _dx = new File(sdk.dxPath); - _zipalign = new File(sdk.zipalignPath); + _androidJar = fs.file(sdk.androidJarPath); + _aapt = fs.file(sdk.aaptPath); + _dx = fs.file(sdk.dxPath); + _zipalign = fs.file(sdk.zipalignPath); _jarsigner = os.which('jarsigner'); } @@ -284,8 +283,8 @@ Map<String, File> extraFiles ) async { _ApkComponents components = new _ApkComponents(); - components.manifest = new File(manifest); - components.resources = resources == null ? null : new Directory(resources); + components.manifest = fs.file(manifest); + components.resources = resources == null ? null : fs.directory(resources); components.extraFiles = extraFiles != null ? extraFiles : <String, File>{}; if (tools.isLocalEngine) { @@ -293,21 +292,21 @@ String enginePath = tools.engineSrcPath; String buildDir = tools.getEngineArtifactsDirectory(platform, buildMode).path; - components.icuData = new File('$enginePath/third_party/icu/android/icudtl.dat'); + components.icuData = fs.file('$enginePath/third_party/icu/android/icudtl.dat'); components.jars = <File>[ - new File('$buildDir/gen/flutter/shell/platform/android/android/classes.dex.jar') + fs.file('$buildDir/gen/flutter/shell/platform/android/android/classes.dex.jar') ]; - components.libSkyShell = new File('$buildDir/gen/flutter/shell/platform/android/android/android/libs/$abiDir/libsky_shell.so'); - components.debugKeystore = new File('$enginePath/build/android/ant/chromium-debug.keystore'); + components.libSkyShell = fs.file('$buildDir/gen/flutter/shell/platform/android/android/android/libs/$abiDir/libsky_shell.so'); + components.debugKeystore = fs.file('$enginePath/build/android/ant/chromium-debug.keystore'); } else { Directory artifacts = tools.getEngineArtifactsDirectory(platform, buildMode); - components.icuData = new File(path.join(artifacts.path, 'icudtl.dat')); + components.icuData = fs.file(path.join(artifacts.path, 'icudtl.dat')); components.jars = <File>[ - new File(path.join(artifacts.path, 'classes.dex.jar')) + fs.file(path.join(artifacts.path, 'classes.dex.jar')) ]; - components.libSkyShell = new File(path.join(artifacts.path, 'libsky_shell.so')); - components.debugKeystore = new File(path.join(artifacts.path, 'chromium-debug.keystore')); + components.libSkyShell = fs.file(path.join(artifacts.path, 'libsky_shell.so')); + components.debugKeystore = fs.file(path.join(artifacts.path, 'chromium-debug.keystore')); } await parseServiceConfigs(components.services, jars: components.jars); @@ -338,7 +337,7 @@ assert(platform != null); assert(buildMode != null); - Directory tempDir = Directory.systemTemp.createTempSync('flutter_tools'); + Directory tempDir = fs.systemTempDirectory.createTempSync('flutter_tools'); printTrace('Building APK; buildMode: ${getModeName(buildMode)}.'); @@ -350,7 +349,7 @@ return 1; } - File classesDex = new File('${tempDir.path}/classes.dex'); + File classesDex = fs.file('${tempDir.path}/classes.dex'); builder.compileClassesDex(classesDex, components.jars); File servicesConfig = @@ -358,7 +357,7 @@ _AssetBuilder assetBuilder = new _AssetBuilder(tempDir, 'assets'); assetBuilder.add(components.icuData, 'icudtl.dat'); - assetBuilder.add(new File(flxPath), 'app.flx'); + assetBuilder.add(fs.file(flxPath), 'app.flx'); assetBuilder.add(servicesConfig, 'services.json'); _AssetBuilder artifactBuilder = new _AssetBuilder(tempDir, 'artifacts'); @@ -369,7 +368,7 @@ for (String relativePath in components.extraFiles.keys) artifactBuilder.add(components.extraFiles[relativePath], relativePath); - File unalignedApk = new File('${tempDir.path}/app.apk.unaligned'); + File unalignedApk = fs.file('${tempDir.path}/app.apk.unaligned'); builder.package( unalignedApk, components.manifest, assetBuilder.directory, artifactBuilder.directory, components.resources, buildMode @@ -379,12 +378,12 @@ if (signResult != 0) return signResult; - File finalApk = new File(outputFile); + File finalApk = fs.file(outputFile); ensureDirectoryExists(finalApk.path); builder.align(unalignedApk, finalApk); printTrace('calculateSha: $outputFile'); - File apkShaFile = new File('$outputFile.sha1'); + File apkShaFile = fs.file('$outputFile.sha1'); apkShaFile.writeAsStringSync(calculateSha(finalApk)); return 0; @@ -417,7 +416,7 @@ keyAlias = _kDebugKeystoreKeyAlias; keyPassword = _kDebugKeystorePassword; } else { - keystore = new File(keystoreInfo.keystore); + keystore = fs.file(keystoreInfo.keystore); keystorePassword = keystoreInfo.password ?? ''; keyAlias = keystoreInfo.keyAlias ?? ''; if (keystorePassword.isEmpty || keyAlias.isEmpty) { @@ -442,7 +441,7 @@ BuildMode buildMode, Map<String, File> extraFiles ) { - FileStat apkStat = FileStat.statSync(apkPath); + FileStat apkStat = fs.statSync(apkPath); // Note: This list of dependencies is imperfect, but will do for now. We // purposely don't include the .dart files, because we can load those // over the network without needing to rebuild (at least on Android). @@ -453,7 +452,7 @@ ]; dependencies.addAll(extraFiles.values.map((File file) => file.path)); Iterable<FileStat> dependenciesStat = - dependencies.map((String path) => FileStat.statSync(path)); + dependencies.map((String path) => fs.statSync(path)); if (apkStat.type == FileSystemEntityType.NOT_FOUND) return true; @@ -463,11 +462,11 @@ return true; } - if (!FileSystemEntity.isFileSync('$apkPath.sha1')) + if (!fs.isFileSync('$apkPath.sha1')) return true; String lastBuildType = _readBuildMeta(path.dirname(apkPath))['targetBuildType']; - String targetBuildType = _getTargetBuildTypeToken(platform, buildMode, new File(apkPath)); + String targetBuildType = _getTargetBuildTypeToken(platform, buildMode, fs.file(apkPath)); if (lastBuildType != targetBuildType) return true; @@ -499,8 +498,8 @@ } Map<String, File> extraFiles = <String, File>{}; - if (FileSystemEntity.isDirectorySync(_kDefaultAssetsPath)) { - Directory assetsDir = new Directory(_kDefaultAssetsPath); + if (fs.isDirectorySync(_kDefaultAssetsPath)) { + Directory assetsDir = fs.directory(_kDefaultAssetsPath); for (FileSystemEntity entity in assetsDir.listSync(recursive: true)) { if (entity is File) { String targetPath = entity.path.substring(assetsDir.path.length); @@ -520,10 +519,10 @@ } if (resources != null) { - if (!FileSystemEntity.isDirectorySync(resources)) + if (!fs.isDirectorySync(resources)) throwToolExit('Resources directory "$resources" not found.'); } else { - if (FileSystemEntity.isDirectorySync(_kDefaultResourcesPath)) + if (fs.isDirectorySync(_kDefaultResourcesPath)) resources = _kDefaultResourcesPath; } @@ -536,7 +535,7 @@ Status status = logger.startProgress('Building APK in ${getModeName(buildMode)} mode ($typeName)...'); if (flxPath != null && flxPath.isNotEmpty) { - if (!FileSystemEntity.isFileSync(flxPath)) { + if (!fs.isFileSync(flxPath)) { throwToolExit('FLX does not exist: $flxPath\n' '(Omit the --flx option to build the FLX automatically)'); } @@ -561,13 +560,13 @@ if (aotPath != null) { if (!isAotBuildMode(buildMode)) throwToolExit('AOT snapshot can not be used in build mode $buildMode'); - if (!FileSystemEntity.isDirectorySync(aotPath)) + if (!fs.isDirectorySync(aotPath)) throwToolExit('AOT snapshot does not exist: $aotPath'); for (String aotFilename in kAotSnapshotFiles) { String aotFilePath = path.join(aotPath, aotFilename); - if (!FileSystemEntity.isFileSync(aotFilePath)) + if (!fs.isFileSync(aotFilePath)) throwToolExit('Missing AOT snapshot file: $aotFilePath'); - components.extraFiles['assets/$aotFilename'] = new File(aotFilePath); + components.extraFiles['assets/$aotFilename'] = fs.file(aotFilePath); } } @@ -577,13 +576,13 @@ if (result != 0) throwToolExit('Build APK failed ($result)', exitCode: result); - File apkFile = new File(outputFile); + File apkFile = fs.file(outputFile); printTrace('Built $outputFile (${getSizeAsMB(apkFile.lengthSync())}).'); _writeBuildMetaEntry( path.dirname(outputFile), 'targetBuildType', - _getTargetBuildTypeToken(platform, buildMode, new File(outputFile)) + _getTargetBuildTypeToken(platform, buildMode, fs.file(outputFile)) ); } @@ -619,7 +618,7 @@ target: target ); } else { - if (!FileSystemEntity.isFileSync(_kDefaultAndroidManifestPath)) + if (!fs.isFileSync(_kDefaultAndroidManifestPath)) throwToolExit('Cannot build APK: missing $_kDefaultAndroidManifestPath.'); return await buildAndroid( @@ -632,7 +631,7 @@ } Map<String, dynamic> _readBuildMeta(String buildDirectoryPath) { - File buildMetaFile = new File(path.join(buildDirectoryPath, 'build_meta.json')); + File buildMetaFile = fs.file(path.join(buildDirectoryPath, 'build_meta.json')); if (buildMetaFile.existsSync()) return JSON.decode(buildMetaFile.readAsStringSync()); return <String, dynamic>{}; @@ -641,7 +640,7 @@ void _writeBuildMetaEntry(String buildDirectoryPath, String key, dynamic value) { Map<String, dynamic> meta = _readBuildMeta(buildDirectoryPath); meta[key] = value; - File buildMetaFile = new File(path.join(buildDirectoryPath, 'build_meta.json')); + File buildMetaFile = fs.file(path.join(buildDirectoryPath, 'build_meta.json')); buildMetaFile.writeAsStringSync(toPrettyJson(meta)); }
diff --git a/packages/flutter_tools/lib/src/commands/create.dart b/packages/flutter_tools/lib/src/commands/create.dart index 3d21f16..83f3e7d 100644 --- a/packages/flutter_tools/lib/src/commands/create.dart +++ b/packages/flutter_tools/lib/src/commands/create.dart
@@ -3,12 +3,12 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; import 'package:path/path.dart' as path; import '../android/android.dart' as android; import '../base/common.dart'; +import '../base/file_system.dart'; import '../base/utils.dart'; import '../cache.dart'; import '../dart/pub.dart'; @@ -72,14 +72,14 @@ String flutterPackagesDirectory = path.join(flutterRoot, 'packages'); String flutterPackagePath = path.join(flutterPackagesDirectory, 'flutter'); - if (!FileSystemEntity.isFileSync(path.join(flutterPackagePath, 'pubspec.yaml'))) + if (!fs.isFileSync(path.join(flutterPackagePath, 'pubspec.yaml'))) throwToolExit('Unable to find package:flutter in $flutterPackagePath', exitCode: 2); String flutterDriverPackagePath = path.join(flutterRoot, 'packages', 'flutter_driver'); - if (!FileSystemEntity.isFileSync(path.join(flutterDriverPackagePath, 'pubspec.yaml'))) + if (!fs.isFileSync(path.join(flutterDriverPackagePath, 'pubspec.yaml'))) throwToolExit('Unable to find package:flutter_driver in $flutterDriverPackagePath', exitCode: 2); - Directory projectDir = new Directory(argResults.rest.first); + Directory projectDir = fs.directory(argResults.rest.first); String dirPath = path.normalize(projectDir.absolute.path); String relativePath = path.relative(dirPath); String projectName = _normalizeProjectName(path.basename(dirPath)); @@ -139,7 +139,7 @@ int _renderTemplates(String projectName, String projectDescription, String dirPath, String flutterPackagesDirectory, { bool renderDriverTest: false }) { - new Directory(dirPath).createSync(recursive: true); + fs.directory(dirPath).createSync(recursive: true); flutterPackagesDirectory = path.normalize(flutterPackagesDirectory); flutterPackagesDirectory = _relativePath(from: dirPath, to: flutterPackagesDirectory); @@ -161,14 +161,14 @@ Template createTemplate = new Template.fromName('create'); fileCount += createTemplate.render( - new Directory(dirPath), + fs.directory(dirPath), templateContext, overwriteExisting: false, projectName: projectName ); if (renderDriverTest) { Template driverTemplate = new Template.fromName('driver'); - fileCount += driverTemplate.render(new Directory(path.join(dirPath, 'test_driver')), + fileCount += driverTemplate.render(fs.directory(path.join(dirPath, 'test_driver')), templateContext, overwriteExisting: false); } @@ -234,7 +234,7 @@ "Target directory '$dirPath' is within the Flutter SDK at '$flutterRoot'."; } - FileSystemEntityType type = FileSystemEntity.typeSync(dirPath); + FileSystemEntityType type = fs.typeSync(dirPath); if (type != FileSystemEntityType.NOT_FOUND) { switch(type) { @@ -253,7 +253,7 @@ String _relativePath({ String from, String to }) { String result = path.relative(to, from: from); // `path.relative()` doesn't always return a correct result: dart-lang/path#12. - if (FileSystemEntity.isDirectorySync(path.join(from, result))) + if (fs.isDirectorySync(path.join(from, result))) return result; return to; }
diff --git a/packages/flutter_tools/lib/src/commands/daemon.dart b/packages/flutter_tools/lib/src/commands/daemon.dart index c59a8fc..4f7483d 100644 --- a/packages/flutter_tools/lib/src/commands/daemon.dart +++ b/packages/flutter_tools/lib/src/commands/daemon.dart
@@ -4,11 +4,12 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:io'; +import 'dart:io' as io; import '../android/android_device.dart'; import '../base/common.dart'; import '../base/context.dart'; +import '../base/file_system.dart'; import '../base/logger.dart'; import '../base/utils.dart'; import '../build_info.dart'; @@ -119,7 +120,7 @@ dynamic id = request['id']; if (id == null) { - stderr.writeln('no id for request: $request'); + io.stderr.writeln('no id for request: $request'); return; } @@ -234,9 +235,9 @@ // capture the print output for testing. print(message.message); } else if (message.level == 'error') { - stderr.writeln(message.message); + io.stderr.writeln(message.message); if (message.stackTrace != null) - stderr.writeln(message.stackTrace.toString().trimRight()); + io.stderr.writeln(message.stackTrace.toString().trimRight()); } } else { if (message.stackTrace != null) { @@ -302,7 +303,7 @@ if (device == null) throw "device '$deviceId' not found"; - if (!FileSystemEntity.isDirectorySync(projectDirectory)) + if (!fs.isDirectorySync(projectDirectory)) throw "'$projectDirectory' does not exist"; BuildMode buildMode = getBuildModeForName(mode) ?? BuildMode.debug; @@ -341,8 +342,8 @@ throw '${toTitleCase(getModeName(buildMode))} mode is not supported for emulators.'; // We change the current working directory for the duration of the `start` command. - Directory cwd = Directory.current; - Directory.current = new Directory(projectDirectory); + Directory cwd = fs.currentDirectory; + fs.currentDirectory = fs.directory(projectDirectory); ResidentRunner runner; @@ -400,7 +401,7 @@ } catch (error) { _sendAppEvent(app, 'stop', <String, dynamic>{'error': error.toString()}); } finally { - Directory.current = cwd; + fs.currentDirectory = cwd; _apps.remove(app); } }); @@ -589,7 +590,7 @@ } } -Stream<Map<String, dynamic>> get stdinCommandStream => stdin +Stream<Map<String, dynamic>> get stdinCommandStream => io.stdin .transform(UTF8.decoder) .transform(const LineSplitter()) .where((String line) => line.startsWith('[{') && line.endsWith('}]')) @@ -599,7 +600,7 @@ }); void stdoutCommandResponse(Map<String, dynamic> command) { - stdout.writeln('[${JSON.encode(command, toEncodable: _jsonEncodeObject)}]'); + io.stdout.writeln('[${JSON.encode(command, toEncodable: _jsonEncodeObject)}]'); } dynamic _jsonEncodeObject(dynamic object) { @@ -709,9 +710,9 @@ @override void printError(String message, [StackTrace stackTrace]) { if (logToStdout) { - stderr.writeln(message); + io.stderr.writeln(message); if (stackTrace != null) - stderr.writeln(stackTrace.toString().trimRight()); + io.stderr.writeln(stackTrace.toString().trimRight()); } else { if (stackTrace != null) { _sendLogEvent(<String, dynamic>{
diff --git a/packages/flutter_tools/lib/src/commands/run.dart b/packages/flutter_tools/lib/src/commands/run.dart index ddd06f7..7486648 100644 --- a/packages/flutter_tools/lib/src/commands/run.dart +++ b/packages/flutter_tools/lib/src/commands/run.dart
@@ -3,9 +3,10 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; +import 'dart:io' as io; import '../base/common.dart'; +import '../base/file_system.dart'; import '../base/utils.dart'; import '../build_info.dart'; import '../cache.dart'; @@ -174,7 +175,7 @@ AppInstance app; try { app = daemon.appDomain.startApp( - device, Directory.current.path, targetFile, route, + device, fs.currentDirectory.path, targetFile, route, getBuildMode(), argResults['start-paused'], hotMode); } catch (error) { throwToolExit(error.toString()); @@ -217,7 +218,7 @@ String pidFile = argResults['pid-file']; if (pidFile != null) { // Write our pid to the file. - new File(pidFile).writeAsStringSync(pid.toString()); + fs.file(pidFile).writeAsStringSync(io.pid.toString()); } ResidentRunner runner;
diff --git a/packages/flutter_tools/lib/src/commands/screenshot.dart b/packages/flutter_tools/lib/src/commands/screenshot.dart index f2208e5..398d213 100644 --- a/packages/flutter_tools/lib/src/commands/screenshot.dart +++ b/packages/flutter_tools/lib/src/commands/screenshot.dart
@@ -3,12 +3,13 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; +import 'dart:io' as io; import 'package:http/http.dart' as http; import 'package:path/path.dart' as path; import '../base/common.dart'; +import '../base/file_system.dart'; import '../base/utils.dart'; import '../device.dart'; import '../globals.dart'; @@ -72,7 +73,7 @@ Future<Null> runCommand() async { File outputFile; if (argResults.wasParsed(_kOut)) - outputFile = new File(argResults[_kOut]); + outputFile = fs.file(argResults[_kOut]); if (argResults[_kSkia] != null) { return runSkia(outputFile); @@ -82,7 +83,7 @@ } Future<Null> runScreenshot(File outputFile) async { - outputFile ??= getUniqueFile(Directory.current, 'flutter', 'png'); + outputFile ??= getUniqueFile(fs.currentDirectory, 'flutter', 'png'); try { if (!await device.takeScreenshot(outputFile)) throwToolExit('Screenshot failed'); @@ -105,10 +106,10 @@ http.StreamedResponse skpResponse; try { skpResponse = await new http.Request('GET', skpUri).send(); - } on SocketException catch (e) { + } on io.SocketException catch (e) { throwToolExit('Skia screenshot failed: $skpUri\n$e\n\n$errorHelpText'); } - if (skpResponse.statusCode != HttpStatus.OK) { + if (skpResponse.statusCode != io.HttpStatus.OK) { String error = await skpResponse.stream.toStringStream().join(); throwToolExit('Error: $error\n\n$errorHelpText'); } @@ -121,10 +122,10 @@ 'file', skpResponse.stream, skpResponse.contentLength)); http.StreamedResponse postResponse = await postRequest.send(); - if (postResponse.statusCode != HttpStatus.OK) + if (postResponse.statusCode != io.HttpStatus.OK) throwToolExit('Failed to post Skia picture to skiaserve.\n\n$errorHelpText'); } else { - outputFile ??= getUniqueFile(Directory.current, 'flutter', 'skp'); + outputFile ??= getUniqueFile(fs.currentDirectory, 'flutter', 'skp'); IOSink sink = outputFile.openWrite(); await sink.addStream(skpResponse.stream); await sink.close();
diff --git a/packages/flutter_tools/lib/src/commands/test.dart b/packages/flutter_tools/lib/src/commands/test.dart index 9e6ed72..11e4a2b 100644 --- a/packages/flutter_tools/lib/src/commands/test.dart +++ b/packages/flutter_tools/lib/src/commands/test.dart
@@ -3,12 +3,13 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; +import 'dart:io' as io; import 'package:path/path.dart' as path; import 'package:test/src/executable.dart' as test; // ignore: implementation_imports import '../base/common.dart'; +import '../base/file_system.dart'; import '../base/logger.dart'; import '../base/process_manager.dart'; import '../base/os.dart'; @@ -39,7 +40,7 @@ help: 'Where to store coverage information (if coverage is enabled).' ); commandValidator = () { - if (!FileSystemEntity.isFileSync('pubspec.yaml')) { + if (!fs.isFileSync('pubspec.yaml')) { throwToolExit( 'Error: No pubspec.yaml file found in the current working directory.\n' 'Run this command from the root of your project. Test files must be\n' @@ -58,31 +59,31 @@ Iterable<String> _findTests(Directory directory) { return directory.listSync(recursive: true, followLinks: false) .where((FileSystemEntity entity) => entity.path.endsWith('_test.dart') && - FileSystemEntity.isFileSync(entity.path)) + fs.isFileSync(entity.path)) .map((FileSystemEntity entity) => path.absolute(entity.path)); } Directory get _currentPackageTestDir { // We don't scan the entire package, only the test/ subdirectory, so that // files with names like like "hit_test.dart" don't get run. - return new Directory('test'); + return fs.directory('test'); } Future<int> _runTests(List<String> testArgs, Directory testDirectory) async { - Directory currentDirectory = Directory.current; + Directory currentDirectory = fs.currentDirectory; try { if (testDirectory != null) { printTrace('switching to directory $testDirectory to run tests'); PackageMap.globalPackagesPath = path.normalize(path.absolute(PackageMap.globalPackagesPath)); - Directory.current = testDirectory; + fs.currentDirectory = testDirectory; } printTrace('running test package with arguments: $testArgs'); await test.main(testArgs); // test.main() sets dart:io's exitCode global. - printTrace('test package returned with exit code $exitCode'); - return exitCode; + printTrace('test package returned with exit code ${io.exitCode}'); + return io.exitCode; } finally { - Directory.current = currentDirectory; + fs.currentDirectory = currentDirectory; } } @@ -94,7 +95,7 @@ return false; String coveragePath = argResults['coverage-path']; - File coverageFile = new File(coveragePath) + File coverageFile = fs.file(coveragePath) ..createSync(recursive: true) ..writeAsStringSync(coverageData, flush: true); printTrace('wrote coverage data to $coveragePath (size=${coverageData.length})'); @@ -109,7 +110,7 @@ return false; } - if (!FileSystemEntity.isFileSync(baseCoverageData)) { + if (!fs.isFileSync(baseCoverageData)) { printError('Missing "$baseCoverageData". Unable to merge coverage data.'); return false; } @@ -124,10 +125,10 @@ return false; } - Directory tempDir = Directory.systemTemp.createTempSync('flutter_tools'); + Directory tempDir = fs.systemTempDirectory.createTempSync('flutter_tools'); try { File sourceFile = coverageFile.copySync(path.join(tempDir.path, 'lcov.source.info')); - ProcessResult result = processManager.runSync('lcov', <String>[ + io.ProcessResult result = processManager.runSync('lcov', <String>[ '--add-tracefile', baseCoverageData, '--add-tracefile', sourceFile.path, '--output-file', coverageFile.path, @@ -164,8 +165,8 @@ if (argResults['coverage']) testArgs.insert(0, '--concurrency=1'); - final String shellPath = tools.getHostToolPath(HostTool.SkyShell) ?? Platform.environment['SKY_SHELL']; - if (!FileSystemEntity.isFileSync(shellPath)) + final String shellPath = tools.getHostToolPath(HostTool.SkyShell) ?? io.Platform.environment['SKY_SHELL']; + if (!fs.isFileSync(shellPath)) throwToolExit('Cannot find Flutter shell at $shellPath'); loader.installHook(shellPath: shellPath);
diff --git a/packages/flutter_tools/lib/src/commands/trace.dart b/packages/flutter_tools/lib/src/commands/trace.dart index 1bbaf6f..db011bf 100644 --- a/packages/flutter_tools/lib/src/commands/trace.dart +++ b/packages/flutter_tools/lib/src/commands/trace.dart
@@ -4,11 +4,11 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:io'; import 'package:path/path.dart' as path; import '../base/common.dart'; +import '../base/file_system.dart'; import '../base/utils.dart'; import '../build_info.dart'; import '../cache.dart'; @@ -90,9 +90,9 @@ File localFile; if (argResults['out'] != null) { - localFile = new File(argResults['out']); + localFile = fs.file(argResults['out']); } else { - localFile = getUniqueFile(Directory.current, 'trace', 'json'); + localFile = getUniqueFile(fs.currentDirectory, 'trace', 'json'); } await localFile.writeAsString(JSON.encode(timeline)); @@ -161,7 +161,7 @@ /// store it to build/start_up_info.json. Future<Null> downloadStartupTrace(VMService observatory) async { String traceInfoFilePath = path.join(getBuildDirectory(), 'start_up_info.json'); - File traceInfoFile = new File(traceInfoFilePath); + File traceInfoFile = fs.file(traceInfoFilePath); // Delete old startup data, if any. if (await traceInfoFile.exists())
diff --git a/packages/flutter_tools/lib/src/commands/update_packages.dart b/packages/flutter_tools/lib/src/commands/update_packages.dart index 30a869f..90b62bd 100644 --- a/packages/flutter_tools/lib/src/commands/update_packages.dart +++ b/packages/flutter_tools/lib/src/commands/update_packages.dart
@@ -3,10 +3,10 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; import 'package:path/path.dart' as path; +import '../base/file_system.dart'; import '../base/logger.dart'; import '../base/net.dart'; import '../cache.dart'; @@ -36,10 +36,10 @@ Status status = logger.startProgress("Downloading lcov data for package:flutter..."); final List<int> data = await fetchUrl(Uri.parse('https://storage.googleapis.com/flutter_infra/flutter/coverage/lcov.info')); final String coverageDir = path.join(Cache.flutterRoot, 'packages/flutter/coverage'); - new File(path.join(coverageDir, 'lcov.base.info')) + fs.file(path.join(coverageDir, 'lcov.base.info')) ..createSync(recursive: true) ..writeAsBytesSync(data, flush: true); - new File(path.join(coverageDir, 'lcov.info')) + fs.file(path.join(coverageDir, 'lcov.info')) ..createSync(recursive: true) ..writeAsBytesSync(data, flush: true); status.stop();
diff --git a/packages/flutter_tools/lib/src/dart/analysis.dart b/packages/flutter_tools/lib/src/dart/analysis.dart index 907d867..62d20b6 100644 --- a/packages/flutter_tools/lib/src/dart/analysis.dart +++ b/packages/flutter_tools/lib/src/dart/analysis.dart
@@ -3,7 +3,7 @@ // found in the LICENSE file. import 'dart:collection'; -import 'dart:io'; +import 'dart:io' as io; import 'package:analyzer/error/error.dart'; import 'package:analyzer/file_system/file_system.dart' as file_system; @@ -27,6 +27,8 @@ import 'package:plugin/manager.dart'; import 'package:plugin/plugin.dart'; +import '../base/file_system.dart'; + class AnalysisDriver { Set<Source> _analyzedSources = new HashSet<Source>(); @@ -97,7 +99,7 @@ // Create our list of resolvers. List<UriResolver> resolvers = <UriResolver>[]; - + // Look for an embedder. EmbedderYamlLocator locator = new EmbedderYamlLocator(packageMap); if (locator.embedderYamls.isNotEmpty) { @@ -123,7 +125,7 @@ if (options.packageRootPath != null) { ContextBuilderOptions builderOptions = new ContextBuilderOptions(); builderOptions.defaultPackagesDirectoryPath = options.packageRootPath; - ContextBuilder builder = new ContextBuilder(resourceProvider, null, null, + ContextBuilder builder = new ContextBuilder(resourceProvider, null, null, options: builderOptions); PackageMapUriResolver packageUriResolver = new PackageMapUriResolver(resourceProvider, builder.convertPackagesToMap(builder.createPackageMap(''))); @@ -183,7 +185,7 @@ } class AnalysisErrorDescription { - static Directory cwd = Directory.current.absolute; + static Directory cwd = fs.currentDirectory.absolute; final AnalysisError error; final LineInfo line; @@ -238,10 +240,10 @@ Map<Object, Object> analysisOptions; /// Out sink for logging. - IOSink outSink = stdout; + io.IOSink outSink = io.stdout; /// Error sink for logging. - IOSink errorSink = stderr; + io.IOSink errorSink = io.stderr; } class PackageInfo { @@ -267,8 +269,8 @@ } class _StdLogger extends Logger { - final IOSink outSink; - final IOSink errorSink; + final io.IOSink outSink; + final io.IOSink errorSink; _StdLogger({this.outSink, this.errorSink}); @override
diff --git a/packages/flutter_tools/lib/src/dart/package_map.dart b/packages/flutter_tools/lib/src/dart/package_map.dart index 8ea0dbc..09bab80 100644 --- a/packages/flutter_tools/lib/src/dart/package_map.dart +++ b/packages/flutter_tools/lib/src/dart/package_map.dart
@@ -2,15 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:io'; - import 'package:package_config/packages_file.dart' as packages_file; import 'package:path/path.dart' as path; +import '../base/file_system.dart'; + const String kPackagesFileName = '.packages'; Map<String, Uri> _parse(String packagesPath) { - List<int> source = new File(packagesPath).readAsBytesSync(); + List<int> source = fs.file(packagesPath).readAsBytesSync(); return packages_file.parse(source, new Uri.file(packagesPath)); } @@ -51,11 +51,11 @@ } String checkValid() { - if (FileSystemEntity.isFileSync(packagesPath)) + if (fs.isFileSync(packagesPath)) return null; String message = '$packagesPath does not exist.'; String pubspecPath = path.absolute(path.dirname(packagesPath), 'pubspec.yaml'); - if (FileSystemEntity.isFileSync(pubspecPath)) + if (fs.isFileSync(pubspecPath)) message += '\nDid you run "flutter packages get" in this directory?'; else message += '\nDid you run this command from the same directory as your pubspec.yaml file?';
diff --git a/packages/flutter_tools/lib/src/dart/pub.dart b/packages/flutter_tools/lib/src/dart/pub.dart index be4a48e..5b3db66 100644 --- a/packages/flutter_tools/lib/src/dart/pub.dart +++ b/packages/flutter_tools/lib/src/dart/pub.dart
@@ -3,11 +3,11 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; import 'package:path/path.dart' as path; import '../base/common.dart'; +import '../base/file_system.dart'; import '../base/logger.dart'; import '../base/process.dart'; import '../cache.dart'; @@ -21,7 +21,8 @@ if (pubSpecYaml.lastModifiedSync().isAfter(dotPackagesLastModified)) return true; File flutterToolsStamp = Cache.instance.getStampFileFor('flutter_tools'); - if (flutterToolsStamp.lastModifiedSync().isAfter(dotPackagesLastModified)) + if (flutterToolsStamp.existsSync() && + flutterToolsStamp.lastModifiedSync().isAfter(dotPackagesLastModified)) return true; return false; } @@ -33,10 +34,10 @@ bool checkLastModified: true }) async { if (directory == null) - directory = Directory.current.path; + directory = fs.currentDirectory.path; - File pubSpecYaml = new File(path.join(directory, 'pubspec.yaml')); - File dotPackages = new File(path.join(directory, '.packages')); + File pubSpecYaml = fs.file(path.join(directory, 'pubspec.yaml')); + File dotPackages = fs.file(path.join(directory, '.packages')); if (!pubSpecYaml.existsSync()) { if (!skipIfAbsent)
diff --git a/packages/flutter_tools/lib/src/dependency_checker.dart b/packages/flutter_tools/lib/src/dependency_checker.dart index 88deffd..e407c09 100644 --- a/packages/flutter_tools/lib/src/dependency_checker.dart +++ b/packages/flutter_tools/lib/src/dependency_checker.dart
@@ -2,10 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:io'; - import 'globals.dart'; +import 'base/file_system.dart'; import 'dart/dependencies.dart'; import 'dart/package_map.dart'; import 'asset.dart'; @@ -51,7 +50,7 @@ // Check all dependency modification times. for (String path in _dependencies) { - File file = new File(path); + File file = fs.file(path); FileStat stat = file.statSync(); if (stat.type == FileSystemEntityType.NOT_FOUND) { printTrace('DependencyChecker: Error stating $path.');
diff --git a/packages/flutter_tools/lib/src/devfs.dart b/packages/flutter_tools/lib/src/devfs.dart index 304e12c..9ee5834 100644 --- a/packages/flutter_tools/lib/src/devfs.dart +++ b/packages/flutter_tools/lib/src/devfs.dart
@@ -4,11 +4,12 @@ import 'dart:async'; import 'dart:convert' show BASE64, UTF8; -import 'dart:io'; +import 'dart:io' as io; import 'package:path/path.dart' as path; import 'base/context.dart'; +import 'base/file_system.dart'; import 'build_info.dart'; import 'dart/package_map.dart'; import 'asset.dart'; @@ -89,7 +90,7 @@ if (_fileStat.type == FileSystemEntityType.LINK) { // Resolve, stat, and maybe cache the symlink target. String resolved = file.resolveSymbolicLinksSync(); - FileSystemEntity linkTarget = new File(resolved); + FileSystemEntity linkTarget = fs.file(resolved); // Stat the link target. _fileStat = linkTarget.statSync(); if (devFSConfig.cacheSymlinks) { @@ -104,7 +105,7 @@ } if (file is Link) { // The link target. - return new File(file.resolveSymbolicLinksSync()); + return fs.file(file.resolveSymbolicLinksSync()); } return file; } @@ -126,7 +127,7 @@ } Stream<List<int>> contentsAsCompressedStream() { - return contentsAsStream().transform(GZIP.encoder); + return contentsAsStream().transform(io.GZIP.encoder); } } @@ -213,13 +214,13 @@ int _inFlight = 0; List<DevFSEntry> _outstanding; Completer<Null> _completer; - HttpClient _client; + io.HttpClient _client; int _done; int _max; Future<Null> write(Set<DevFSEntry> entries, {DevFSProgressReporter progressReporter}) async { - _client = new HttpClient(); + _client = new io.HttpClient(); _client.maxConnectionsPerHost = kMaxInFlight; _completer = new Completer<Null>(); _outstanding = entries.toList(); @@ -245,14 +246,14 @@ Future<Null> _scheduleWrite(DevFSEntry entry, DevFSProgressReporter progressReporter) async { try { - HttpClientRequest request = await _client.putUrl(httpAddress); - request.headers.removeAll(HttpHeaders.ACCEPT_ENCODING); + io.HttpClientRequest request = await _client.putUrl(httpAddress); + request.headers.removeAll(io.HttpHeaders.ACCEPT_ENCODING); request.headers.add('dev_fs_name', fsName); request.headers.add('dev_fs_path_b64', BASE64.encode(UTF8.encode(entry.devicePath))); Stream<List<int>> contents = entry.contentsAsCompressedStream(); await request.addStream(contents); - HttpClientResponse response = await request.close(); + io.HttpClientResponse response = await request.close(); await response.drain(); } catch (e, stackTrace) { printError('Error writing "${entry.devicePath}" to DevFS: $e\n$stackTrace'); @@ -353,7 +354,7 @@ printTrace('Scanning package files'); StringBuffer sb; - if (FileSystemEntity.isFileSync(_packagesFilePath)) { + if (fs.isFileSync(_packagesFilePath)) { PackageMap packageMap = new PackageMap(_packagesFilePath); for (String packageName in packageMap.map.keys) { @@ -368,7 +369,7 @@ // path imports within the project's own code. final String packagesDirectoryName = isProjectPackage ? 'packages/$packageName' : null; - Directory directory = new Directory.fromUri(uri); + Directory directory = fs.directory(uri); bool packageExists = await _scanDirectory(directory, directoryName: directoryName, @@ -527,7 +528,7 @@ // Check if this is a symlink to a directory and skip it. final String linkPath = file.resolveSymbolicLinksSync(); final FileSystemEntityType linkType = - FileStat.statSync(linkPath).type; + fs.statSync(linkPath).type; if (linkType == FileSystemEntityType.DIRECTORY) { continue; }
diff --git a/packages/flutter_tools/lib/src/device.dart b/packages/flutter_tools/lib/src/device.dart index 75e4b6c..6048d62 100644 --- a/packages/flutter_tools/lib/src/device.dart +++ b/packages/flutter_tools/lib/src/device.dart
@@ -3,13 +3,13 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; import 'dart:math' as math; import 'android/android_device.dart'; import 'application_package.dart'; import 'base/common.dart'; import 'base/context.dart'; +import 'base/file_system.dart'; import 'base/os.dart'; import 'base/utils.dart'; import 'build_info.dart';
diff --git a/packages/flutter_tools/lib/src/doctor.dart b/packages/flutter_tools/lib/src/doctor.dart index 2b4f96f..d6ad8ec 100644 --- a/packages/flutter_tools/lib/src/doctor.dart +++ b/packages/flutter_tools/lib/src/doctor.dart
@@ -3,7 +3,7 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; +import 'dart:io' as io; import 'package:archive/archive.dart'; import 'dart:convert' show UTF8; @@ -12,6 +12,7 @@ import 'android/android_workflow.dart'; import 'base/common.dart'; import 'base/context.dart'; +import 'base/file_system.dart'; import 'device.dart'; import 'globals.dart'; import 'ios/ios_workflow.dart'; @@ -26,7 +27,7 @@ }; String osName() { - String os = Platform.operatingSystem; + String os = io.Platform.operatingSystem; return _osNames.containsKey(os) ? _osNames[os] : os; } @@ -123,7 +124,7 @@ else printStatus('${result.leadingBox} ${validator.title}'); - final String separator = Platform.isWindows ? ' ' : '•'; + final String separator = io.Platform.isWindows ? ' ' : '•'; for (ValidationMessage message in result.messages) { String text = message.message.replaceAll('\n', '\n '); @@ -181,7 +182,7 @@ if (type == ValidationType.missing) return '[x]'; else if (type == ValidationType.installed) - return Platform.isWindows ? '[+]' : '[✓]'; + return io.Platform.isWindows ? '[+]' : '[✓]'; else return '[-]'; } @@ -216,7 +217,7 @@ messages.add(new ValidationMessage('Engine revision ${version.engineRevisionShort}')); messages.add(new ValidationMessage('Tools Dart version ${version.dartSdkVersion}')); - if (Platform.isWindows) { + if (io.Platform.isWindows) { valid = ValidationType.missing; messages.add(new ValidationMessage.error( @@ -253,9 +254,9 @@ }; static Iterable<DoctorValidator> get installedValidators { - if (Platform.isLinux) + if (io.Platform.isLinux) return IntelliJValidatorOnLinux.installed; - if (Platform.isMacOS) + if (io.Platform.isMacOS) return IntelliJValidatorOnMac.installed; // TODO(danrubel): add support for Windows return <DoctorValidator>[]; @@ -307,7 +308,7 @@ // TODO(danrubel) look for a better way to extract a single 2K file from the zip // rather than reading the entire file into memory. try { - Archive archive = new ZipDecoder().decodeBytes(new File(jarPath).readAsBytesSync()); + Archive archive = new ZipDecoder().decodeBytes(fs.file(jarPath).readAsBytesSync()); ArchiveFile file = archive.findFile('META-INF/plugin.xml'); String content = UTF8.decode(file.content); String versionStartTag = '<version>'; @@ -322,8 +323,8 @@ bool hasPackage(String packageName) { String packagePath = path.join(pluginsPath, packageName); if (packageName.endsWith('.jar')) - return FileSystemEntity.isFileSync(packagePath); - return FileSystemEntity.isDirectorySync(packagePath); + return fs.isFileSync(packagePath); + return fs.isDirectorySync(packagePath); } } @@ -356,7 +357,7 @@ validators.add(validator); } - for (FileSystemEntity dir in new Directory(homeDirPath).listSync()) { + for (FileSystemEntity dir in fs.directory(homeDirPath).listSync()) { if (dir is Directory) { String name = path.basename(dir.path); IntelliJValidator._idToTitle.forEach((String id, String title) { @@ -364,11 +365,11 @@ String version = name.substring(id.length + 1); String installPath; try { - installPath = new File(path.join(dir.path, 'system', '.home')).readAsStringSync(); + installPath = fs.file(path.join(dir.path, 'system', '.home')).readAsStringSync(); } catch (e) { // ignored } - if (installPath != null && FileSystemEntity.isDirectorySync(installPath)) { + if (installPath != null && fs.isDirectorySync(installPath)) { String pluginsPath = path.join(dir.path, 'config', 'plugins'); addValidator(title, version, installPath, pluginsPath); } @@ -405,7 +406,7 @@ } try { - for (FileSystemEntity dir in new Directory('/Applications').listSync()) { + for (FileSystemEntity dir in fs.directory('/Applications').listSync()) { if (dir is Directory) { checkForIntelliJ(dir); if (!dir.path.endsWith('.app')) { @@ -432,7 +433,7 @@ if (_version == null) { String plist; try { - plist = new File(path.join(installPath, 'Contents', 'Info.plist')).readAsStringSync(); + plist = fs.file(path.join(installPath, 'Contents', 'Info.plist')).readAsStringSync(); int index = plist.indexOf('CFBundleShortVersionString'); if (index > 0) { int start = plist.indexOf('<string>', index);
diff --git a/packages/flutter_tools/lib/src/flx.dart b/packages/flutter_tools/lib/src/flx.dart index 3f11950..d0567dc 100644 --- a/packages/flutter_tools/lib/src/flx.dart +++ b/packages/flutter_tools/lib/src/flx.dart
@@ -3,13 +3,12 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; import 'package:path/path.dart' as path; import 'asset.dart'; import 'base/common.dart'; -import 'base/file_system.dart' show ensureDirectoryExists; +import 'base/file_system.dart'; import 'base/process.dart'; import 'dart/package_map.dart'; import 'build_info.dart'; @@ -107,7 +106,7 @@ if (result != 0) throwToolExit('Failed to run the Flutter compiler. Exit code: $result', exitCode: result); - snapshotFile = new File(snapshotPath); + snapshotFile = fs.file(snapshotPath); } return assemble( @@ -162,7 +161,7 @@ ensureDirectoryExists(outputPath); printTrace('Encoding zip file to $outputPath'); - zipBuilder.createZip(new File(outputPath), new Directory(workingDirPath)); + zipBuilder.createZip(fs.file(outputPath), fs.directory(workingDirPath)); printTrace('Built $outputPath.'); }
diff --git a/packages/flutter_tools/lib/src/hot.dart b/packages/flutter_tools/lib/src/hot.dart index 0ec3de2..81d06097 100644 --- a/packages/flutter_tools/lib/src/hot.dart +++ b/packages/flutter_tools/lib/src/hot.dart
@@ -3,7 +3,6 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; import 'package:meta/meta.dart'; import 'package:path/path.dart' as path; @@ -12,6 +11,7 @@ import 'application_package.dart'; import 'asset.dart'; import 'base/context.dart'; +import 'base/file_system.dart'; import 'base/logger.dart'; import 'base/utils.dart'; import 'build_info.dart'; @@ -51,7 +51,7 @@ target: target, debuggingOptions: debuggingOptions, usesTerminalUI: usesTerminalUI) { - _projectRootPath = projectRootPath ?? Directory.current.path; + _projectRootPath = projectRootPath ?? fs.currentDirectory.path; _packagesFilePath = packagesFilePath ?? path.absolute(PackageMap.globalPackagesPath); if (projectAssets != null) @@ -136,7 +136,7 @@ bool shouldBuild: true }) async { _mainPath = findMainDartFile(target); - if (!FileSystemEntity.isFileSync(_mainPath)) { + if (!fs.isFileSync(_mainPath)) { String message = 'Tried to run $_mainPath, but that file does not exist.'; if (target == null) message += '\nConsider using the -t option to specify the Dart file to start.'; @@ -241,7 +241,7 @@ await _cleanupDevFS(); await stopEchoingDeviceLog(); await stopApp(); - File benchmarkOutput = new File('hot_benchmark.json'); + File benchmarkOutput = fs.file('hot_benchmark.json'); benchmarkOutput.writeAsStringSync(toPrettyJson(benchmarkData)); } @@ -267,7 +267,7 @@ String fsName = path.basename(_projectRootPath); _devFS = new DevFS(vmService, fsName, - new Directory(_projectRootPath), + fs.directory(_projectRootPath), packagesFilePath: _packagesFilePath); return _devFS.create(); }
diff --git a/packages/flutter_tools/lib/src/ios/devices.dart b/packages/flutter_tools/lib/src/ios/devices.dart index a297471..0017cbf 100644 --- a/packages/flutter_tools/lib/src/ios/devices.dart +++ b/packages/flutter_tools/lib/src/ios/devices.dart
@@ -4,9 +4,10 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:io'; +import 'dart:io' as io; import '../application_package.dart'; +import '../base/file_system.dart'; import '../base/os.dart'; import '../base/process.dart'; import '../base/process_manager.dart'; @@ -27,7 +28,7 @@ IOSDevices() : super('IOSDevices'); @override - bool get supportsPlatform => Platform.isMacOS; + bool get supportsPlatform => io.Platform.isMacOS; @override List<Device> pollingGetDevices() => IOSDevice.getAttachedDevices(); @@ -124,7 +125,7 @@ try { command = runCheckedSync(<String>['which', command]).trim(); } catch (e) { - if (Platform.isMacOS) { + if (io.Platform.isMacOS) { printError('$command not found. $macInstructions'); } else { printError('Cannot control iOS devices or simulators. $command is not available on your platform.'); @@ -150,7 +151,7 @@ @override bool installApp(ApplicationPackage app) { IOSApp iosApp = app; - Directory bundle = new Directory(iosApp.deviceBundlePath); + Directory bundle = fs.directory(iosApp.deviceBundlePath); if (!bundle.existsSync()) { printError("Could not find application bundle at ${bundle.path}; have you run 'flutter build ios'?"); return false; @@ -207,7 +208,7 @@ // Step 2: Check that the application exists at the specified path. IOSApp iosApp = app; - Directory bundle = new Directory(iosApp.deviceBundlePath); + Directory bundle = fs.directory(iosApp.deviceBundlePath); if (!bundle.existsSync()) { printError('Could not find the built application bundle at ${bundle.path}.'); return new LaunchResult.failed(); @@ -312,7 +313,7 @@ } Future<bool> pushFile(ApplicationPackage app, String localFile, String targetFile) async { - if (Platform.isMacOS) { + if (io.Platform.isMacOS) { runSync(<String>[ pusherPath, '-t', @@ -391,7 +392,7 @@ final IOSDevice device; StreamController<String> _linesController; - Process _process; + io.Process _process; @override Stream<String> get logLines => _linesController.stream; @@ -400,7 +401,7 @@ String get name => device.name; void _start() { - runCommand(<String>[device.loggerPath]).then((Process process) { + runCommand(<String>[device.loggerPath]).then((io.Process process) { _process = process; _process.stdout.transform(UTF8.decoder).transform(const LineSplitter()).listen(_onLine); _process.stderr.transform(UTF8.decoder).transform(const LineSplitter()).listen(_onLine); @@ -444,7 +445,7 @@ } // Usage: iproxy LOCAL_TCP_PORT DEVICE_TCP_PORT UDID - Process process = await runCommand(<String>[ + io.Process process = await runCommand(<String>[ device.iproxyPath, hostPort.toString(), devicePort.toString(), @@ -470,7 +471,7 @@ printTrace("Unforwarding port $forwardedPort"); - Process process = forwardedPort.context; + io.Process process = forwardedPort.context; if (process != null) { processManager.killPid(process.pid);
diff --git a/packages/flutter_tools/lib/src/ios/mac.dart b/packages/flutter_tools/lib/src/ios/mac.dart index b7eead4..cf1d317 100644 --- a/packages/flutter_tools/lib/src/ios/mac.dart +++ b/packages/flutter_tools/lib/src/ios/mac.dart
@@ -4,12 +4,13 @@ import 'dart:async'; import 'dart:convert' show JSON; -import 'dart:io'; +import 'dart:io' as io; import 'package:path/path.dart' as path; import '../application_package.dart'; import '../base/context.dart'; +import '../base/file_system.dart'; import '../base/process.dart'; import '../base/process_manager.dart'; import '../build_info.dart'; @@ -40,7 +41,7 @@ } else { try { printTrace('xcrun clang'); - ProcessResult result = processManager.runSync('/usr/bin/xcrun', <String>['clang']); + io.ProcessResult result = processManager.runSync('/usr/bin/xcrun', <String>['clang']); if (result.stdout != null && result.stdout.contains('license')) _eulaSigned = false; @@ -107,7 +108,7 @@ bool buildForDevice, bool codesign: true }) async { - String flutterProjectPath = Directory.current.path; + String flutterProjectPath = fs.currentDirectory.path; updateXcodeGeneratedProperties(flutterProjectPath, mode, target); if (!_checkXcodeVersion()) @@ -116,7 +117,7 @@ // Before the build, all service definitions must be updated and the dylibs // copied over to a location that is suitable for Xcodebuild to find them. - await _addServicesToBundle(new Directory(app.appDirectory)); + await _addServicesToBundle(fs.directory(app.appDirectory)); List<String> commands = <String>[ '/usr/bin/env', @@ -128,7 +129,7 @@ 'ONLY_ACTIVE_ARCH=YES', ]; - List<FileSystemEntity> contents = new Directory(app.appDirectory).listSync(); + List<FileSystemEntity> contents = fs.directory(app.appDirectory).listSync(); for (FileSystemEntity entity in contents) { if (path.extension(entity.path) == '.xcworkspace') { commands.addAll(<String>[ @@ -180,7 +181,7 @@ } void diagnoseXcodeBuildFailure(XcodeBuildResult result) { - File plistFile = new File('ios/Runner/Info.plist'); + File plistFile = fs.file('ios/Runner/Info.plist'); if (plistFile.existsSync()) { String plistContent = plistFile.readAsStringSync(); if (plistContent.contains('com.yourcompany')) { @@ -219,7 +220,7 @@ final String _xcodeRequirement = 'Xcode 7.0 or greater is required to develop for iOS.'; bool _checkXcodeVersion() { - if (!Platform.isMacOS) + if (!io.Platform.isMacOS) return false; try { String version = runCheckedSync(<String>['xcodebuild', '-version']); @@ -245,12 +246,12 @@ printTrace("Found ${services.length} service definition(s)."); // Step 2: Copy framework dylibs to the correct spot for xcodebuild to pick up. - Directory frameworksDirectory = new Directory(path.join(bundle.path, "Frameworks")); + Directory frameworksDirectory = fs.directory(path.join(bundle.path, "Frameworks")); await _copyServiceFrameworks(services, frameworksDirectory); // Step 3: Copy the service definitions manifest at the correct spot for // xcodebuild to pick up. - File manifestFile = new File(path.join(bundle.path, "ServiceDefinitions.json")); + File manifestFile = fs.file(path.join(bundle.path, "ServiceDefinitions.json")); _copyServiceDefinitionsManifest(services, manifestFile); } @@ -259,7 +260,7 @@ frameworksDirectory.createSync(recursive: true); for (Map<String, String> service in services) { String dylibPath = await getServiceFromUrl(service['ios-framework'], service['root'], service['name']); - File dylib = new File(dylibPath); + File dylib = fs.file(dylibPath); printTrace("Copying ${dylib.path} into bundle."); if (!dylib.existsSync()) { printError("The service dylib '${dylib.path}' does not exist.");
diff --git a/packages/flutter_tools/lib/src/ios/plist_utils.dart b/packages/flutter_tools/lib/src/ios/plist_utils.dart index 3b36af4..bee1b23 100644 --- a/packages/flutter_tools/lib/src/ios/plist_utils.dart +++ b/packages/flutter_tools/lib/src/ios/plist_utils.dart
@@ -2,10 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:io'; - import 'package:path/path.dart' as path; +import '../base/file_system.dart'; import '../base/process.dart'; const String kCFBundleIdentifierKey = "CFBundleIdentifier"; @@ -18,7 +17,7 @@ // 'defaults' requires the path to be absolute and without the 'plist' // extension. - if (!FileSystemEntity.isFileSync(plistFilePath)) + if (!fs.isFileSync(plistFilePath)) return null; String normalizedPlistPath = path.withoutExtension(path.absolute(plistFilePath));
diff --git a/packages/flutter_tools/lib/src/ios/simulators.dart b/packages/flutter_tools/lib/src/ios/simulators.dart index fc91b9c..597ca42 100644 --- a/packages/flutter_tools/lib/src/ios/simulators.dart +++ b/packages/flutter_tools/lib/src/ios/simulators.dart
@@ -4,7 +4,7 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:io'; +import 'dart:io' as io; import 'dart:math' as math; import 'package:path/path.dart' as path; @@ -12,6 +12,7 @@ import '../application_package.dart'; import '../base/common.dart'; import '../base/context.dart'; +import '../base/file_system.dart'; import '../base/process.dart'; import '../base/process_manager.dart'; import '../build_info.dart'; @@ -30,7 +31,7 @@ IOSSimulators() : super('IOSSimulators'); @override - bool get supportsPlatform => Platform.isMacOS; + bool get supportsPlatform => io.Platform.isMacOS; @override List<Device> pollingGetDevices() => IOSSimulatorUtils.instance.getAttachedDevices(); @@ -191,7 +192,7 @@ List<String> args = <String>['simctl', 'list', '--json', section.name]; printTrace('$_xcrunPath ${args.join(' ')}'); - ProcessResult results = processManager.runSync(_xcrunPath, args); + io.ProcessResult results = processManager.runSync(_xcrunPath, args); if (results.exitCode != 0) { printError('Error executing simctl: ${results.exitCode}\n${results.stderr}'); return <String, Map<String, dynamic>>{}; @@ -358,7 +359,7 @@ @override bool isSupported() { - if (!Platform.isMacOS) { + if (!io.Platform.isMacOS) { _supportMessage = "Not supported on a non Mac host"; return false; } @@ -510,7 +511,7 @@ // Step 2: Assert that the Xcode project was successfully built. IOSApp iosApp = app; - Directory bundle = new Directory(iosApp.simulatorBundlePath); + Directory bundle = fs.directory(iosApp.simulatorBundlePath); bool bundleExists = bundle.existsSync(); if (!bundleExists) throwToolExit('Could not find the built application bundle at ${bundle.path}.'); @@ -530,7 +531,7 @@ Future<bool> pushFile( ApplicationPackage app, String localFile, String targetFile) async { - if (Platform.isMacOS) { + if (io.Platform.isMacOS) { String simulatorHomeDirectory = _getSimulatorAppHomeDirectory(app); runCheckedSync(<String>['cp', localFile, path.join(simulatorHomeDirectory, targetFile)]); return true; @@ -564,7 +565,7 @@ @override void clearLogs() { - File logFile = new File(logFilePath); + File logFile = fs.file(logFilePath); if (logFile.existsSync()) { RandomAccessFile randomFile = logFile.openSync(mode: FileMode.WRITE); randomFile.truncateSync(0); @@ -573,7 +574,7 @@ } void ensureLogsExists() { - File logFile = new File(logFilePath); + File logFile = fs.file(logFilePath); if (!logFile.existsSync()) logFile.writeAsBytesSync(<int>[]); } @@ -583,7 +584,7 @@ @override Future<bool> takeScreenshot(File outputFile) async { - Directory desktopDir = new Directory(path.join(homeDirPath, 'Desktop')); + Directory desktopDir = fs.directory(path.join(homeDirPath, 'Desktop')); // 'Simulator Screen Shot Mar 25, 2016, 2.59.43 PM.png' @@ -639,8 +640,8 @@ StreamController<String> _linesController; // We log from two files: the device and the system log. - Process _deviceProcess; - Process _systemProcess; + io.Process _deviceProcess; + io.Process _systemProcess; @override Stream<String> get logLines => _linesController.stream;
diff --git a/packages/flutter_tools/lib/src/ios/xcodeproj.dart b/packages/flutter_tools/lib/src/ios/xcodeproj.dart index 6d1bc49..3d440e1 100644 --- a/packages/flutter_tools/lib/src/ios/xcodeproj.dart +++ b/packages/flutter_tools/lib/src/ios/xcodeproj.dart
@@ -2,10 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:io'; - import 'package:path/path.dart' as path; +import '../base/file_system.dart'; import '../base/process.dart'; import '../build_info.dart'; import '../cache.dart'; @@ -23,7 +22,7 @@ localsBuffer.writeln('FLUTTER_ROOT=$flutterRoot'); // This holds because requiresProjectRoot is true for this command - String applicationRoot = path.normalize(Directory.current.path); + String applicationRoot = path.normalize(fs.currentDirectory.path); localsBuffer.writeln('FLUTTER_APPLICATION_PATH=$applicationRoot'); // Relative to FLUTTER_APPLICATION_PATH, which is [Directory.current]. @@ -43,7 +42,7 @@ if (tools.isLocalEngine) localsBuffer.writeln('LOCAL_ENGINE=${tools.engineBuildPath}'); - File localsFile = new File(path.join(projectPath, 'ios', 'Flutter', 'Generated.xcconfig')); + File localsFile = fs.file(path.join(projectPath, 'ios', 'Flutter', 'Generated.xcconfig')); localsFile.createSync(recursive: true); localsFile.writeAsStringSync(localsBuffer.toString()); }
diff --git a/packages/flutter_tools/lib/src/resident_runner.dart b/packages/flutter_tools/lib/src/resident_runner.dart index 1492d81..d049556 100644 --- a/packages/flutter_tools/lib/src/resident_runner.dart +++ b/packages/flutter_tools/lib/src/resident_runner.dart
@@ -3,12 +3,13 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; +import 'dart:io' as io; import 'package:meta/meta.dart'; import 'package:path/path.dart' as path; import 'application_package.dart'; +import 'base/file_system.dart'; import 'base/logger.dart'; import 'build_info.dart'; import 'device.dart'; @@ -77,12 +78,12 @@ } void registerSignalHandlers() { - ProcessSignal.SIGINT.watch().listen((ProcessSignal signal) async { + io.ProcessSignal.SIGINT.watch().listen((io.ProcessSignal signal) async { _resetTerminal(); await cleanupAfterSignal(); exit(0); }); - ProcessSignal.SIGTERM.watch().listen((ProcessSignal signal) async { + io.ProcessSignal.SIGTERM.watch().listen((io.ProcessSignal signal) async { _resetTerminal(); await cleanupAfterSignal(); exit(0); @@ -91,19 +92,19 @@ return; if (!supportsRestart) return; - ProcessSignal.SIGUSR1.watch().listen(_handleSignal); - ProcessSignal.SIGUSR2.watch().listen(_handleSignal); + io.ProcessSignal.SIGUSR1.watch().listen(_handleSignal); + io.ProcessSignal.SIGUSR2.watch().listen(_handleSignal); } bool _processingSignal = false; - Future<Null> _handleSignal(ProcessSignal signal) async { + Future<Null> _handleSignal(io.ProcessSignal signal) async { if (_processingSignal) { printTrace('Ignoring signal: "$signal" because we are busy.'); return; } _processingSignal = true; - final bool fullRestart = signal == ProcessSignal.SIGUSR2; + final bool fullRestart = signal == io.ProcessSignal.SIGUSR2; try { await restart(fullRestart: fullRestart); @@ -279,7 +280,7 @@ if (target == null) target = ''; String targetPath = path.absolute(target); - if (FileSystemEntity.isDirectorySync(targetPath)) + if (fs.isDirectorySync(targetPath)) return path.join(targetPath, 'lib', 'main.dart'); else return targetPath;
diff --git a/packages/flutter_tools/lib/src/run.dart b/packages/flutter_tools/lib/src/run.dart index b8a6562..4465f21 100644 --- a/packages/flutter_tools/lib/src/run.dart +++ b/packages/flutter_tools/lib/src/run.dart
@@ -3,12 +3,12 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; import 'package:meta/meta.dart'; import 'package:stack_trace/stack_trace.dart'; import 'application_package.dart'; +import 'base/file_system.dart'; import 'base/utils.dart'; import 'build_info.dart'; import 'commands/trace.dart'; @@ -68,7 +68,7 @@ }) async { if (!prebuiltMode) { _mainPath = findMainDartFile(target); - if (!FileSystemEntity.isFileSync(_mainPath)) { + if (!fs.isFileSync(_mainPath)) { String message = 'Tried to run $_mainPath, but that file does not exist.'; if (target == null) message += '\nConsider using the -t option to specify the Dart file to start.';
diff --git a/packages/flutter_tools/lib/src/runner/flutter_command.dart b/packages/flutter_tools/lib/src/runner/flutter_command.dart index 747bb1e..37c5eeb 100644 --- a/packages/flutter_tools/lib/src/runner/flutter_command.dart +++ b/packages/flutter_tools/lib/src/runner/flutter_command.dart
@@ -3,13 +3,13 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; import 'package:args/command_runner.dart'; import 'package:meta/meta.dart'; import '../application_package.dart'; import '../base/common.dart'; +import '../base/file_system.dart'; import '../build_info.dart'; import '../dart/package_map.dart'; import '../dart/pub.dart'; @@ -207,7 +207,7 @@ void commonCommandValidator() { if (!PackageMap.isUsingCustomPackagesPath) { // Don't expect a pubspec.yaml file if the user passed in an explicit .packages file path. - if (!FileSystemEntity.isFileSync('pubspec.yaml')) { + if (!fs.isFileSync('pubspec.yaml')) { throw new ToolExit('Error: No pubspec.yaml file found.\n' 'This command should be run from the root of your Flutter project.\n' 'Do not run this command from the root of your git clone of Flutter.'); @@ -216,7 +216,7 @@ if (_usesTargetOption) { String targetPath = targetFile; - if (!FileSystemEntity.isFileSync(targetPath)) + if (!fs.isFileSync(targetPath)) throw new ToolExit('Target file "$targetPath" not found.'); }
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 104cdbf..4d2078e 100644 --- a/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart +++ b/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart
@@ -3,7 +3,7 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io'; +import 'dart:io' as io; import 'package:args/args.dart'; import 'package:args/command_runner.dart'; @@ -12,6 +12,7 @@ import '../android/android_sdk.dart'; import '../base/common.dart'; import '../base/context.dart'; +import '../base/file_system.dart'; import '../base/logger.dart'; import '../base/process.dart'; import '../base/process_manager.dart'; @@ -67,7 +68,7 @@ help: 'Suppress analytics reporting when this command runs.'); String packagesHelp; - if (FileSystemEntity.isFileSync(kPackagesFileName)) + if (fs.isFileSync(kPackagesFileName)) packagesHelp = '\n(defaults to "$kPackagesFileName")'; else packagesHelp = '\n(required, since the current directory does not contain a "$kPackagesFileName" file)'; @@ -117,12 +118,12 @@ } static String get _defaultFlutterRoot { - if (Platform.environment.containsKey(kFlutterRootEnvironmentVariableName)) - return Platform.environment[kFlutterRootEnvironmentVariableName]; + if (io.Platform.environment.containsKey(kFlutterRootEnvironmentVariableName)) + return io.Platform.environment[kFlutterRootEnvironmentVariableName]; try { - if (Platform.script.scheme == 'data') + if (io.Platform.script.scheme == 'data') return '../..'; // we're running as a test - String script = Platform.script.toFilePath(); + String script = io.Platform.script.toFilePath(); if (path.basename(script) == kSnapshotFileName) return path.dirname(path.dirname(path.dirname(script))); if (path.basename(script) == kFlutterToolsScriptFileName) @@ -191,7 +192,7 @@ // enginePath's initialiser uses it). Cache.flutterRoot = path.normalize(path.absolute(globalResults['flutter-root'])); - if (Platform.environment['FLUTTER_ALREADY_LOCKED'] != 'true') + if (io.Platform.environment['FLUTTER_ALREADY_LOCKED'] != 'true') await Cache.lock(); if (globalResults['suppress-analytics']) @@ -225,20 +226,20 @@ } String _tryEnginePath(String enginePath) { - if (FileSystemEntity.isDirectorySync(path.join(enginePath, 'out'))) + if (fs.isDirectorySync(path.join(enginePath, 'out'))) return enginePath; return null; } String _findEnginePath(ArgResults globalResults) { - String engineSourcePath = globalResults['local-engine-src-path'] ?? Platform.environment[kFlutterEngineEnvironmentVariableName]; + String engineSourcePath = globalResults['local-engine-src-path'] ?? io.Platform.environment[kFlutterEngineEnvironmentVariableName]; if (engineSourcePath == null && globalResults['local-engine'] != null) { try { Uri engineUri = new PackageMap(PackageMap.globalPackagesPath).map[kFlutterEnginePackageName]; if (engineUri != null) { engineSourcePath = path.dirname(path.dirname(path.dirname(path.dirname(engineUri.path)))); - bool dirExists = FileSystemEntity.isDirectorySync(path.join(engineSourcePath, 'out')); + bool dirExists = fs.isDirectorySync(path.join(engineSourcePath, 'out')); if (engineSourcePath == '/' || engineSourcePath.isEmpty || !dirExists) engineSourcePath = null; } @@ -276,7 +277,7 @@ } String engineBuildPath = path.normalize(path.join(enginePath, 'out', localEngine)); - if (!FileSystemEntity.isDirectorySync(engineBuildPath)) { + if (!fs.isDirectorySync(engineBuildPath)) { printError('No Flutter engine build found at $engineBuildPath.'); throw new ProcessExit(2); } @@ -292,18 +293,18 @@ /// Get all pub packages in the Flutter repo. List<Directory> getRepoPackages() { return _gatherProjectPaths(path.absolute(Cache.flutterRoot)) - .map((String dir) => new Directory(dir)) + .map((String dir) => fs.directory(dir)) .toList(); } static List<String> _gatherProjectPaths(String rootPath) { - if (FileSystemEntity.isFileSync(path.join(rootPath, '.dartignore'))) + if (fs.isFileSync(path.join(rootPath, '.dartignore'))) return <String>[]; - if (FileSystemEntity.isFileSync(path.join(rootPath, 'pubspec.yaml'))) + if (fs.isFileSync(path.join(rootPath, 'pubspec.yaml'))) return <String>[rootPath]; - return new Directory(rootPath) + return fs.directory(rootPath) .listSync(followLinks: false) .expand((FileSystemEntity entity) { return entity is Directory ? _gatherProjectPaths(entity.path) : <String>[]; @@ -316,13 +317,13 @@ final String rootPath = path.absolute(Cache.flutterRoot); final List<Directory> result = <Directory>[ // not bin, and not the root - new Directory(path.join(rootPath, 'dev')), - new Directory(path.join(rootPath, 'examples')), + fs.directory(path.join(rootPath, 'dev')), + fs.directory(path.join(rootPath, 'examples')), ]; // And since analyzer refuses to look at paths that end in "packages/": result.addAll( _gatherProjectPaths(path.join(rootPath, 'packages')) - .map/*<Directory>*/((String path) => new Directory(path)) + .map/*<Directory>*/((String path) => fs.directory(path)) ); return result; } @@ -330,7 +331,7 @@ void _checkFlutterCopy() { // If the current directory is contained by a flutter repo, check that it's // the same flutter that is currently running. - String directory = path.normalize(path.absolute(Directory.current.path)); + String directory = path.normalize(path.absolute(fs.currentDirectory.path)); // Check if the cwd is a flutter dir. while (directory.isNotEmpty) { @@ -355,14 +356,14 @@ } // Check that the flutter running is that same as the one referenced in the pubspec. - if (FileSystemEntity.isFileSync(kPackagesFileName)) { + if (fs.isFileSync(kPackagesFileName)) { PackageMap packageMap = new PackageMap(kPackagesFileName); Uri flutterUri = packageMap.map['flutter']; if (flutterUri != null && (flutterUri.scheme == 'file' || flutterUri.scheme == '')) { // .../flutter/packages/flutter/lib Uri rootUri = flutterUri.resolve('../../..'); - String flutterPath = path.normalize(new File.fromUri(rootUri).absolute.path); + String flutterPath = path.normalize(fs.file(rootUri).absolute.path); if (!_compareResolvedPaths(flutterPath, Cache.flutterRoot)) { printError( @@ -381,14 +382,14 @@ // Check if `bin/flutter` and `bin/cache/engine.stamp` exist. bool _isDirectoryFlutterRepo(String directory) { return - FileSystemEntity.isFileSync(path.join(directory, 'bin/flutter')) && - FileSystemEntity.isFileSync(path.join(directory, 'bin/cache/engine.stamp')); + fs.isFileSync(path.join(directory, 'bin/flutter')) && + fs.isFileSync(path.join(directory, 'bin/cache/engine.stamp')); } } bool _compareResolvedPaths(String path1, String path2) { - path1 = new Directory(path.absolute(path1)).resolveSymbolicLinksSync(); - path2 = new Directory(path.absolute(path2)).resolveSymbolicLinksSync(); + path1 = fs.directory(path.absolute(path1)).resolveSymbolicLinksSync(); + path2 = fs.directory(path.absolute(path2)).resolveSymbolicLinksSync(); return path1 == path2; }
diff --git a/packages/flutter_tools/lib/src/services.dart b/packages/flutter_tools/lib/src/services.dart index 824dd14..fe20846 100644 --- a/packages/flutter_tools/lib/src/services.dart +++ b/packages/flutter_tools/lib/src/services.dart
@@ -4,11 +4,11 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:io'; import 'package:path/path.dart' as path; import 'package:yaml/yaml.dart'; +import 'base/file_system.dart'; import 'dart/package_map.dart'; import 'android/android_sdk.dart'; import 'globals.dart'; @@ -18,9 +18,9 @@ dynamic _loadYamlFile(String path) { printTrace("Looking for YAML at '$path'"); - if (!FileSystemEntity.isFileSync(path)) + if (!fs.isFileSync(path)) return null; - String manifestString = new File(path).readAsStringSync(); + String manifestString = fs.file(path).readAsStringSync(); return loadYaml(manifestString); } @@ -69,7 +69,7 @@ if (jars != null && serviceConfig['jars'] is Iterable) { for (String jar in serviceConfig['jars']) - jars.add(new File(await getServiceFromUrl(jar, serviceRoot, service, unzip: false))); + jars.add(fs.file(await getServiceFromUrl(jar, serviceRoot, service, unzip: false))); } } } @@ -106,7 +106,7 @@ }).toList(); Map<String, dynamic> json = <String, dynamic>{ 'services': services }; - File servicesFile = new File(path.join(dir, 'services.json')); + File servicesFile = fs.file(path.join(dir, 'services.json')); servicesFile.writeAsStringSync(JSON.encode(json), mode: FileMode.WRITE, flush: true); return servicesFile; }
diff --git a/packages/flutter_tools/lib/src/template.dart b/packages/flutter_tools/lib/src/template.dart index 60fcccc..fc164a2 100644 --- a/packages/flutter_tools/lib/src/template.dart +++ b/packages/flutter_tools/lib/src/template.dart
@@ -2,11 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:io'; - import 'package:mustache/mustache.dart' as mustache; import 'package:path/path.dart' as path; +import 'base/file_system.dart'; import 'cache.dart'; import 'globals.dart'; @@ -78,7 +77,7 @@ .replaceAll(_kTemplateExtension, ''); if (projectName != null) finalDestinationPath = finalDestinationPath.replaceAll('projectName', projectName); - File finalDestinationFile = new File(finalDestinationPath); + File finalDestinationFile = fs.file(finalDestinationPath); String relativePathForLogging = path.relative(finalDestinationFile.path); // Step 1: Check if the file needs to be overwritten. @@ -99,7 +98,7 @@ fileCount++; finalDestinationFile.createSync(recursive: true); - File sourceFile = new File(absoluteSrcPath); + File sourceFile = fs.file(absoluteSrcPath); // Step 2: If the absolute paths ends with a 'copy.tmpl', this file does // not need mustache rendering but needs to be directly copied. @@ -135,5 +134,5 @@ Directory _templateDirectoryInPackage(String name) { String templatesDir = path.join(Cache.flutterRoot, 'packages', 'flutter_tools', 'templates'); - return new Directory(path.join(templatesDir, name)); + return fs.directory(path.join(templatesDir, name)); }
diff --git a/packages/flutter_tools/lib/src/test/flutter_platform.dart b/packages/flutter_tools/lib/src/test/flutter_platform.dart index 9d1e629..67d6d37 100644 --- a/packages/flutter_tools/lib/src/test/flutter_platform.dart +++ b/packages/flutter_tools/lib/src/test/flutter_platform.dart
@@ -4,7 +4,7 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:io'; +import 'dart:io' as io; import 'dart:math' as math; import 'package:path/path.dart' as path; @@ -14,13 +14,14 @@ import 'package:test/src/runner/plugin/platform.dart'; // ignore: implementation_imports import 'package:test/src/runner/plugin/hack_register_platform.dart' as hack; // ignore: implementation_imports +import '../base/file_system.dart'; import '../base/process_manager.dart'; import '../dart/package_map.dart'; import '../globals.dart'; import 'coverage_collector.dart'; const Duration _kTestStartupTimeout = const Duration(seconds: 5); -final InternetAddress _kHost = InternetAddress.LOOPBACK_IP_V4; +final io.InternetAddress _kHost = io.InternetAddress.LOOPBACK_IP_V4; void installHook({ String shellPath }) { hack.registerPlatformPlugin(<TestPlatform>[TestPlatform.vm], () => new FlutterPlatform(shellPath: shellPath)); @@ -61,19 +62,19 @@ controller.sink.done.then((_) { controllerSinkClosed = true; }); // Prepare our WebSocket server to talk to the engine subproces. - HttpServer server = await HttpServer.bind(_kHost, 0); + io.HttpServer server = await io.HttpServer.bind(_kHost, 0); finalizers.add(() async { await server.close(force: true); }); - Completer<WebSocket> webSocket = new Completer<WebSocket>(); - server.listen((HttpRequest request) { - webSocket.complete(WebSocketTransformer.upgrade(request)); + Completer<io.WebSocket> webSocket = new Completer<io.WebSocket>(); + server.listen((io.HttpRequest request) { + webSocket.complete(io.WebSocketTransformer.upgrade(request)); }); // Prepare a temporary directory to store the Dart file that will talk to us. - Directory temporaryDirectory = Directory.systemTemp.createTempSync('dart_test_listener'); + Directory temporaryDirectory = fs.systemTempDirectory.createTempSync('dart_test_listener'); finalizers.add(() async { temporaryDirectory.deleteSync(recursive: true); }); // Prepare the Dart file that will talk to us and start the test. - File listenerFile = new File('${temporaryDirectory.path}/listener.dart'); + File listenerFile = fs.file('${temporaryDirectory.path}/listener.dart'); listenerFile.createSync(); listenerFile.writeAsStringSync(_generateTestMain( testUrl: path.toUri(path.absolute(testPath)).toString(), @@ -90,7 +91,7 @@ } // Start the engine subprocess. - Process process = await _startProcess( + io.Process process = await _startProcess( shellPath, listenerFile.path, packages: PackageMap.globalPackagesPath, @@ -119,7 +120,7 @@ _InitialResult initialResult = await Future.any(<Future<_InitialResult>>[ process.exitCode.then<_InitialResult>((int exitCode) { return _InitialResult.crashed; }), new Future<_InitialResult>.delayed(_kTestStartupTimeout, () { return _InitialResult.timedOut; }), - webSocket.future.then<_InitialResult>((WebSocket webSocket) { return _InitialResult.connected; }), + webSocket.future.then<_InitialResult>((io.WebSocket webSocket) { return _InitialResult.connected; }), ]); switch (initialResult) { @@ -137,7 +138,7 @@ await controller.sink.done; break; case _InitialResult.connected: - WebSocket testSocket = await webSocket.future; + io.WebSocket testSocket = await webSocket.future; Completer<Null> harnessDone = new Completer<Null>(); StreamSubscription<dynamic> harnessToTest = controller.stream.listen( @@ -248,15 +249,15 @@ sb.writeln(' <cachedir>/var/cache/fontconfig</cachedir>'); sb.writeln('</fontconfig>'); - Directory fontsDir = Directory.systemTemp.createTempSync('flutter_fonts'); - _cachedFontConfig = new File('${fontsDir.path}/fonts.conf'); + Directory fontsDir = fs.systemTempDirectory.createTempSync('flutter_fonts'); + _cachedFontConfig = fs.file('${fontsDir.path}/fonts.conf'); _cachedFontConfig.createSync(); _cachedFontConfig.writeAsStringSync(sb.toString()); return _cachedFontConfig; } - Future<Process> _startProcess(String executable, String testPath, { String packages, int observatoryPort }) { + Future<io.Process> _startProcess(String executable, String testPath, { String packages, int observatoryPort }) { assert(executable != null); // Please provide the path to the shell in the SKY_SHELL environment variable. List<String> arguments = <String>[]; if (observatoryPort != null) { @@ -279,7 +280,7 @@ return processManager.start(executable, arguments, environment: environment); } - void _pipeStandardStreamsToConsole(Process process) { + void _pipeStandardStreamsToConsole(io.Process process) { for (Stream<List<int>> stream in <Stream<List<int>>>[process.stderr, process.stdout]) { stream.transform(UTF8.decoder)
diff --git a/packages/flutter_tools/lib/src/toolchain.dart b/packages/flutter_tools/lib/src/toolchain.dart index 3145377..53cb1d0 100644 --- a/packages/flutter_tools/lib/src/toolchain.dart +++ b/packages/flutter_tools/lib/src/toolchain.dart
@@ -2,11 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:io'; - import 'package:path/path.dart' as path; import 'base/context.dart'; +import 'base/file_system.dart'; import 'build_info.dart'; import 'cache.dart'; import 'globals.dart'; @@ -50,14 +49,14 @@ Directory _getEngineArtifactsDirectory(TargetPlatform platform, BuildMode mode) { if (engineBuildPath != null) { - return new Directory(engineBuildPath); + return fs.directory(engineBuildPath); } else { String suffix = mode != BuildMode.debug ? '-${getModeName(mode)}' : ''; // Create something like `android-arm` or `android-arm-release`. String dirName = getNameForTargetPlatform(platform) + suffix; Directory engineDir = cache.getArtifactDirectory('engine'); - return new Directory(path.join(engineDir.path, dirName)); + return fs.directory(path.join(engineDir.path, dirName)); } } @@ -70,7 +69,7 @@ if (tool == HostTool.SkySnapshot) { String clangPath = path.join(engineBuildPath, 'clang_x64', 'sky_snapshot'); - if (FileSystemEntity.isFileSync(clangPath)) + if (fs.isFileSync(clangPath)) return clangPath; return path.join(engineBuildPath, 'sky_snapshot'); } else if (tool == HostTool.SkyShell) {
diff --git a/packages/flutter_tools/lib/src/zip.dart b/packages/flutter_tools/lib/src/zip.dart index d1929cb..332b913 100644 --- a/packages/flutter_tools/lib/src/zip.dart +++ b/packages/flutter_tools/lib/src/zip.dart
@@ -2,12 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:io'; - import 'package:archive/archive.dart'; import 'package:path/path.dart' as path; import 'asset.dart'; +import 'base/file_system.dart'; import 'base/process.dart'; abstract class ZipBuilder { @@ -66,7 +65,7 @@ for (AssetBundleEntry entry in entries) { List<int> data = entry.contentsAsBytes(); - File file = new File(path.join(zipBuildDir.path, entry.archivePath)); + File file = fs.file(path.join(zipBuildDir.path, entry.archivePath)); file.parent.createSync(recursive: true); file.writeAsBytesSync(data); }