Add --report-protocol-version option for DAS.
Change-Id: Ifdd0b28e60a13ce12b6952c5220228f1cc337e4c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/218981
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index fd9daec..5a3e760 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -161,9 +161,12 @@
performance = performanceAfterStartup = ServerPerformance();
});
});
- var notification =
- ServerConnectedParams(PROTOCOL_VERSION, io.pid).toNotification();
- channel.sendNotification(notification);
+ channel.sendNotification(
+ ServerConnectedParams(
+ options.reportProtocolVersion ?? PROTOCOL_VERSION,
+ io.pid,
+ ).toNotification(),
+ );
channel.listen(handleRequest, onDone: done, onError: error);
handlers = <server.RequestHandler>[
ServerDomainHandler(this),
@@ -635,6 +638,9 @@
/// The set of enabled features.
FeatureSet featureSet = FeatureSet();
+
+ /// If set, this string will be reported as the protocol version.
+ String? reportProtocolVersion;
}
class ServerContextManagerCallbacks extends ContextManagerCallbacks {
diff --git a/pkg/analysis_server/lib/src/domain_server.dart b/pkg/analysis_server/lib/src/domain_server.dart
index 5dca197..559f3b8 100644
--- a/pkg/analysis_server/lib/src/domain_server.dart
+++ b/pkg/analysis_server/lib/src/domain_server.dart
@@ -19,7 +19,9 @@
/// Return the version number of the analysis server.
Response getVersion(Request request) {
- return ServerGetVersionResult(PROTOCOL_VERSION).toResponse(request.id);
+ return ServerGetVersionResult(
+ server.options.reportProtocolVersion ?? PROTOCOL_VERSION,
+ ).toResponse(request.id);
}
@override
diff --git a/pkg/analysis_server/lib/src/server/driver.dart b/pkg/analysis_server/lib/src/server/driver.dart
index 025eb5b..5016f76 100644
--- a/pkg/analysis_server/lib/src/server/driver.dart
+++ b/pkg/analysis_server/lib/src/server/driver.dart
@@ -101,6 +101,9 @@
/// The path to the package config file override.
static const String PACKAGES_FILE = 'packages';
+ /// The forced protocol version that the server will report to the client.
+ static const String REPORT_PROTOCOL_VERSION = 'report-protocol-version';
+
/// The name of the flag specifying the server protocol to use.
static const String SERVER_PROTOCOL = 'protocol';
static const String PROTOCOL_ANALYZER = 'analyzer';
@@ -160,6 +163,8 @@
analysisServerOptions.clientVersion = results[CLIENT_VERSION];
analysisServerOptions.cacheFolder = results[CACHE_FOLDER];
analysisServerOptions.packagesFile = results[PACKAGES_FILE];
+ analysisServerOptions.reportProtocolVersion =
+ results[REPORT_PROTOCOL_VERSION];
// Read in any per-SDK overrides specified in <sdk>/config/settings.json.
var sdkConfig = SdkConfiguration.readFromSdk();
@@ -688,6 +693,14 @@
defaultsTo: false,
negatable: false,
hide: true);
+ parser.addOption(
+ REPORT_PROTOCOL_VERSION,
+ valueHelp: 'version',
+ help: 'The protocol version that the server will report to the client, '
+ 'can be used to temporary enabling features that we expect to be '
+ 'available in future versions.',
+ hide: true,
+ );
//
// Hidden; these are deprecated and no longer read from.