Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit b086473

Browse files
authored
Pass multidex flag when using --machine mode (#101689)
1 parent 2302daa commit b086473

File tree

3 files changed

+141
-17
lines changed

3 files changed

+141
-17
lines changed

packages/flutter_tools/lib/src/commands/daemon.dart

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -157,12 +157,12 @@ class Daemon {
157157
this.logToStdout = false,
158158
}) {
159159
// Set up domains.
160-
_registerDomain(daemonDomain = DaemonDomain(this));
161-
_registerDomain(appDomain = AppDomain(this));
162-
_registerDomain(deviceDomain = DeviceDomain(this));
163-
_registerDomain(emulatorDomain = EmulatorDomain(this));
164-
_registerDomain(devToolsDomain = DevToolsDomain(this));
165-
_registerDomain(proxyDomain = ProxyDomain(this));
160+
registerDomain(daemonDomain = DaemonDomain(this));
161+
registerDomain(appDomain = AppDomain(this));
162+
registerDomain(deviceDomain = DeviceDomain(this));
163+
registerDomain(emulatorDomain = EmulatorDomain(this));
164+
registerDomain(devToolsDomain = DevToolsDomain(this));
165+
registerDomain(proxyDomain = ProxyDomain(this));
166166

167167
// Start listening.
168168
_commandSubscription = connection.incomingCommands.listen(
@@ -192,7 +192,8 @@ class Daemon {
192192
final Completer<int> _onExitCompleter = Completer<int>();
193193
final Map<String, Domain> _domainMap = <String, Domain>{};
194194

195-
void _registerDomain(Domain domain) {
195+
@visibleForTesting
196+
void registerDomain(Domain domain) {
196197
_domainMap[domain.name] = domain;
197198
}
198199

@@ -496,6 +497,7 @@ class AppDomain extends Domain {
496497
String packagesFilePath,
497498
String dillOutputPath,
498499
bool ipv6 = false,
500+
bool multidexEnabled = false,
499501
String isolateFilter,
500502
bool machine = true,
501503
}) async {
@@ -544,6 +546,7 @@ class AppDomain extends Domain {
544546
projectRootPath: projectRootPath,
545547
dillOutputPath: dillOutputPath,
546548
ipv6: ipv6,
549+
multidexEnabled: multidexEnabled,
547550
hostIsIde: true,
548551
machine: machine,
549552
);
@@ -554,6 +557,7 @@ class AppDomain extends Domain {
554557
debuggingOptions: options,
555558
applicationBinary: applicationBinary,
556559
ipv6: ipv6,
560+
multidexEnabled: multidexEnabled,
557561
machine: machine,
558562
);
559563
}

packages/flutter_tools/lib/src/commands/run.dart

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -551,6 +551,21 @@ class RunCommand extends RunCommandBase {
551551
);
552552
}
553553

554+
@visibleForTesting
555+
Daemon createMachineDaemon() {
556+
final Daemon daemon = Daemon(
557+
DaemonConnection(
558+
daemonStreams: DaemonStreams.fromStdio(globals.stdio, logger: globals.logger),
559+
logger: globals.logger,
560+
),
561+
notifyingLogger: (globals.logger is NotifyingLogger)
562+
? globals.logger as NotifyingLogger
563+
: NotifyingLogger(verbose: globals.logger.isVerbose, parent: globals.logger),
564+
logToStdout: true,
565+
);
566+
return daemon;
567+
}
568+
554569
@override
555570
Future<FlutterCommandResult> runCommand() async {
556571
// Enable hot mode by default if `--no-hot` was not passed and we are in
@@ -563,16 +578,7 @@ class RunCommand extends RunCommandBase {
563578
if (devices.length > 1) {
564579
throwToolExit('"--machine" does not support "-d all".');
565580
}
566-
final Daemon daemon = Daemon(
567-
DaemonConnection(
568-
daemonStreams: DaemonStreams.fromStdio(globals.stdio, logger: globals.logger),
569-
logger: globals.logger,
570-
),
571-
notifyingLogger: (globals.logger is NotifyingLogger)
572-
? globals.logger as NotifyingLogger
573-
: NotifyingLogger(verbose: globals.logger.isVerbose, parent: globals.logger),
574-
logToStdout: true,
575-
);
581+
final Daemon daemon = createMachineDaemon();
576582
AppInstance app;
577583
try {
578584
app = await daemon.appDomain.startApp(
@@ -586,6 +592,7 @@ class RunCommand extends RunCommandBase {
586592
packagesFilePath: globalResults['packages'] as String,
587593
dillOutputPath: stringArg('output-dill'),
588594
ipv6: ipv6,
595+
multidexEnabled: boolArg('multidex'),
589596
);
590597
} on Exception catch (error) {
591598
throwToolExit(error.toString());

packages/flutter_tools/test/commands.shard/hermetic/run_test.dart

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import 'package:flutter_tools/src/base/platform.dart';
2626
import 'package:flutter_tools/src/base/user_messages.dart';
2727
import 'package:flutter_tools/src/build_info.dart';
2828
import 'package:flutter_tools/src/cache.dart';
29+
import 'package:flutter_tools/src/commands/daemon.dart';
2930
import 'package:flutter_tools/src/commands/run.dart';
3031
import 'package:flutter_tools/src/devfs.dart';
3132
import 'package:flutter_tools/src/device.dart';
@@ -405,6 +406,67 @@ void main() {
405406
ProcessManager: () => FakeProcessManager.any(),
406407
Usage: () => usage,
407408
});
409+
410+
group('--machine', () {
411+
testUsingContext('enables multidex by default', () async {
412+
final DaemonCapturingRunCommand command = DaemonCapturingRunCommand();
413+
final FakeDevice device = FakeDevice();
414+
mockDeviceManager
415+
..devices = <Device>[device]
416+
..targetDevices = <Device>[device];
417+
418+
await expectLater(
419+
() => createTestCommandRunner(command).run(<String>[
420+
'run',
421+
'--no-pub',
422+
'--machine',
423+
'-d',
424+
device.id,
425+
]),
426+
throwsToolExit(),
427+
);
428+
expect(command.appDomain.multidexEnabled, isTrue);
429+
}, overrides: <Type, Generator>{
430+
Artifacts: () => artifacts,
431+
Cache: () => Cache.test(processManager: FakeProcessManager.any()),
432+
DeviceManager: () => mockDeviceManager,
433+
FileSystem: () => fs,
434+
ProcessManager: () => FakeProcessManager.any(),
435+
Usage: () => usage,
436+
Stdio: () => FakeStdio(),
437+
Logger: () => AppRunLogger(parent: BufferLogger.test()),
438+
});
439+
440+
testUsingContext('can disable multidex with --no-multidex', () async {
441+
final DaemonCapturingRunCommand command = DaemonCapturingRunCommand();
442+
final FakeDevice device = FakeDevice();
443+
mockDeviceManager
444+
..devices = <Device>[device]
445+
..targetDevices = <Device>[device];
446+
447+
await expectLater(
448+
() => createTestCommandRunner(command).run(<String>[
449+
'run',
450+
'--no-pub',
451+
'--no-multidex',
452+
'--machine',
453+
'-d',
454+
device.id,
455+
]),
456+
throwsToolExit(),
457+
);
458+
expect(command.appDomain.multidexEnabled, isFalse);
459+
}, overrides: <Type, Generator>{
460+
Artifacts: () => artifacts,
461+
Cache: () => Cache.test(processManager: FakeProcessManager.any()),
462+
DeviceManager: () => mockDeviceManager,
463+
FileSystem: () => fs,
464+
ProcessManager: () => FakeProcessManager.any(),
465+
Usage: () => usage,
466+
Stdio: () => FakeStdio(),
467+
Logger: () => AppRunLogger(parent: BufferLogger.test()),
468+
});
469+
});
408470
});
409471

410472
group('Fatal Logs', () {
@@ -687,6 +749,13 @@ class FakeDeviceManager extends Fake implements DeviceManager {
687749
return targetDevices;
688750
}
689751

752+
@override
753+
List<DeviceDiscovery> get deviceDiscoverers {
754+
final FakePollingDeviceDiscovery discoverer = FakePollingDeviceDiscovery();
755+
devices.forEach(discoverer.addDevice);
756+
return <DeviceDiscovery>[discoverer];
757+
}
758+
690759
@override
691760
Future<List<Device>> getAllConnectedDevices() async => devices;
692761
}
@@ -739,6 +808,9 @@ class FakeDevice extends Fake implements Device {
739808
@override
740809
bool supportsHotReload = false;
741810

811+
@override
812+
bool get supportsHotRestart => true;
813+
742814
@override
743815
bool get supportsFastStart => false;
744816

@@ -858,3 +930,44 @@ class FakeResidentRunner extends Fake implements ResidentRunner {
858930
return 0;
859931
}
860932
}
933+
934+
class DaemonCapturingRunCommand extends RunCommand {
935+
/*late*/ Daemon daemon;
936+
/*late*/ CapturingAppDomain appDomain;
937+
938+
@override
939+
Daemon createMachineDaemon() {
940+
daemon = super.createMachineDaemon();
941+
appDomain = daemon.appDomain = CapturingAppDomain(daemon);
942+
daemon.registerDomain(appDomain);
943+
return daemon;
944+
}
945+
}
946+
947+
class CapturingAppDomain extends AppDomain {
948+
CapturingAppDomain(Daemon daemon) : super(daemon);
949+
950+
bool /*?*/ multidexEnabled;
951+
952+
@override
953+
Future<AppInstance> startApp(
954+
Device device,
955+
String projectDirectory,
956+
String target,
957+
String route,
958+
DebuggingOptions options,
959+
bool enableHotReload, {
960+
File applicationBinary,
961+
@required bool trackWidgetCreation,
962+
String projectRootPath,
963+
String packagesFilePath,
964+
String dillOutputPath,
965+
bool ipv6 = false,
966+
bool multidexEnabled = false,
967+
String isolateFilter,
968+
bool machine = true,
969+
}) async {
970+
this.multidexEnabled = multidexEnabled;
971+
throwToolExit('');
972+
}
973+
}

0 commit comments

Comments
 (0)