start method
Implementation
Future<void> start() async {
if (isRunning) {
_log("$rootPath build_runner already running with pid $pid");
return;
}
final packageName = _readPackageName();
if (!_hasBuildRunnerDependency()) {
_log("$packageName does not depend on build_runner; skipping startup");
return;
}
final logFile = await _createLogFile();
_logSink = logFile.openWrite(mode: .writeOnly);
_writeLog("Starting build_runner for $packageName in $rootPath");
final isWorkspace = await _isDartWorkspace();
try {
final args = [
...switch (isWorkspace) {
true => _watchWorkspaceArgs,
false => _watchArgs,
},
for (final filter in buildFilters) '--build-filter=$filter',
];
final process = await io.Process.start(
"dart",
args,
workingDirectory: rootPath,
);
_process = process;
_onStarted(this, process.pid);
_writeLog("Started build_runner with pid ${process.pid}");
_stdoutSubscription = _lineStream(process.stdout).listen(
(line) => _writeLog("[stdout] $line"),
onError: (Object error, StackTrace stackTrace) {
_writeLog("[stdout:error] $error");
},
);
_stderrSubscription = _lineStream(process.stderr).listen(
(line) => _writeLog("[stderr] $line"),
onError: (Object error, StackTrace stackTrace) {
_writeLog("[stderr:error] $error");
},
);
unawaited(_watchExit(process));
} catch (error, stackTrace) {
_writeLog("Failed to start build_runner: $error");
_writeLog(stackTrace.toString());
}
}