[flutter_tools] Make Config context-free (#49834)

diff --git a/packages/flutter_tools/lib/src/android/gradle.dart b/packages/flutter_tools/lib/src/android/gradle.dart
index 054a354..28eaab5 100644
--- a/packages/flutter_tools/lib/src/android/gradle.dart
+++ b/packages/flutter_tools/lib/src/android/gradle.dart
@@ -549,7 +549,7 @@
 
     // Copy the local engine repo in the output directory.
     try {
-      fsUtils.copyDirectorySync(
+      globals.fsUtils.copyDirectorySync(
         localEngineRepo,
         getRepoDirectory(outputDirectory),
       );
diff --git a/packages/flutter_tools/lib/src/android/gradle_utils.dart b/packages/flutter_tools/lib/src/android/gradle_utils.dart
index 42b6b43..3a192fc 100644
--- a/packages/flutter_tools/lib/src/android/gradle_utils.dart
+++ b/packages/flutter_tools/lib/src/android/gradle_utils.dart
@@ -97,7 +97,7 @@
 
   /// Injects the Gradle wrapper files if any of these files don't exist in [directory].
   void injectGradleWrapperIfNeeded(Directory directory) {
-    fsUtils.copyDirectorySync(
+    globals.fsUtils.copyDirectorySync(
       globals.cache.getArtifactDirectory('gradle_wrapper'),
       directory,
       shouldCopyFile: (File sourceFile, File destinationFile) {
@@ -266,10 +266,10 @@
   }
 
   if (androidSdk != null) {
-    changeIfNecessary('sdk.dir', fsUtils.escapePath(androidSdk.directory));
+    changeIfNecessary('sdk.dir', globals.fsUtils.escapePath(androidSdk.directory));
   }
 
-  changeIfNecessary('flutter.sdk', fsUtils.escapePath(Cache.flutterRoot));
+  changeIfNecessary('flutter.sdk', globals.fsUtils.escapePath(Cache.flutterRoot));
   if (buildInfo != null) {
     changeIfNecessary('flutter.buildMode', buildInfo.modeName);
     final String buildName = validatedBuildNameForPlatform(
@@ -295,7 +295,7 @@
 void writeLocalProperties(File properties) {
   final SettingsFile settings = SettingsFile();
   if (androidSdk != null) {
-    settings.values['sdk.dir'] = fsUtils.escapePath(androidSdk.directory);
+    settings.values['sdk.dir'] = globals.fsUtils.escapePath(androidSdk.directory);
   }
   settings.writeContents(properties);
 }
diff --git a/packages/flutter_tools/lib/src/base/config.dart b/packages/flutter_tools/lib/src/base/config.dart
index 3f69bf2..2a45bf6 100644
--- a/packages/flutter_tools/lib/src/base/config.dart
+++ b/packages/flutter_tools/lib/src/base/config.dart
@@ -2,36 +2,40 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'package:meta/meta.dart';
+
 import '../convert.dart';
-import '../globals.dart' as globals;
 import 'file_system.dart';
 import 'logger.dart';
 import 'utils.dart';
 
 class Config {
-  Config([File configFile, Logger localLogger]) {
-    final Logger loggerInstance = localLogger ?? globals.logger;
-    _configFile = configFile ?? globals.fs.file(globals.fs.path.join(
-      fsUtils.userHomePath,
-      '.flutter_settings',
-    ));
-    if (_configFile.existsSync()) {
-      try {
-        _values = castStringKeyedMap(json.decode(_configFile.readAsStringSync()));
-      } on FormatException {
-        loggerInstance
-          ..printError('Failed to decode preferences in ${_configFile.path}.')
-          ..printError(
-              'You may need to reapply any previously saved configuration '
-              'with the "flutter config" command.',
-          );
-        _configFile.deleteSync();
-      }
+  Config({
+    @required File file,
+    @required Logger logger,
+  }) : _file = file, _logger = logger {
+    if (!_file.existsSync()) {
+      return;
+    }
+    try {
+      _values = castStringKeyedMap(json.decode(_file.readAsStringSync()));
+    } on FormatException {
+      _logger
+        ..printError('Failed to decode preferences in ${_file.path}.')
+        ..printError(
+            'You may need to reapply any previously saved configuration '
+            'with the "flutter config" command.',
+        );
+      _file.deleteSync();
     }
   }
 
-  File _configFile;
-  String get configPath => _configFile.path;
+  static const String kFlutterSettings = '.flutter_settings';
+
+  final File _file;
+  final Logger _logger;
+
+  String get configPath => _file.path;
 
   Map<String, dynamic> _values = <String, dynamic>{};
 
@@ -54,6 +58,6 @@
   void _flushValues() {
     String json = const JsonEncoder.withIndent('  ').convert(_values);
     json = '$json\n';
-    _configFile.writeAsStringSync(json);
+    _file.writeAsStringSync(json);
   }
 }
diff --git a/packages/flutter_tools/lib/src/base/file_system.dart b/packages/flutter_tools/lib/src/base/file_system.dart
index 089101a..7d418ff 100644
--- a/packages/flutter_tools/lib/src/base/file_system.dart
+++ b/packages/flutter_tools/lib/src/base/file_system.dart
@@ -6,9 +6,7 @@
 import 'package:meta/meta.dart';
 import 'package:platform/platform.dart';
 
-import '../globals.dart' as globals;
 import 'common.dart' show throwToolExit;
-import 'context.dart';
 
 export 'package:file/file.dart';
 export 'package:file/local.dart';
@@ -23,13 +21,6 @@
   String toString() => 'File not found: $path';
 }
 
-final FileSystemUtils _defaultFileSystemUtils = FileSystemUtils(
-  fileSystem: globals.fs,
-  platform: globals.platform,
-);
-
-FileSystemUtils get fsUtils => context.get<FileSystemUtils>() ?? _defaultFileSystemUtils;
-
 /// Various convenience file system methods.
 class FileSystemUtils {
   FileSystemUtils({
diff --git a/packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart b/packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart
index 670b8c6..02d477c 100644
--- a/packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart
+++ b/packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart
@@ -397,7 +397,7 @@
     }
     final String modeName = debuggingOptions.buildInfo.friendlyModeName;
     globals.printStatus(
-      'Launching ${fsUtils.getDisplayPath(target)} '
+      'Launching ${globals.fsUtils.getDisplayPath(target)} '
       'on ${device.device.name} in $modeName mode...',
     );
     final String effectiveHostname = debuggingOptions.hostname ?? 'localhost';
@@ -641,7 +641,7 @@
     }
     final String modeName = debuggingOptions.buildInfo.friendlyModeName;
     globals.printStatus(
-      'Launching ${fsUtils.getDisplayPath(target)} '
+      'Launching ${globals.fsUtils.getDisplayPath(target)} '
       'on ${device.device.name} in $modeName mode...',
     );
     Status buildStatus;
diff --git a/packages/flutter_tools/lib/src/build_runner/web_compilation_delegate.dart b/packages/flutter_tools/lib/src/build_runner/web_compilation_delegate.dart
index 24da164..52b7405 100644
--- a/packages/flutter_tools/lib/src/build_runner/web_compilation_delegate.dart
+++ b/packages/flutter_tools/lib/src/build_runner/web_compilation_delegate.dart
@@ -87,7 +87,7 @@
           'packages',
           globals.fs.path.basename(childDirectory.path),
         );
-        fsUtils.copyDirectorySync(
+        globals.fsUtils.copyDirectorySync(
           childDirectory.childDirectory('lib'),
           globals.fs.directory(path),
         );
@@ -95,7 +95,7 @@
       final Directory outputDirectory = rootDirectory
         .childDirectory(projectName)
         .childDirectory('test');
-      fsUtils.copyDirectorySync(
+      globals.fsUtils.copyDirectorySync(
         outputDirectory,
         globals.fs.directory(globals.fs.path.join(testOutputDir)),
       );
diff --git a/packages/flutter_tools/lib/src/build_system/targets/assets.dart b/packages/flutter_tools/lib/src/build_system/targets/assets.dart
index a0d185d..d72c797 100644
--- a/packages/flutter_tools/lib/src/build_system/targets/assets.dart
+++ b/packages/flutter_tools/lib/src/build_system/targets/assets.dart
@@ -124,7 +124,7 @@
     final FlutterProject project = FlutterProject.fromDirectory(environment.projectDir);
     final List<Plugin> plugins = findPlugins(project);
     final String pluginManifest = plugins
-      .map<String>((Plugin p) => '${p.name}=${fsUtils.escapePath(p.path)}')
+      .map<String>((Plugin p) => '${p.name}=${globals.fsUtils.escapePath(p.path)}')
       .join('\n');
     final File flutterPluginsFile = environment.projectDir.childFile('.flutter-plugins');
     if (!flutterPluginsFile.existsSync() || flutterPluginsFile.readAsStringSync() != pluginManifest) {
diff --git a/packages/flutter_tools/lib/src/cache.dart b/packages/flutter_tools/lib/src/cache.dart
index 4d3b5fa..bbe6cd9 100644
--- a/packages/flutter_tools/lib/src/cache.dart
+++ b/packages/flutter_tools/lib/src/cache.dart
@@ -106,6 +106,7 @@
     // TODO(zra): Move to initializer list once logger and platform parameters
     // are required.
     _net = Net(logger: _logger, platform: _platform);
+    _fsUtils = FileSystemUtils(fileSystem: _fileSystem, platform: _platform);
     if (artifacts == null) {
       _artifacts.add(MaterialFonts(this));
 
@@ -139,6 +140,7 @@
   final OperatingSystemUtils _osUtils;
 
   Net _net;
+  FileSystemUtils _fsUtils;
 
   static const List<String> _hostsBlockedInChina = <String> [
     'storage.googleapis.com',
@@ -347,9 +349,12 @@
   }
 
   String getVersionFor(String artifactName) {
-    final File versionFile = _fileSystem.file(globals.fs.path.join(
-        _rootOverride?.path ?? flutterRoot, 'bin', 'internal',
-        '$artifactName.version'));
+    final File versionFile = _fileSystem.file(_fileSystem.path.join(
+      _rootOverride?.path ?? flutterRoot,
+      'bin',
+      'internal',
+      '$artifactName.version',
+    ));
     return versionFile.existsSync() ? versionFile.readAsStringSync().trim() : null;
   }
 
@@ -370,7 +375,7 @@
   /// [entity] doesn't exist.
   bool isOlderThanToolsStamp(FileSystemEntity entity) {
     final File flutterToolsStamp = getStampFileFor('flutter_tools');
-    return fsUtils.isOlderThanReference(
+    return _fsUtils.isOlderThanReference(
       entity: entity,
       referenceFile: flutterToolsStamp,
     );
@@ -382,13 +387,19 @@
     final Uri url = Uri.parse(urlStr);
     final Directory thirdPartyDir = getArtifactDirectory('third_party');
 
-    final Directory serviceDir = _fileSystem.directory(_fileSystem.path.join(thirdPartyDir.path, serviceName));
+    final Directory serviceDir = _fileSystem.directory(_fileSystem.path.join(
+      thirdPartyDir.path,
+      serviceName,
+    ));
     if (!serviceDir.existsSync()) {
       serviceDir.createSync(recursive: true);
       _osUtils.chmod(serviceDir, '755');
     }
 
-    final File cachedFile = _fileSystem.file(_fileSystem.path.join(serviceDir.path, url.pathSegments.last));
+    final File cachedFile = _fileSystem.file(_fileSystem.path.join(
+      serviceDir.path,
+      url.pathSegments.last,
+    ));
     if (!cachedFile.existsSync()) {
       try {
         await downloadFile(url, cachedFile);
@@ -452,7 +463,7 @@
   }
 
   Future<bool> doesRemoteExist(String message, Uri url) async {
-    final Status status = globals.logger.startProgress(
+    final Status status = _logger.startProgress(
       message,
       timeout: timeoutConfiguration.slowOperation,
     );
@@ -971,7 +982,7 @@
       );
     try {
       final String gradleExecutable = gradle.absolute.path;
-      final String flutterSdk = fsUtils.escapePath(Cache.flutterRoot);
+      final String flutterSdk = globals.fsUtils.escapePath(Cache.flutterRoot);
       final RunResult processResult = await processUtils.run(
         <String>[
           gradleExecutable,
diff --git a/packages/flutter_tools/lib/src/commands/build_ios_framework.dart b/packages/flutter_tools/lib/src/commands/build_ios_framework.dart
index cd396c7..86ea5a8 100644
--- a/packages/flutter_tools/lib/src/commands/build_ios_framework.dart
+++ b/packages/flutter_tools/lib/src/commands/build_ios_framework.dart
@@ -294,7 +294,7 @@
 
     try {
       // Copy universal engine cache framework to mode directory.
-      fsUtils.copyDirectorySync(
+      globals.fsUtils.copyDirectorySync(
         globals.fs.directory(engineCacheFlutterFrameworkDirectory),
         fatFlutterFrameworkCopy,
       );
@@ -523,7 +523,7 @@
           }
           final String binaryName = globals.fs.path.basenameWithoutExtension(podFrameworkName);
           if (boolArg('universal')) {
-            fsUtils.copyDirectorySync(
+            globals.fsUtils.copyDirectorySync(
               podProduct as Directory,
               modeDirectory.childDirectory(podFrameworkName),
             );
@@ -637,7 +637,7 @@
         .childDirectory(frameworkFileName);
       final File armFlutterFrameworkBinary = armFlutterFrameworkDirectory
         .childFile(frameworkBinaryName);
-      fsUtils.copyDirectorySync(fatFramework, armFlutterFrameworkDirectory);
+      globals.fsUtils.copyDirectorySync(fatFramework, armFlutterFrameworkDirectory);
 
       // Create iOS framework.
       List<String> lipoCommand = <String>[
@@ -664,7 +664,7 @@
         .childDirectory(frameworkFileName);
       final File simulatorFlutterFrameworkBinary = simulatorFlutterFrameworkDirectory
         .childFile(frameworkBinaryName);
-      fsUtils.copyDirectorySync(fatFramework, simulatorFlutterFrameworkDirectory);
+      globals.fsUtils.copyDirectorySync(fatFramework, simulatorFlutterFrameworkDirectory);
 
       lipoCommand = <String>[
         'xcrun',
diff --git a/packages/flutter_tools/lib/src/commands/create.dart b/packages/flutter_tools/lib/src/commands/create.dart
index ea11e67..484ea58 100644
--- a/packages/flutter_tools/lib/src/commands/create.dart
+++ b/packages/flutter_tools/lib/src/commands/create.dart
@@ -659,7 +659,7 @@
 
   int _injectGradleWrapper(FlutterProject project) {
     int filesCreated = 0;
-    fsUtils.copyDirectorySync(
+    globals.fsUtils.copyDirectorySync(
       globals.cache.getArtifactDirectory('gradle_wrapper'),
       project.android.hostAppGradleRoot,
       onFileCopied: (File sourceFile, File destinationFile) {
diff --git a/packages/flutter_tools/lib/src/commands/screenshot.dart b/packages/flutter_tools/lib/src/commands/screenshot.dart
index f2fd48f..d126fea 100644
--- a/packages/flutter_tools/lib/src/commands/screenshot.dart
+++ b/packages/flutter_tools/lib/src/commands/screenshot.dart
@@ -109,7 +109,7 @@
   }
 
   Future<void> runScreenshot(File outputFile) async {
-    outputFile ??= fsUtils.getUniqueFile(
+    outputFile ??= globals.fsUtils.getUniqueFile(
       globals.fs.currentDirectory,
       'flutter',
       'png',
@@ -124,7 +124,7 @@
 
   Future<void> runSkia(File outputFile) async {
     final Map<String, dynamic> skp = await _invokeVmServiceRpc('_flutter.screenshotSkp');
-    outputFile ??= fsUtils.getUniqueFile(
+    outputFile ??= globals.fsUtils.getUniqueFile(
       globals.fs.currentDirectory,
       'flutter',
       'skp',
@@ -138,7 +138,7 @@
 
   Future<void> runRasterizer(File outputFile) async {
     final Map<String, dynamic> response = await _invokeVmServiceRpc('_flutter.screenshot');
-    outputFile ??= fsUtils.getUniqueFile(
+    outputFile ??= globals.fsUtils.getUniqueFile(
       globals.fs.currentDirectory,
       'flutter',
       'png',
diff --git a/packages/flutter_tools/lib/src/commands/unpack.dart b/packages/flutter_tools/lib/src/commands/unpack.dart
index c3861e8..07587d6 100644
--- a/packages/flutter_tools/lib/src/commands/unpack.dart
+++ b/packages/flutter_tools/lib/src/commands/unpack.dart
@@ -189,7 +189,7 @@
         final String sourcePath = globals.fs.path.join(sourceDirectory, entityName);
         final String targetPath = globals.fs.path.join(targetDirectory, entityName);
         if (entityName.endsWith('/')) {
-          fsUtils.copyDirectorySync(
+          globals.fsUtils.copyDirectorySync(
             globals.fs.directory(sourcePath),
             globals.fs.directory(targetPath),
           );
diff --git a/packages/flutter_tools/lib/src/context_runner.dart b/packages/flutter_tools/lib/src/context_runner.dart
index fd2c618..232d5d0 100644
--- a/packages/flutter_tools/lib/src/context_runner.dart
+++ b/packages/flutter_tools/lib/src/context_runner.dart
@@ -87,7 +87,13 @@
       ChromeLauncher: () => const ChromeLauncher(),
       CocoaPods: () => CocoaPods(),
       CocoaPodsValidator: () => const CocoaPodsValidator(),
-      Config: () => Config(),
+      Config: () => Config(
+        file: globals.fs.file(globals.fs.path.join(
+          globals.fsUtils.userHomePath,
+          Config.kFlutterSettings,
+        )),
+        logger: globals.logger,
+      ),
       DevFSConfig: () => DevFSConfig(),
       DeviceManager: () => DeviceManager(),
       Doctor: () => const Doctor(),
diff --git a/packages/flutter_tools/lib/src/globals.dart b/packages/flutter_tools/lib/src/globals.dart
index ab7d62a..278b762 100644
--- a/packages/flutter_tools/lib/src/globals.dart
+++ b/packages/flutter_tools/lib/src/globals.dart
@@ -35,6 +35,12 @@
   context.get<FileSystem>() ?? _kLocalFs,
 );
 
+final FileSystemUtils _defaultFileSystemUtils = FileSystemUtils(
+  fileSystem: fs,
+  platform: platform,
+);
+
+FileSystemUtils get fsUtils => context.get<FileSystemUtils>() ?? _defaultFileSystemUtils;
 
 const ProcessManager _kLocalProcessManager = LocalProcessManager();
 
diff --git a/packages/flutter_tools/lib/src/ios/mac.dart b/packages/flutter_tools/lib/src/ios/mac.dart
index e35de71..467aaf5 100644
--- a/packages/flutter_tools/lib/src/ios/mac.dart
+++ b/packages/flutter_tools/lib/src/ios/mac.dart
@@ -547,7 +547,7 @@
         // (for example, kernel binary files produced from previous run).
         globals.fs.directory(outputDir).deleteSync(recursive: true);
       }
-      fsUtils.copyDirectorySync(
+      globals.fsUtils.copyDirectorySync(
         globals.fs.directory(expectedOutputDirectory),
         globals.fs.directory(outputDir),
       );
diff --git a/packages/flutter_tools/lib/src/persistent_tool_state.dart b/packages/flutter_tools/lib/src/persistent_tool_state.dart
index 3717ba0..2dee5b1 100644
--- a/packages/flutter_tools/lib/src/persistent_tool_state.dart
+++ b/packages/flutter_tools/lib/src/persistent_tool_state.dart
@@ -25,10 +25,13 @@
 
 class _DefaultPersistentToolState implements PersistentToolState {
   _DefaultPersistentToolState([File configFile]) :
-    _config = Config(configFile ?? globals.fs.file(globals.fs.path.join(
-      fsUtils.userHomePath,
-      _kFileName,
-    )));
+    _config = Config(
+      file: configFile ?? globals.fs.file(globals.fs.path.join(
+        globals.fsUtils.userHomePath,
+        _kFileName,
+      )),
+      logger: globals.logger,
+    );
 
   static const String _kFileName = '.flutter_tool_state';
   static const String _kRedisplayWelcomeMessage = 'redisplay-welcome-message';
diff --git a/packages/flutter_tools/lib/src/plugins.dart b/packages/flutter_tools/lib/src/plugins.dart
index 5772e32..3e71a61 100644
--- a/packages/flutter_tools/lib/src/plugins.dart
+++ b/packages/flutter_tools/lib/src/plugins.dart
@@ -329,7 +329,7 @@
     for (final Plugin plugin in platformPlugins) {
       list.add(<String, dynamic>{
         'name': plugin.name,
-        'path': fsUtils.escapePath(plugin.path),
+        'path': globals.fsUtils.escapePath(plugin.path),
         'dependencies': <String>[...plugin.dependencies.where(pluginNames.contains)],
       });
     }
@@ -468,7 +468,7 @@
   final StringBuffer flutterPluginsBuffer = StringBuffer('# $info\n');
 
   for (final Plugin plugin in plugins) {
-    flutterPluginsBuffer.write('${plugin.name}=${fsUtils.escapePath(plugin.path)}\n');
+    flutterPluginsBuffer.write('${plugin.name}=${globals.fsUtils.escapePath(plugin.path)}\n');
   }
   final String oldPluginFileContent = _readFileContent(pluginsFile);
   final String pluginFileContent = flutterPluginsBuffer.toString();
diff --git a/packages/flutter_tools/lib/src/project.dart b/packages/flutter_tools/lib/src/project.dart
index 2340a7a..d6b3fd0 100644
--- a/packages/flutter_tools/lib/src/project.dart
+++ b/packages/flutter_tools/lib/src/project.dart
@@ -481,7 +481,7 @@
     if (!isModule) {
       return;
     }
-    final bool pubspecChanged = fsUtils.isOlderThanReference(
+    final bool pubspecChanged = globals.fsUtils.isOlderThanReference(
       entity: ephemeralDirectory,
       referenceFile: parent.pubspecFile,
     );
@@ -528,7 +528,7 @@
           .childDirectory('Flutter')
           .childDirectory('engine');
       final File podspec = framework.parent.childFile('Flutter.podspec');
-      fsUtils.copyDirectorySync(
+      globals.fsUtils.copyDirectorySync(
         framework,
         engineDest.childDirectory('Flutter.framework'),
       );
@@ -689,7 +689,7 @@
   }
 
   bool _shouldRegenerateFromTemplate() {
-    return fsUtils.isOlderThanReference(
+    return globals.fsUtils.isOlderThanReference(
       entity: ephemeralDirectory,
       referenceFile: parent.pubspecFile,
     ) || globals.cache.isOlderThanToolsStamp(ephemeralDirectory);
diff --git a/packages/flutter_tools/lib/src/resident_runner.dart b/packages/flutter_tools/lib/src/resident_runner.dart
index e43d377..c660ece 100644
--- a/packages/flutter_tools/lib/src/resident_runner.dart
+++ b/packages/flutter_tools/lib/src/resident_runner.dart
@@ -406,7 +406,7 @@
     final bool prebuiltMode = hotRunner.applicationBinary != null;
     final String modeName = hotRunner.debuggingOptions.buildInfo.friendlyModeName;
     globals.printStatus(
-      'Launching ${fsUtils.getDisplayPath(hotRunner.mainPath)} '
+      'Launching ${globals.fsUtils.getDisplayPath(hotRunner.mainPath)} '
       'on ${device.name} in $modeName mode...',
     );
 
@@ -481,7 +481,7 @@
       );
     } else {
       globals.printStatus(
-        'Launching ${fsUtils.getDisplayPath(coldRunner.mainPath)} '
+        'Launching ${globals.fsUtils.getDisplayPath(coldRunner.mainPath)} '
         'on ${device.name} in $modeName mode...',
       );
     }
@@ -862,7 +862,7 @@
       'Taking screenshot for ${device.device.name}...',
       timeout: timeoutConfiguration.fastOperation,
     );
-    final File outputFile = fsUtils.getUniqueFile(
+    final File outputFile = globals.fsUtils.getUniqueFile(
       globals.fs.currentDirectory,
       'flutter',
       'png',
diff --git a/packages/flutter_tools/lib/src/test/test_compiler.dart b/packages/flutter_tools/lib/src/test/test_compiler.dart
index a876544..06b0c90 100644
--- a/packages/flutter_tools/lib/src/test/test_compiler.dart
+++ b/packages/flutter_tools/lib/src/test/test_compiler.dart
@@ -160,7 +160,7 @@
           // The idea is to keep the cache file up-to-date and include as
           // much as possible in an effort to re-use as many packages as
           // possible.
-          fsUtils.ensureDirectoryExists(testFilePath);
+          globals.fsUtils.ensureDirectoryExists(testFilePath);
           await outputFile.copy(testFilePath);
         }
         request.result.complete(kernelReadyToRun.path);