| // Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'dart:async'; |
| |
| import 'package:dtd_impl/dtd.dart' as dtd show DartToolingDaemonOptions; |
| |
| import '../core.dart'; |
| import '../sdk.dart'; |
| import '../vm_interop_handler.dart'; |
| |
| class ToolingDaemonCommand extends DartdevCommand { |
| static const String commandName = 'tooling-daemon'; |
| |
| static const String commandDescription = "Start Dart's tooling daemon."; |
| |
| ToolingDaemonCommand({bool verbose = false}) |
| : super( |
| commandName, |
| commandDescription, |
| verbose, |
| hidden: !verbose, |
| ) { |
| dtd.DartToolingDaemonOptions.populateArgOptions( |
| argParser, |
| verbose: verbose, |
| ); |
| } |
| |
| @override |
| Future<int> run() async { |
| var script = sdk.dartAotRuntime; |
| var snapshot = sdk.dtdAotSnapshot; |
| var useExecProcess = true; |
| final args = argResults!.arguments; |
| |
| if (!Sdk.checkArtifactExists(sdk.dtdAotSnapshot, logError: false)) { |
| // On ia32 platforms we do not have an AOT snapshot and so we need |
| // to run the JIT snapshot. |
| useExecProcess = false; |
| script = sdk.dtdSnapshot; |
| } |
| final dtdCommand = [ |
| if (useExecProcess) snapshot, |
| // Add the remaining args. |
| if (args.isNotEmpty) ...args, |
| ]; |
| try { |
| VmInteropHandler.run( |
| script, |
| dtdCommand, |
| packageConfigOverride: null, |
| useExecProcess : useExecProcess, |
| ); |
| return 0; |
| } catch (e, st) { |
| log.stderr('Error: launching tooling daemon failed'); |
| log.stderr(e.toString()); |
| if (verbose) { |
| log.stderr(st.toString()); |
| } |
| return 255; |
| } |
| } |
| } |