From ddab09f5532bcccd108445e479b7976d128d5285 Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Thu, 8 Oct 2020 13:40:19 -0700 Subject: [PATCH] [flutter_tools] enable LocalDevFSWriter for desktop devices, iOS simulator (#66678) * [flutter_tools] enable LocalDevFSWriter for desktop devices, iOS simulator * Update device.dart * Update desktop_device_test.dart * fix analysis errors --- packages/flutter_tools/lib/src/desktop_device.dart | 6 ++++-- packages/flutter_tools/lib/src/device.dart | 13 +++++++++++++ packages/flutter_tools/lib/src/ios/simulators.dart | 6 ++++-- packages/flutter_tools/lib/src/resident_runner.dart | 6 +++++- .../test/general.shard/desktop_device_test.dart | 7 +++++++ .../test/general.shard/ios/simulators_test.dart | 11 +++++++++++ 6 files changed, 44 insertions(+), 5 deletions(-) diff --git a/packages/flutter_tools/lib/src/desktop_device.dart b/packages/flutter_tools/lib/src/desktop_device.dart index 917a6e08f1f..e771a7fd33a 100644 --- a/packages/flutter_tools/lib/src/desktop_device.dart +++ b/packages/flutter_tools/lib/src/desktop_device.dart @@ -47,8 +47,10 @@ abstract class DesktopDevice extends Device { final Set _runningProcesses = {}; final DesktopLogReader _deviceLogReader = DesktopLogReader(); - DevFSWriter get devFSWriter => _desktopDevFSWriter ??= LocalDevFSWriter(fileSystem: _fileSystem); - LocalDevFSWriter _desktopDevFSWriter; + @override + DevFSWriter createDevFSWriter(covariant ApplicationPackage app, String userIdentifier) { + return LocalDevFSWriter(fileSystem: _fileSystem); + } // Since the host and target devices are the same, no work needs to be done // to install the application. diff --git a/packages/flutter_tools/lib/src/device.dart b/packages/flutter_tools/lib/src/device.dart index 71a71c46394..85b2740fd65 100644 --- a/packages/flutter_tools/lib/src/device.dart +++ b/packages/flutter_tools/lib/src/device.dart @@ -27,6 +27,7 @@ import 'base/terminal.dart'; import 'base/user_messages.dart' hide userMessages; import 'base/utils.dart'; import 'build_info.dart'; +import 'devfs.dart'; import 'features.dart'; import 'fuchsia/fuchsia_device.dart'; import 'fuchsia/fuchsia_sdk.dart'; @@ -622,6 +623,18 @@ abstract class Device { Future get sdkNameAndVersion; + /// Create a platform-specific [DevFSWriter] for the given [app], or + /// null if the device does not support them. + /// + /// For example, the destkop device classes can use a writer which + /// copies the files across the local file system. + DevFSWriter createDevFSWriter( + covariant ApplicationPackage app, + String userIdentifier, + ) { + return null; + } + /// Get a log reader for this device. /// /// If `app` is specified, this will return a log reader specific to that diff --git a/packages/flutter_tools/lib/src/ios/simulators.dart b/packages/flutter_tools/lib/src/ios/simulators.dart index 6c1ebe3b745..c013ca08c9a 100644 --- a/packages/flutter_tools/lib/src/ios/simulators.dart +++ b/packages/flutter_tools/lib/src/ios/simulators.dart @@ -296,8 +296,10 @@ class IOSSimulator extends Device { final SimControl _simControl; final Xcode _xcode; - DevFSWriter get devFSWriter => _desktopDevFSWriter ??= LocalDevFSWriter(fileSystem: globals.fs); - LocalDevFSWriter _desktopDevFSWriter; + @override + DevFSWriter createDevFSWriter(covariant ApplicationPackage app, String userIdentifier) { + return LocalDevFSWriter(fileSystem: globals.fs); + } @override Future get isLocalEmulator async => true; diff --git a/packages/flutter_tools/lib/src/resident_runner.dart b/packages/flutter_tools/lib/src/resident_runner.dart index f2282ea17f5..995be0e4dd7 100644 --- a/packages/flutter_tools/lib/src/resident_runner.dart +++ b/packages/flutter_tools/lib/src/resident_runner.dart @@ -185,6 +185,8 @@ class FlutterDevice { final ResidentCompiler generator; final BuildInfo buildInfo; final String userIdentifier; + + DevFSWriter devFSWriter; Stream observatoryUris; vm_service.VmService vmService; DevFS devFS; @@ -573,6 +575,7 @@ class FlutterDevice { globals.printError(message); return 1; } + devFSWriter = device.createDevFSWriter(package, userIdentifier); final Map platformArgs = {}; @@ -620,6 +623,7 @@ class FlutterDevice { buildInfo: coldRunner.debuggingOptions.buildInfo, applicationBinary: coldRunner.applicationBinary, ); + devFSWriter = device.createDevFSWriter(package, userIdentifier); final String modeName = coldRunner.debuggingOptions.buildInfo.friendlyModeName; final bool prebuiltMode = coldRunner.applicationBinary != null; @@ -715,7 +719,7 @@ class FlutterDevice { pathToReload: pathToReload, invalidatedFiles: invalidatedFiles, packageConfig: packageConfig, - devFSWriter: null, + devFSWriter: devFSWriter, ); } on DevFSException { devFSStatus.cancel(); diff --git a/packages/flutter_tools/test/general.shard/desktop_device_test.dart b/packages/flutter_tools/test/general.shard/desktop_device_test.dart index 319bc7929d3..76a5604d757 100644 --- a/packages/flutter_tools/test/general.shard/desktop_device_test.dart +++ b/packages/flutter_tools/test/general.shard/desktop_device_test.dart @@ -11,6 +11,7 @@ import 'package:flutter_tools/src/base/logger.dart'; import 'package:flutter_tools/src/base/os.dart'; import 'package:flutter_tools/src/build_info.dart'; import 'package:flutter_tools/src/desktop_device.dart'; +import 'package:flutter_tools/src/devfs.dart'; import 'package:flutter_tools/src/device.dart'; import 'package:flutter_tools/src/project.dart'; @@ -242,6 +243,12 @@ void main() { expect(result, 2); expect(portForwarder.forwardedPorts.isEmpty, true); }); + + testUsingContext('createDevFSWriter returns a LocalDevFSWriter', () { + final FakeDesktopDevice device = setUpDesktopDevice(); + + expect(device.createDevFSWriter(null, ''), isA()); + }); } FakeDesktopDevice setUpDesktopDevice({ diff --git a/packages/flutter_tools/test/general.shard/ios/simulators_test.dart b/packages/flutter_tools/test/general.shard/ios/simulators_test.dart index b0cdcca4071..4fb747e0589 100644 --- a/packages/flutter_tools/test/general.shard/ios/simulators_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/simulators_test.dart @@ -13,6 +13,7 @@ import 'package:flutter_tools/src/base/logger.dart'; import 'package:flutter_tools/src/base/platform.dart'; import 'package:flutter_tools/src/build_info.dart'; import 'package:flutter_tools/src/build_system/build_system.dart'; +import 'package:flutter_tools/src/devfs.dart'; import 'package:flutter_tools/src/device.dart'; import 'package:flutter_tools/src/globals.dart' as globals; import 'package:flutter_tools/src/ios/mac.dart'; @@ -1000,6 +1001,16 @@ flutter: FileSystem: () => MemoryFileSystem.test(), ProcessManager: () => FakeProcessManager.any(), }); + + testUsingContext('createDevFSWriter returns a LocalDevFSWriter', () { + final IOSSimulator simulator = IOSSimulator( + 'test', + simControl: mockSimControl, + xcode: mockXcode, + ); + + expect(simulator.createDevFSWriter(null, ''), isA()); + }); }); }