Version 2.14.0-371.0.dev

Merge commit '58969783ba6b20b68c42da32a91a77e5862bbafb' into 'dev'
diff --git a/pkg/dartdev/lib/src/analysis_server.dart b/pkg/dartdev/lib/src/analysis_server.dart
index 0e0f59c..9768d39 100644
--- a/pkg/dartdev/lib/src/analysis_server.dart
+++ b/pkg/dartdev/lib/src/analysis_server.dart
@@ -9,6 +9,7 @@
 import 'package:analysis_server/src/server/driver.dart' show Driver;
 import 'package:analysis_server_client/protocol.dart'
     show EditBulkFixesResult, ResponseDecoder;
+import 'package:args/args.dart';
 import 'package:meta/meta.dart';
 import 'package:path/path.dart' as path;
 
@@ -16,17 +17,23 @@
 import 'sdk.dart';
 import 'utils.dart';
 
+/// When set, this function is executed just before the Analysis Server starts.
+void Function(String cmdName, List<FileSystemEntity> analysisRoots,
+    ArgResults argResults) preAnalysisServerStart;
+
 /// A class to provide an API wrapper around an analysis server process.
 class AnalysisServer {
   AnalysisServer(
     this.sdkPath,
     this.analysisRoots, {
     @required this.commandName,
+    @required this.argResults,
   });
 
   final Directory sdkPath;
   final List<FileSystemEntity> analysisRoots;
   final String commandName;
+  final ArgResults argResults;
 
   Process _process;
 
@@ -69,6 +76,7 @@
   final Map<String, Completer<Map<String, dynamic>>> _requestCompleters = {};
 
   Future<void> start() async {
+    preAnalysisServerStart?.call(commandName, analysisRoots, argResults);
     final List<String> command = <String>[
       sdk.analysisServerSnapshot,
       '--${Driver.SUPPRESS_ANALYTICS_FLAG}',
diff --git a/pkg/dartdev/lib/src/commands/analyze.dart b/pkg/dartdev/lib/src/commands/analyze.dart
index a4c02be..0c1d925 100644
--- a/pkg/dartdev/lib/src/commands/analyze.dart
+++ b/pkg/dartdev/lib/src/commands/analyze.dart
@@ -100,6 +100,7 @@
       io.Directory(sdk.sdkPath),
       targets,
       commandName: 'analyze',
+      argResults: argResults,
     );
 
     server.onErrors.listen((FileAnalysisErrors fileErrors) {
diff --git a/pkg/dartdev/lib/src/commands/fix.dart b/pkg/dartdev/lib/src/commands/fix.dart
index 60d2e46..08d4d36 100644
--- a/pkg/dartdev/lib/src/commands/fix.dart
+++ b/pkg/dartdev/lib/src/commands/fix.dart
@@ -93,6 +93,7 @@
       io.Directory(sdk.sdkPath),
       [dir],
       commandName: 'fix',
+      argResults: argResults,
     );
 
     await server.start();
diff --git a/pkg/dartdev/lib/src/core.dart b/pkg/dartdev/lib/src/core.dart
index 2da96fc..b84cd86 100644
--- a/pkg/dartdev/lib/src/core.dart
+++ b/pkg/dartdev/lib/src/core.dart
@@ -18,6 +18,10 @@
 Logger log;
 bool isDiagnostics = false;
 
+/// When set, this function is executed from the [DartdevCommand] constructor to
+/// contribute additional flags.
+void Function(ArgParser argParser, String cmdName) flagContributor;
+
 abstract class DartdevCommand extends Command<int> {
   final String _name;
   final String _description;
@@ -29,7 +33,9 @@
   final bool hidden;
 
   DartdevCommand(this._name, this._description, this._verbose,
-      {this.hidden = false});
+      {this.hidden = false}) {
+    flagContributor?.call(argParser, _name);
+  }
 
   @override
   String get name => _name;
diff --git a/pkg/dartdev/test/analysis_server_test.dart b/pkg/dartdev/test/analysis_server_test.dart
index dba2ccc..05f7597 100644
--- a/pkg/dartdev/test/analysis_server_test.dart
+++ b/pkg/dartdev/test/analysis_server_test.dart
@@ -25,14 +25,14 @@
 
     test('can start', () async {
       AnalysisServer server = AnalysisServer(io.Directory(sdk.sdkPath), [p.dir],
-          commandName: 'testing');
+          commandName: 'testing', argResults: null);
       await server.start();
       await server.shutdown();
     });
 
     test('can send message', () async {
       AnalysisServer server = AnalysisServer(io.Directory(sdk.sdkPath), [p.dir],
-          commandName: 'testing');
+          commandName: 'testing', argResults: null);
       await server.start();
 
       final response = await server.getVersion();
diff --git a/tools/VERSION b/tools/VERSION
index d3f29b9..2713250 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 370
+PRERELEASE 371
 PRERELEASE_PATCH 0
\ No newline at end of file