Skip to content

Commit eea60f8

Browse files
authored
Dependency injection Attach command (#113227)
1 parent 9995e37 commit eea60f8

File tree

4 files changed

+283
-48
lines changed

4 files changed

+283
-48
lines changed

packages/flutter_tools/lib/executable.dart

+11-1
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,17 @@ List<FlutterCommand> generateCommands({
154154
],
155155
),
156156
AssembleCommand(verboseHelp: verboseHelp, buildSystem: globals.buildSystem),
157-
AttachCommand(verboseHelp: verboseHelp),
157+
AttachCommand(
158+
verboseHelp: verboseHelp,
159+
artifacts: globals.artifacts,
160+
stdio: globals.stdio,
161+
logger: globals.logger,
162+
terminal: globals.terminal,
163+
signals: globals.signals,
164+
platform: globals.platform,
165+
processInfo: globals.processInfo,
166+
fileSystem: globals.fs,
167+
),
158168
BuildCommand(verboseHelp: verboseHelp),
159169
ChannelCommand(verboseHelp: verboseHelp),
160170
CleanCommand(verbose: verbose),

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

+51-22
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,17 @@ import '../base/common.dart';
1212
import '../base/context.dart';
1313
import '../base/file_system.dart';
1414
import '../base/io.dart';
15+
import '../base/logger.dart';
16+
import '../base/platform.dart';
17+
import '../base/signals.dart';
18+
import '../base/terminal.dart';
1519
import '../build_info.dart';
1620
import '../commands/daemon.dart';
1721
import '../compile.dart';
1822
import '../daemon.dart';
1923
import '../device.dart';
2024
import '../device_port_forwarder.dart';
2125
import '../fuchsia/fuchsia_device.dart';
22-
import '../globals.dart' as globals;
2326
import '../ios/devices.dart';
2427
import '../ios/simulators.dart';
2528
import '../macos/macos_ipad_device.dart';
@@ -58,7 +61,26 @@ import '../vmservice.dart';
5861
/// To attach to a flutter mod running on a fuchsia device, `--module` must
5962
/// also be provided.
6063
class AttachCommand extends FlutterCommand {
61-
AttachCommand({bool verboseHelp = false, this.hotRunnerFactory}) {
64+
AttachCommand({
65+
bool verboseHelp = false,
66+
HotRunnerFactory? hotRunnerFactory,
67+
required Artifacts? artifacts,
68+
required Stdio stdio,
69+
required Logger logger,
70+
required Terminal terminal,
71+
required Signals signals,
72+
required Platform platform,
73+
required ProcessInfo processInfo,
74+
required FileSystem fileSystem,
75+
}): _artifacts = artifacts,
76+
_hotRunnerFactory = hotRunnerFactory ?? HotRunnerFactory(),
77+
_stdio = stdio,
78+
_logger = logger,
79+
_terminal = terminal,
80+
_signals = signals,
81+
_platform = platform,
82+
_processInfo = processInfo,
83+
_fileSystem = fileSystem {
6284
addBuildModeFlags(verboseHelp: verboseHelp, defaultToRelease: false, excludeRelease: true);
6385
usesTargetOption();
6486
usesPortOptions(verboseHelp: verboseHelp);
@@ -117,10 +139,17 @@ class AttachCommand extends FlutterCommand {
117139
addDdsOptions(verboseHelp: verboseHelp);
118140
addDevToolsOptions(verboseHelp: verboseHelp);
119141
usesDeviceTimeoutOption();
120-
hotRunnerFactory ??= HotRunnerFactory();
121142
}
122143

123-
HotRunnerFactory? hotRunnerFactory;
144+
final HotRunnerFactory _hotRunnerFactory;
145+
final Artifacts? _artifacts;
146+
final Stdio _stdio;
147+
final Logger _logger;
148+
final Terminal _terminal;
149+
final Signals _signals;
150+
final Platform _platform;
151+
final ProcessInfo _processInfo;
152+
final FileSystem _fileSystem;
124153

125154
@override
126155
final String name = 'attach';
@@ -221,7 +250,7 @@ known, it can be explicitly provided to attach via the command-line, e.g.
221250
throwToolExit('Did not find any valid target devices.');
222251
}
223252

224-
final Artifacts? overrideArtifacts = device.artifactOverrides ?? globals.artifacts;
253+
final Artifacts? overrideArtifacts = device.artifactOverrides ?? _artifacts;
225254
await context.run<void>(
226255
body: () => _attachToDevice(device),
227256
overrides: <Type, Generator>{
@@ -238,12 +267,12 @@ known, it can be explicitly provided to attach via the command-line, e.g.
238267
final Daemon? daemon = boolArgDeprecated('machine')
239268
? Daemon(
240269
DaemonConnection(
241-
daemonStreams: DaemonStreams.fromStdio(globals.stdio, logger: globals.logger),
242-
logger: globals.logger,
270+
daemonStreams: DaemonStreams.fromStdio(_stdio, logger: _logger),
271+
logger: _logger,
243272
),
244-
notifyingLogger: (globals.logger is NotifyingLogger)
245-
? globals.logger as NotifyingLogger
246-
: NotifyingLogger(verbose: globals.logger.isVerbose, parent: globals.logger),
273+
notifyingLogger: (_logger is NotifyingLogger)
274+
? _logger as NotifyingLogger
275+
: NotifyingLogger(verbose: _logger.isVerbose, parent: _logger),
247276
logToStdout: true,
248277
)
249278
: null;
@@ -296,9 +325,9 @@ known, it can be explicitly provided to attach via the command-line, e.g.
296325
ipv6: ipv6!,
297326
devicePort: deviceVmservicePort,
298327
hostPort: hostVmservicePort,
299-
logger: globals.logger,
328+
logger: _logger,
300329
);
301-
globals.printStatus('Waiting for a connection from Flutter on ${device.name}...');
330+
_logger.printStatus('Waiting for a connection from Flutter on ${device.name}...');
302331
observatoryUri = observatoryDiscovery.uris;
303332
// Determine ipv6 status from the scanned logs.
304333
usesIpv6 = observatoryDiscovery.ipv6;
@@ -316,7 +345,7 @@ known, it can be explicitly provided to attach via the command-line, e.g.
316345
).asBroadcastStream();
317346
}
318347

319-
globals.terminal.usesTerminalUi = daemon == null;
348+
_terminal.usesTerminalUi = daemon == null;
320349

321350
try {
322351
int? result;
@@ -343,9 +372,9 @@ known, it can be explicitly provided to attach via the command-line, e.g.
343372
device,
344373
null,
345374
true,
346-
globals.fs.currentDirectory,
375+
_fileSystem.currentDirectory,
347376
LaunchMode.attach,
348-
globals.logger as AppRunLogger,
377+
_logger as AppRunLogger,
349378
);
350379
} on Exception catch (error) {
351380
throwToolExit(error.toString());
@@ -366,10 +395,10 @@ known, it can be explicitly provided to attach via the command-line, e.g.
366395
unawaited(onAppStart.future.whenComplete(() {
367396
terminalHandler = TerminalHandler(
368397
runner,
369-
logger: globals.logger,
370-
terminal: globals.terminal,
371-
signals: globals.signals,
372-
processInfo: globals.processInfo,
398+
logger: _logger,
399+
terminal: _terminal,
400+
signals: _signals,
401+
processInfo: _processInfo,
373402
reportReady: boolArgDeprecated('report-ready'),
374403
pidFile: stringArgDeprecated('pid-file'),
375404
)
@@ -389,7 +418,7 @@ known, it can be explicitly provided to attach via the command-line, e.g.
389418
if (runner.exited || !runner.isWaitingForObservatory) {
390419
break;
391420
}
392-
globals.printStatus('Waiting for a new connection from Flutter on ${device.name}...');
421+
_logger.printStatus('Waiting for a new connection from Flutter on ${device.name}...');
393422
}
394423
} on RPCError catch (err) {
395424
if (err.code == RPCErrorCodes.kServiceDisappeared) {
@@ -422,7 +451,7 @@ known, it can be explicitly provided to attach via the command-line, e.g.
422451
targetModel: TargetModel(stringArgDeprecated('target-model')!),
423452
buildInfo: buildInfo,
424453
userIdentifier: userIdentifier,
425-
platform: globals.platform,
454+
platform: _platform,
426455
);
427456
flutterDevice.observatoryUris = observatoryUris;
428457
final List<FlutterDevice> flutterDevices = <FlutterDevice>[flutterDevice];
@@ -434,7 +463,7 @@ known, it can be explicitly provided to attach via the command-line, e.g.
434463
);
435464

436465
return buildInfo.isDebug
437-
? hotRunnerFactory!.build(
466+
? _hotRunnerFactory.build(
438467
flutterDevices,
439468
target: targetFile,
440469
debuggingOptions: debuggingOptions,

0 commit comments

Comments
 (0)