Unverified Commit 28ab4310 authored by Jenn Magder's avatar Jenn Magder Committed by GitHub

Make `Logger` required when injected in flutter_tool (#114111)

parent c6f6095a
......@@ -184,7 +184,7 @@ List<FlutterCommand> generateCommands({
DebugAdapterCommand(verboseHelp: verboseHelp),
DevicesCommand(verboseHelp: verboseHelp),
DoctorCommand(verbose: verbose),
DowngradeCommand(verboseHelp: verboseHelp),
DowngradeCommand(verboseHelp: verboseHelp, logger: globals.logger),
DriveCommand(verboseHelp: verboseHelp,
fileSystem: globals.fs,
logger: globals.logger,
......
......@@ -102,21 +102,21 @@ class DaemonCommand extends FlutterCommand {
class _DaemonServer {
_DaemonServer({
this.port,
this.logger,
required this.logger,
this.notifyingLogger,
});
final int? port;
/// Stdout logger used to print general server-related errors.
final Logger? logger;
final Logger logger;
// Logger that sends the message to the other end of daemon connection.
final NotifyingLogger? notifyingLogger;
Future<void> run() async {
final ServerSocket serverSocket = await ServerSocket.bind(InternetAddress.loopbackIPv4, port!);
logger!.printStatus('Daemon server listening on ${serverSocket.port}');
logger.printStatus('Daemon server listening on ${serverSocket.port}');
final StreamSubscription<Socket> subscription = serverSocket.listen(
(Socket socket) async {
......@@ -124,13 +124,13 @@ class _DaemonServer {
// reset, we will receive an uncatchable exception.
// https://github.com/dart-lang/sdk/issues/25518
final Future<void> socketDone = socket.done.catchError((Object error, StackTrace stackTrace) {
logger!.printError('Socket error: $error');
logger!.printTrace('$stackTrace');
logger.printError('Socket error: $error');
logger.printTrace('$stackTrace');
});
final Daemon daemon = Daemon(
DaemonConnection(
daemonStreams: DaemonStreams.fromSocket(socket, logger: logger!),
logger: logger!,
daemonStreams: DaemonStreams.fromSocket(socket, logger: logger),
logger: logger,
),
notifyingLogger: notifyingLogger,
);
......
......@@ -30,7 +30,7 @@ class DowngradeCommand extends FlutterCommand {
DowngradeCommand({
bool verboseHelp = false,
PersistentToolState? persistentToolState,
Logger? logger,
required Logger logger,
ProcessManager? processManager,
FlutterVersion? flutterVersion,
Terminal? terminal,
......@@ -64,7 +64,7 @@ class DowngradeCommand extends FlutterCommand {
PersistentToolState? _persistentToolState;
ProcessUtils? _processUtils;
ProcessManager? _processManager;
Logger? _logger;
final Logger _logger;
Stdio? _stdio;
FileSystem? _fileSystem;
......@@ -83,11 +83,10 @@ class DowngradeCommand extends FlutterCommand {
// values when being created. Fields must be lazily instantiated in runCommand,
// at least until the zone injection is refactored.
_terminal ??= globals.terminal;
_logger ??= globals.logger;
_flutterVersion ??= globals.flutterVersion;
_persistentToolState ??= globals.persistentToolState;
_processManager ??= globals.processManager;
_processUtils ??= ProcessUtils(processManager: _processManager!, logger: _logger!);
_processUtils ??= ProcessUtils(processManager: _processManager!, logger: _logger);
_stdio ??= globals.stdio;
_fileSystem ??= globals.fs;
String workingDirectory = Cache.flutterRoot!;
......@@ -128,19 +127,18 @@ class DowngradeCommand extends FlutterCommand {
// If there is a terminal attached, prompt the user to confirm the downgrade.
final Stdio stdio = _stdio!;
final Terminal terminal = _terminal!;
final Logger logger = _logger!;
if (stdio.hasTerminal && boolArgDeprecated('prompt')) {
terminal.usesTerminalUi = true;
final String result = await terminal.promptForCharInput(
const <String>['y', 'n'],
prompt: 'Downgrade flutter to version $humanReadableVersion?',
logger: logger,
logger: _logger,
);
if (result == 'n') {
return FlutterCommandResult.success();
}
} else {
logger.printStatus('Downgrading Flutter to version $humanReadableVersion');
_logger.printStatus('Downgrading Flutter to version $humanReadableVersion');
}
// To downgrade the tool, we perform a git checkout --hard, and then
......@@ -175,7 +173,7 @@ class DowngradeCommand extends FlutterCommand {
);
}
await FlutterVersion.resetFlutterVersionFreshnessCheck();
logger.printStatus('Success');
_logger.printStatus('Success');
return FlutterCommandResult.success();
}
......
......@@ -52,7 +52,7 @@ class DriveCommand extends RunCommandBase {
@visibleForTesting FlutterDriverFactory? flutterDriverFactory,
@visibleForTesting this.signalsToHandle = const <ProcessSignal>{ProcessSignal.sigint, ProcessSignal.sigterm},
required FileSystem fileSystem,
required Logger? logger,
required Logger logger,
required Platform platform,
required this.signals,
}) : _flutterDriverFactory = flutterDriverFactory,
......@@ -171,7 +171,7 @@ class DriveCommand extends RunCommandBase {
FlutterDriverFactory? _flutterDriverFactory;
final FileSystem _fileSystem;
final Logger? _logger;
final Logger _logger;
final FileSystemUtils _fsUtils;
@override
......@@ -222,20 +222,20 @@ class DriveCommand extends RunCommandBase {
throwToolExit(null);
}
if (screenshot != null && !device.supportsScreenshot) {
_logger!.printError('Screenshot not supported for ${device.name}.');
_logger.printError('Screenshot not supported for ${device.name}.');
}
final bool web = device is WebServerDevice || device is ChromiumDevice;
_flutterDriverFactory ??= FlutterDriverFactory(
applicationPackageFactory: ApplicationPackageFactory.instance!,
logger: _logger!,
logger: _logger,
processUtils: globals.processUtils,
dartSdkPath: globals.artifacts!.getHostArtifact(HostArtifact.engineDartBinary).path,
devtoolsLauncher: DevtoolsLauncher.instance!,
);
final PackageConfig packageConfig = await loadPackageConfigWithLogging(
_fileSystem.file('.packages'),
logger: _logger!,
logger: _logger,
throwOnError: false,
);
final DriverService driverService = _flutterDriverFactory!.createDriverService(web);
......@@ -297,7 +297,7 @@ class DriveCommand extends RunCommandBase {
);
// If the test is sent a signal, take a screenshot before exiting
final Map<ProcessSignal, Object> screenshotTokens = _registerScreenshotCallbacks((ProcessSignal signal) async {
_logger!.printError('Caught $signal');
_logger.printError('Caught $signal');
await _takeScreenshot(device);
});
final int testResult = await testResultFuture;
......@@ -309,7 +309,7 @@ class DriveCommand extends RunCommandBase {
}
if (boolArgDeprecated('keep-app-running')) {
_logger!.printStatus('Leaving the application running.');
_logger.printStatus('Leaving the application running.');
} else {
final File? skslFile = stringArgDeprecated('write-sksl-on-exit') != null
? _fileSystem.file(stringArgDeprecated('write-sksl-on-exit'))
......@@ -332,7 +332,7 @@ class DriveCommand extends RunCommandBase {
}
Map<ProcessSignal, Object> _registerScreenshotCallbacks(Function(ProcessSignal) callback) {
_logger!.printTrace('Registering signal handlers...');
_logger.printTrace('Registering signal handlers...');
final Map<ProcessSignal, Object> tokens = <ProcessSignal, Object>{};
for (final ProcessSignal signal in signalsToHandle) {
tokens[signal] = signals.addHandler(signal, callback);
......@@ -341,7 +341,7 @@ class DriveCommand extends RunCommandBase {
}
void _unregisterScreenshotCallbacks(Map<ProcessSignal, Object> tokens) {
_logger!.printTrace('Unregistering signal handlers...');
_logger.printTrace('Unregistering signal handlers...');
for (final MapEntry<ProcessSignal, Object> entry in tokens.entries) {
signals.removeHandler(entry.key, entry.value);
}
......@@ -362,7 +362,7 @@ class DriveCommand extends RunCommandBase {
// for the corresponding test file relative to it.
if (!_fileSystem.path.isRelative(appFile)) {
if (!_fileSystem.path.isWithin(packageDir, appFile)) {
_logger!.printError(
_logger.printError(
'Application file $appFile is outside the package directory $packageDir'
);
return null;
......@@ -374,7 +374,7 @@ class DriveCommand extends RunCommandBase {
final List<String> parts = _fileSystem.path.split(appFile);
if (parts.length < 2) {
_logger!.printError(
_logger.printError(
'Application file $appFile must reside in one of the sub-directories '
'of the package structure, not in the root directory.'
);
......@@ -402,9 +402,9 @@ class DriveCommand extends RunCommandBase {
'png',
);
await device.takeScreenshot(outputFile);
_logger!.printStatus('Screenshot written to ${outputFile.path}');
_logger.printStatus('Screenshot written to ${outputFile.path}');
} on Exception catch (error) {
_logger!.printError('Error taking screenshot: $error');
_logger.printError('Error taking screenshot: $error');
}
}
}
......@@ -541,7 +541,6 @@ class RunCommand extends RunCommandBase {
ipv6: ipv6,
debuggingOptions: await createDebuggingOptions(webMode),
stayResident: stayResident,
urlTunneller: null,
fileSystem: globals.fs,
usage: globals.flutterUsage,
logger: globals.logger,
......
......@@ -22,7 +22,7 @@ class DevtoolsServerLauncher extends DevtoolsLauncher {
DevtoolsServerLauncher({
required ProcessManager processManager,
required String dartExecutable,
required Logger? logger,
required Logger logger,
required BotDetector botDetector,
}) : _processManager = processManager,
_dartExecutable = dartExecutable,
......@@ -31,7 +31,7 @@ class DevtoolsServerLauncher extends DevtoolsLauncher {
final ProcessManager _processManager;
final String _dartExecutable;
final Logger? _logger;
final Logger _logger;
final BotDetector _botDetector;
final Completer<void> _processStartCompleter = Completer<void>();
......@@ -73,7 +73,7 @@ class DevtoolsServerLauncher extends DevtoolsLauncher {
_devToolsProcess!.stderr
.transform(utf8.decoder)
.transform(const LineSplitter())
.listen(_logger!.printError);
.listen(_logger.printError);
final bool runningOnBot = await _botDetector.isRunningOnBot;
devToolsProcessExit = _devToolsProcess!.exitCode.then(
......@@ -86,7 +86,7 @@ class DevtoolsServerLauncher extends DevtoolsLauncher {
devToolsUrl = await completer.future;
} on Exception catch (e, st) {
_logger!.printError('Failed to launch DevTools: $e', stackTrace: st);
_logger.printError('Failed to launch DevTools: $e', stackTrace: st);
}
}
......
......@@ -82,7 +82,6 @@ class WebDriverService extends DriverService {
disablePortPublication: debuggingOptions.disablePortPublication,
),
stayResident: true,
urlTunneller: null,
flutterProject: FlutterProject.current(),
fileSystem: globals.fs,
usage: globals.flutterUsage,
......
......@@ -51,8 +51,8 @@ class DwdsWebRunnerFactory extends WebRunnerFactory {
required FlutterProject flutterProject,
required bool? ipv6,
required DebuggingOptions debuggingOptions,
required UrlTunneller? urlTunneller,
required Logger? logger,
UrlTunneller? urlTunneller,
required Logger logger,
required FileSystem fileSystem,
required SystemClock systemClock,
required Usage usage,
......@@ -89,7 +89,7 @@ class ResidentWebRunner extends ResidentRunner {
required bool? ipv6,
required DebuggingOptions debuggingOptions,
required FileSystem fileSystem,
required Logger? logger,
required Logger logger,
required SystemClock systemClock,
required Usage usage,
UrlTunneller? urlTunneller,
......@@ -110,13 +110,13 @@ class ResidentWebRunner extends ResidentRunner {
);
final FileSystem _fileSystem;
final Logger? _logger;
final Logger _logger;
final SystemClock _systemClock;
final Usage _usage;
final UrlTunneller? _urlTunneller;
@override
Logger? get logger => _logger;
Logger get logger => _logger;
@override
FileSystem get fileSystem => _fileSystem;
......@@ -190,7 +190,7 @@ class ResidentWebRunner extends ResidentRunner {
_generatedEntrypointDirectory?.deleteSync(recursive: true);
} on FileSystemException {
// Best effort to clean up temp dirs.
_logger!.printTrace(
_logger.printTrace(
'Failed to clean up temp directory: ${_generatedEntrypointDirectory!.path}',
);
}
......@@ -210,14 +210,14 @@ class ResidentWebRunner extends ResidentRunner {
const String fire = '🔥';
const String rawMessage =
' To hot restart changes while running, press "r" or "R".';
final String message = _logger!.terminal.color(
fire + _logger!.terminal.bolden(rawMessage),
final String message = _logger.terminal.color(
fire + _logger.terminal.bolden(rawMessage),
TerminalColor.red,
);
_logger!.printStatus(message);
_logger.printStatus(message);
const String quitMessage = 'To quit, press "q".';
_logger!.printStatus('For a more detailed help message, press "h". $quitMessage');
_logger!.printStatus('');
_logger.printStatus('For a more detailed help message, press "h". $quitMessage');
_logger.printStatus('');
printDebuggerList();
}
......@@ -240,11 +240,11 @@ class ResidentWebRunner extends ResidentRunner {
buildInfo: debuggingOptions.buildInfo,
);
if (package == null) {
_logger!.printStatus('This application is not configured to build on the web.');
_logger!.printStatus('To add web support to a project, run `flutter create .`.');
_logger.printStatus('This application is not configured to build on the web.');
_logger.printStatus('To add web support to a project, run `flutter create .`.');
}
final String modeName = debuggingOptions.buildInfo.friendlyModeName;
_logger!.printStatus(
_logger.printStatus(
'Launching ${getDisplayPath(target, _fileSystem)} '
'on ${device!.device!.name} in $modeName mode...',
);
......@@ -283,7 +283,7 @@ class ResidentWebRunner extends ResidentRunner {
await runSourceGenerators();
final UpdateFSReport report = await _updateDevFS(fullRestart: true);
if (!report.success) {
_logger!.printError('Failed to compile application.');
_logger.printError('Failed to compile application.');
appFailedToStart();
return 1;
}
......@@ -318,19 +318,19 @@ class ResidentWebRunner extends ResidentRunner {
});
} on WebSocketException catch (error, stackTrace) {
appFailedToStart();
_logger!.printError('$error', stackTrace: stackTrace);
_logger.printError('$error', stackTrace: stackTrace);
throwToolExit(kExitMessage);
} on ChromeDebugException catch (error, stackTrace) {
appFailedToStart();
_logger!.printError('$error', stackTrace: stackTrace);
_logger.printError('$error', stackTrace: stackTrace);
throwToolExit(kExitMessage);
} on AppConnectionException catch (error, stackTrace) {
appFailedToStart();
_logger!.printError('$error', stackTrace: stackTrace);
_logger.printError('$error', stackTrace: stackTrace);
throwToolExit(kExitMessage);
} on SocketException catch (error, stackTrace) {
appFailedToStart();
_logger!.printError('$error', stackTrace: stackTrace);
_logger.printError('$error', stackTrace: stackTrace);
throwToolExit(kExitMessage);
} on Exception {
appFailedToStart();
......@@ -346,7 +346,7 @@ class ResidentWebRunner extends ResidentRunner {
bool benchmarkMode = false,
}) async {
final DateTime start = _systemClock.now();
final Status status = _logger!.startProgress(
final Status status = _logger.startProgress(
'Performing hot restart...',
progressId: 'hot.restart',
);
......@@ -382,7 +382,7 @@ class ResidentWebRunner extends ResidentRunner {
try {
if (!deviceIsDebuggable) {
_logger!.printStatus('Recompile complete. Page requires refresh.');
_logger.printStatus('Recompile complete. Page requires refresh.');
} else if (isRunningDebug) {
await _vmService.service.callMethod('hotRestart');
} else {
......@@ -400,7 +400,7 @@ class ResidentWebRunner extends ResidentRunner {
final Duration elapsed = _systemClock.now().difference(start);
final String elapsedMS = getElapsedAsMilliseconds(elapsed);
_logger!.printStatus('Restarted application in $elapsedMS.');
_logger.printStatus('Restarted application in $elapsedMS.');
unawaited(residentDevtoolsHandler!.hotRestart(flutterDevices));
// Don't track restart times for dart2js builds or web-server devices.
......@@ -468,7 +468,7 @@ class ResidentWebRunner extends ResidentRunner {
final bool isFirstUpload = !assetBundle.wasBuiltOnce();
final bool rebuildBundle = assetBundle.needsBuild();
if (rebuildBundle) {
_logger!.printTrace('Updating assets');
_logger.printTrace('Updating assets');
final int result = await assetBundle.build(
packagesPath: debuggingOptions.buildInfo.packagesPath,
targetPlatform: TargetPlatform.web_javascript,
......@@ -484,7 +484,7 @@ class ResidentWebRunner extends ResidentRunner {
packageConfig: device!.devFS!.lastPackageConfig
?? debuggingOptions.buildInfo.packageConfig,
);
final Status devFSStatus = _logger!.startProgress(
final Status devFSStatus = _logger.startProgress(
'Waiting for connection from debug service on ${device!.device!.name}...',
);
final UpdateFSReport report = await device!.devFS!.update(
......@@ -507,7 +507,7 @@ class ResidentWebRunner extends ResidentRunner {
shaderCompiler: device!.developmentShaderCompiler,
);
devFSStatus.stop();
_logger!.printTrace('Synced ${getSizeAsMB(report.syncedBytes)}.');
_logger.printTrace('Synced ${getSizeAsMB(report.syncedBytes)}.');
return report;
}
......@@ -538,7 +538,7 @@ class ResidentWebRunner extends ResidentRunner {
void onLogEvent(vmservice.Event event) {
final String message = processVmServiceMessage(event);
_logger!.printStatus(message);
_logger.printStatus(message);
}
_stdOutSub = _vmService.service.onStdoutEvent.listen(onLogEvent);
......@@ -609,16 +609,16 @@ class ResidentWebRunner extends ResidentRunner {
..createSync(recursive: true)
..writeAsStringSync(websocketUri.toString());
}
_logger!.printStatus('Debug service listening on $websocketUri');
_logger!.printStatus('');
_logger.printStatus('Debug service listening on $websocketUri');
_logger.printStatus('');
if (debuggingOptions.buildInfo.nullSafetyMode == NullSafetyMode.sound) {
_logger!.printStatus('💪 Running with sound null safety 💪', emphasis: true);
_logger.printStatus('💪 Running with sound null safety 💪', emphasis: true);
} else {
_logger!.printStatus(
_logger.printStatus(
'Running without sound null safety ⚠️',
emphasis: true,
);
_logger!.printStatus(
_logger.printStatus(
'Dart 3 will only support sound null safety, see https://dart.dev/null-safety',
);
}
......
......@@ -637,7 +637,7 @@ abstract class ResidentHandlers {
ResidentDevtoolsHandler? get residentDevtoolsHandler;
@protected
Logger? get logger;
Logger get logger;
@protected
FileSystem? get fileSystem;
......@@ -666,7 +666,7 @@ abstract class ResidentHandlers {
final String data = await device.vmService!.flutterDebugDumpApp(
isolateId: view.uiIsolate!.id!,
);
logger!.printStatus(data);
logger.printStatus(data);
}
}
return true;
......@@ -683,7 +683,7 @@ abstract class ResidentHandlers {
final String data = await device.vmService!.flutterDebugDumpRenderTree(
isolateId: view.uiIsolate!.id!,
);
logger!.printStatus(data);
logger.printStatus(data);
}
}
return true;
......@@ -702,7 +702,7 @@ abstract class ResidentHandlers {
}
for (final FlutterDevice? device in flutterDevices) {
if (device?.targetPlatform == TargetPlatform.web_javascript) {
logger!.printWarning('Unable to get jank metrics for web');
logger.printWarning('Unable to get jank metrics for web');
continue;
}
final List<FlutterView> views = await device!.vmService!.getFlutterViews();
......@@ -719,9 +719,9 @@ abstract class ResidentHandlers {
'json',
);
tempFile.writeAsStringSync(jsonEncode(rasterData), flush: true);
logger!.printStatus('Wrote jank metrics to ${tempFile.absolute.path}');
logger.printStatus('Wrote jank metrics to ${tempFile.absolute.path}');
} else {
logger!.printWarning('Unable to get jank metrics.');
logger.printWarning('Unable to get jank metrics.');
}
}
}
......@@ -739,7 +739,7 @@ abstract class ResidentHandlers {
final String data = await device.vmService!.flutterDebugDumpLayerTree(
isolateId: view.uiIsolate!.id!,
);
logger!.printStatus(data);
logger.printStatus(data);
}
}
return true;
......@@ -758,7 +758,7 @@ abstract class ResidentHandlers {
final String data = await device.vmService!.flutterDebugDumpSemanticsTreeInTraversalOrder(
isolateId: view.uiIsolate!.id!,
);
logger!.printStatus(data);
logger.printStatus(data);
}
}
return true;
......@@ -777,7 +777,7 @@ abstract class ResidentHandlers {
final String data = await device.vmService!.flutterDebugDumpSemanticsTreeInInverseHitTestOrder(
isolateId: view.uiIsolate!.id!,
);
logger!.printStatus(data);
logger.printStatus(data);
}
}
return true;
......@@ -891,7 +891,7 @@ abstract class ResidentHandlers {
brightness: next,
);
}
logger!.printStatus('Changed brightness to $next.');
logger.printStatus('Changed brightness to $next.');
}
return true;
}
......@@ -916,7 +916,7 @@ abstract class ResidentHandlers {
);
}
}
logger!.printStatus('Switched operating system to $to');
logger.printStatus('Switched operating system to $to');
return true;
}
......@@ -954,7 +954,7 @@ abstract class ResidentHandlers {
if (!device.device!.supportsScreenshot && !supportsServiceProtocol) {
return;
}
final Status status = logger!.startProgress(
final Status status = logger.startProgress(
'Taking screenshot for ${device.device!.name}...',
);
final File outputFile = getUniqueFile(
......@@ -975,12 +975,12 @@ abstract class ResidentHandlers {
}
final int sizeKB = outputFile.lengthSync() ~/ 1024;
status.stop();
logger!.printStatus(
logger.printStatus(
'Screenshot written to ${fileSystem!.path.relative(outputFile.path)} (${sizeKB}kB).',
);
} on Exception catch (error) {
status.cancel();
logger!.printError('Error taking screenshot: $error');
logger.printError('Error taking screenshot: $error');
}
}
......@@ -1016,7 +1016,7 @@ abstract class ResidentHandlers {
}
return true;
} on vm_service.RPCError catch (error) {
logger!.printError('Error communicating with Flutter on the device: $error');
logger.printError('Error communicating with Flutter on the device: $error');
return false;
}
}
......@@ -1088,7 +1088,7 @@ abstract class ResidentRunner extends ResidentHandlers {
}
@override
Logger? get logger => globals.logger;
Logger get logger => globals.logger;
@override
FileSystem get fileSystem => globals.fs;
......
......@@ -26,8 +26,8 @@ abstract class WebRunnerFactory {
required FlutterProject flutterProject,
required bool? ipv6,
required DebuggingOptions debuggingOptions,
required UrlTunneller? urlTunneller,
required Logger? logger,
UrlTunneller? urlTunneller,
required Logger logger,
required FileSystem fileSystem,
required SystemClock systemClock,
required Usage usage,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment