Cause `flutter analyze` to fail if the analysis server experienced an error. (#29126)
Substantially reduces the danger that a bug in the analysis server
might prevent errors from being detected by `flutter analyze`.
diff --git a/packages/flutter_tools/lib/src/commands/analyze_continuously.dart b/packages/flutter_tools/lib/src/commands/analyze_continuously.dart
index 4d79959..d470d9e 100644
--- a/packages/flutter_tools/lib/src/commands/analyze_continuously.dart
+++ b/packages/flutter_tools/lib/src/commands/analyze_continuously.dart
@@ -67,6 +67,9 @@
if (exitCode != 0)
throwToolExit(message, exitCode: exitCode);
printStatus(message);
+
+ if (server.didServerErrorOccur)
+ throwToolExit('Server error(s) occurred.');
}
void _handleAnalysisStatus(AnalysisServer server, bool isAnalyzing) {
diff --git a/packages/flutter_tools/lib/src/commands/analyze_once.dart b/packages/flutter_tools/lib/src/commands/analyze_once.dart
index d0c6536..ca21e83 100644
--- a/packages/flutter_tools/lib/src/commands/analyze_once.dart
+++ b/packages/flutter_tools/lib/src/commands/analyze_once.dart
@@ -155,6 +155,10 @@
}
}
+ if (server.didServerErrorOccur) {
+ throwToolExit('Server error(s) occurred. (ran in ${seconds}s)');
+ }
+
if (argResults['congratulate']) {
if (undocumentedMembers > 0) {
printStatus('No issues found! (ran in ${seconds}s; $dartdocMessage)');
diff --git a/packages/flutter_tools/lib/src/dart/analysis.dart b/packages/flutter_tools/lib/src/dart/analysis.dart
index 59376bb..6f60c68 100644
--- a/packages/flutter_tools/lib/src/dart/analysis.dart
+++ b/packages/flutter_tools/lib/src/dart/analysis.dart
@@ -27,6 +27,7 @@
StreamController<bool>.broadcast();
final StreamController<FileAnalysisErrors> _errorsController =
StreamController<FileAnalysisErrors>.broadcast();
+ bool _didServerErrorOccur = false;
int _id = 0;
@@ -61,6 +62,7 @@
<String, dynamic>{'included': directories, 'excluded': <String>[]});
}
+ bool get didServerErrorOccur => _didServerErrorOccur;
Stream<bool> get onAnalyzing => _analyzingController.stream;
Stream<FileAnalysisErrors> get onErrors => _errorsController.stream;
@@ -120,6 +122,7 @@
if (error['stackTrace'] != null) {
printError(error['stackTrace']);
}
+ _didServerErrorOccur = true;
}
void _handleAnalysisIssues(Map<String, dynamic> issueInfo) {