Version 2.17.0-283.0.dev
Merge commit 'ca9ba196c8d56471a3e118806788dfa3d0fc359f' into 'dev'
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index f91ecc5..2eff1ad 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -8,8 +8,7 @@
import 'dart:math' show max;
import 'package:analysis_server/protocol/protocol.dart';
-import 'package:analysis_server/protocol/protocol_constants.dart'
- show PROTOCOL_VERSION;
+import 'package:analysis_server/protocol/protocol_constants.dart';
import 'package:analysis_server/protocol/protocol_generated.dart'
hide AnalysisOptions;
import 'package:analysis_server/src/analysis_server_abstract.dart';
@@ -20,7 +19,6 @@
import 'package:analysis_server/src/domain_analytics.dart';
import 'package:analysis_server/src/domain_completion.dart';
import 'package:analysis_server/src/domain_diagnostic.dart';
-import 'package:analysis_server/src/domain_execution.dart';
import 'package:analysis_server/src/domain_kythe.dart';
import 'package:analysis_server/src/domain_server.dart';
import 'package:analysis_server/src/domains/analysis/occurrences.dart';
@@ -28,6 +26,12 @@
import 'package:analysis_server/src/edit/edit_domain.dart';
import 'package:analysis_server/src/flutter/flutter_domain.dart';
import 'package:analysis_server/src/flutter/flutter_notifications.dart';
+import 'package:analysis_server/src/handler/legacy/execution_create_context.dart';
+import 'package:analysis_server/src/handler/legacy/execution_delete_context.dart';
+import 'package:analysis_server/src/handler/legacy/execution_get_suggestions.dart';
+import 'package:analysis_server/src/handler/legacy/execution_map_uri.dart';
+import 'package:analysis_server/src/handler/legacy/execution_set_subscriptions.dart';
+import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
import 'package:analysis_server/src/operation/operation_analysis.dart';
import 'package:analysis_server/src/plugin/notification_manager.dart';
import 'package:analysis_server/src/protocol_server.dart' as server;
@@ -65,11 +69,30 @@
import 'package:telemetry/telemetry.dart' as telemetry;
import 'package:watcher/watcher.dart';
+/// A function that can be executed to create a handler for a request.
+typedef HandlerGenerator = LegacyHandler Function(
+ AnalysisServer, Request, CancellationToken);
+
typedef OptionUpdater = void Function(AnalysisOptionsImpl options);
/// Instances of the class [AnalysisServer] implement a server that listens on a
/// [CommunicationChannel] for analysis requests and process them.
class AnalysisServer extends AbstractAnalysisServer {
+ /// A map from the name of a request to a function used to create a request
+ /// handler.
+ static final Map<String, HandlerGenerator> handlerGenerators = {
+ EXECUTION_REQUEST_CREATE_CONTEXT: (server, request, cancellationToken) =>
+ ExecutionCreateContextHandler(server, request, cancellationToken),
+ EXECUTION_REQUEST_DELETE_CONTEXT: (server, request, cancellationToken) =>
+ ExecutionDeleteContextHandler(server, request, cancellationToken),
+ EXECUTION_REQUEST_GET_SUGGESTIONS: (server, request, cancellationToken) =>
+ ExecutionGetSuggestionsHandler(server, request, cancellationToken),
+ EXECUTION_REQUEST_MAP_URI: (server, request, cancellationToken) =>
+ ExecutionMapUriHandler(server, request, cancellationToken),
+ EXECUTION_REQUEST_SET_SUBSCRIPTIONS: (server, request, cancellationToken) =>
+ ExecutionSetSubscriptionsHandler(server, request, cancellationToken),
+ };
+
/// The channel from which requests are received and to which responses should
/// be sent.
final ServerCommunicationChannel channel;
@@ -225,7 +248,6 @@
EditDomainHandler(this),
SearchDomainHandler(this),
CompletionDomainHandler(this),
- ExecutionDomainHandler(this, executionContext),
DiagnosticDomainHandler(this),
AnalyticsDomainHandler(this),
KytheDomainHandler(this),
@@ -295,33 +317,54 @@
runZonedGuarded(() {
var cancellationToken = CancelableToken();
cancellationTokens[request.id] = cancellationToken;
- var count = handlers.length;
- for (var i = 0; i < count; i++) {
+ var generator = handlerGenerators[request.method];
+ if (generator != null) {
try {
- var response = handlers[i].handleRequest(request, cancellationToken);
- if (response == Response.DELAYED_RESPONSE) {
- return;
- }
- if (response != null) {
- sendResponse(response);
- return;
- }
+ var handler = generator(this, request, cancellationToken);
+ handler.handle();
} on InconsistentAnalysisException {
sendResponse(Response.contentModified(request));
- return;
} on RequestFailure catch (exception) {
sendResponse(exception.response);
- return;
} catch (exception, stackTrace) {
var error =
RequestError(RequestErrorCode.SERVER_ERROR, exception.toString());
error.stackTrace = stackTrace.toString();
var response = Response(request.id, error: error);
sendResponse(response);
- return;
}
+ } else {
+ // TODO(brianwilkerson) When all the handlers are in [handlerGenerators]
+ // remove local variable and for loop below.
+ var count = handlers.length;
+ for (var i = 0; i < count; i++) {
+ try {
+ var response =
+ handlers[i].handleRequest(request, cancellationToken);
+ if (response == Response.DELAYED_RESPONSE) {
+ return;
+ }
+ if (response != null) {
+ sendResponse(response);
+ return;
+ }
+ } on InconsistentAnalysisException {
+ sendResponse(Response.contentModified(request));
+ return;
+ } on RequestFailure catch (exception) {
+ sendResponse(exception.response);
+ return;
+ } catch (exception, stackTrace) {
+ var error = RequestError(
+ RequestErrorCode.SERVER_ERROR, exception.toString());
+ error.stackTrace = stackTrace.toString();
+ var response = Response(request.id, error: error);
+ sendResponse(response);
+ return;
+ }
+ }
+ sendResponse(Response.unknownRequest(request));
}
- sendResponse(Response.unknownRequest(request));
}, (exception, stackTrace) {
instrumentationService.logException(
FatalException(
diff --git a/pkg/analysis_server/lib/src/domain_execution.dart b/pkg/analysis_server/lib/src/domain_execution.dart
deleted file mode 100644
index cdedc79..0000000
--- a/pkg/analysis_server/lib/src/domain_execution.dart
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright (c) 2014, 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 'package:analysis_server/protocol/protocol_constants.dart';
-import 'package:analysis_server/src/analysis_server.dart';
-import 'package:analysis_server/src/handler/legacy/execution_create_context.dart';
-import 'package:analysis_server/src/handler/legacy/execution_delete_context.dart';
-import 'package:analysis_server/src/handler/legacy/execution_get_suggestions.dart';
-import 'package:analysis_server/src/handler/legacy/execution_map_uri.dart';
-import 'package:analysis_server/src/handler/legacy/execution_set_subscriptions.dart';
-import 'package:analysis_server/src/protocol_server.dart';
-import 'package:analysis_server/src/services/execution/execution_context.dart';
-import 'package:analyzer/src/utilities/cancellation.dart';
-
-/// Instances of the class [ExecutionDomainHandler] implement a [RequestHandler]
-/// that handles requests in the `execution` domain.
-class ExecutionDomainHandler implements RequestHandler {
- /// The analysis server that is using this handler to process requests.
- final AnalysisServer server;
-
- /// The context used by the execution domain handlers.
- final ExecutionContext executionContext;
-
- /// Initialize a newly created handler to handle requests for the given
- /// [server].
- ExecutionDomainHandler(this.server, this.executionContext);
-
- @override
- Response? handleRequest(
- Request request, CancellationToken cancellationToken) {
- try {
- var requestName = request.method;
- if (requestName == EXECUTION_REQUEST_CREATE_CONTEXT) {
- ExecutionCreateContextHandler(
- server, request, cancellationToken, executionContext)
- .handle();
- return Response.DELAYED_RESPONSE;
- } else if (requestName == EXECUTION_REQUEST_DELETE_CONTEXT) {
- ExecutionDeleteContextHandler(
- server, request, cancellationToken, executionContext)
- .handle();
- return Response.DELAYED_RESPONSE;
- } else if (requestName == EXECUTION_REQUEST_GET_SUGGESTIONS) {
- ExecutionGetSuggestionsHandler(server, request, cancellationToken)
- .handle();
- return Response.DELAYED_RESPONSE;
- } else if (requestName == EXECUTION_REQUEST_MAP_URI) {
- ExecutionMapUriHandler(
- server, request, cancellationToken, executionContext)
- .handle();
- return Response.DELAYED_RESPONSE;
- } else if (requestName == EXECUTION_REQUEST_SET_SUBSCRIPTIONS) {
- ExecutionSetSubscriptionsHandler(server, request, cancellationToken)
- .handle();
- return Response.DELAYED_RESPONSE;
- }
- } on RequestFailure catch (exception) {
- return exception.response;
- }
- return null;
- }
-}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/execution_create_context.dart b/pkg/analysis_server/lib/src/handler/legacy/execution_create_context.dart
index 40ca6e1..67bed11 100644
--- a/pkg/analysis_server/lib/src/handler/legacy/execution_create_context.dart
+++ b/pkg/analysis_server/lib/src/handler/legacy/execution_create_context.dart
@@ -8,23 +8,20 @@
import 'package:analysis_server/protocol/protocol_generated.dart';
import 'package:analysis_server/src/analysis_server.dart';
import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
-import 'package:analysis_server/src/services/execution/execution_context.dart';
import 'package:analyzer/src/utilities/cancellation.dart';
/// The handler for the `execution.createContext` request.
class ExecutionCreateContextHandler extends LegacyHandler {
- /// The context used by the execution domain handlers.
- final ExecutionContext executionContext;
-
/// Initialize a newly created handler to be able to service requests for the
/// [server].
ExecutionCreateContextHandler(AnalysisServer server, Request request,
- CancellationToken cancellationToken, this.executionContext)
+ CancellationToken cancellationToken)
: super(server, request, cancellationToken);
@override
Future<void> handle() async {
var file = ExecutionCreateContextParams.fromRequest(request).contextRoot;
+ var executionContext = server.executionContext;
var contextId = (executionContext.nextContextId++).toString();
executionContext.contextMap[contextId] = file;
sendResult(ExecutionCreateContextResult(contextId));
diff --git a/pkg/analysis_server/lib/src/handler/legacy/execution_delete_context.dart b/pkg/analysis_server/lib/src/handler/legacy/execution_delete_context.dart
index e4b7aae..07b7701 100644
--- a/pkg/analysis_server/lib/src/handler/legacy/execution_delete_context.dart
+++ b/pkg/analysis_server/lib/src/handler/legacy/execution_delete_context.dart
@@ -8,24 +8,20 @@
import 'package:analysis_server/protocol/protocol_generated.dart';
import 'package:analysis_server/src/analysis_server.dart';
import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
-import 'package:analysis_server/src/services/execution/execution_context.dart';
import 'package:analyzer/src/utilities/cancellation.dart';
/// The handler for the `execution.deleteContext` request.
class ExecutionDeleteContextHandler extends LegacyHandler {
- /// The context used by the execution domain handlers.
- final ExecutionContext executionContext;
-
/// Initialize a newly created handler to be able to service requests for the
/// [server].
ExecutionDeleteContextHandler(AnalysisServer server, Request request,
- CancellationToken cancellationToken, this.executionContext)
+ CancellationToken cancellationToken)
: super(server, request, cancellationToken);
@override
Future<void> handle() async {
var contextId = ExecutionDeleteContextParams.fromRequest(request).id;
- executionContext.contextMap.remove(contextId);
+ server.executionContext.contextMap.remove(contextId);
sendResult(ExecutionDeleteContextResult());
}
}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/execution_map_uri.dart b/pkg/analysis_server/lib/src/handler/legacy/execution_map_uri.dart
index a33a85a..27c59d0 100644
--- a/pkg/analysis_server/lib/src/handler/legacy/execution_map_uri.dart
+++ b/pkg/analysis_server/lib/src/handler/legacy/execution_map_uri.dart
@@ -8,26 +8,22 @@
import 'package:analysis_server/protocol/protocol_generated.dart';
import 'package:analysis_server/src/analysis_server.dart';
import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
-import 'package:analysis_server/src/services/execution/execution_context.dart';
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/src/utilities/cancellation.dart';
/// The handler for the `execution.mapUri` request.
class ExecutionMapUriHandler extends LegacyHandler {
- /// The context used by the execution domain handlers.
- final ExecutionContext executionContext;
-
/// Initialize a newly created handler to be able to service requests for the
/// [server].
ExecutionMapUriHandler(AnalysisServer server, Request request,
- CancellationToken cancellationToken, this.executionContext)
+ CancellationToken cancellationToken)
: super(server, request, cancellationToken);
@override
Future<void> handle() async {
var params = ExecutionMapUriParams.fromRequest(request);
var contextId = params.id;
- var path = executionContext.contextMap[contextId];
+ var path = server.executionContext.contextMap[contextId];
if (path == null) {
sendResponse(Response.invalidParameter(request, 'id',
'There is no execution context with an id of $contextId'));
diff --git a/pkg/analysis_server/test/domain_execution_test.dart b/pkg/analysis_server/test/domain_execution_test.dart
index 42550dc..e1ec249 100644
--- a/pkg/analysis_server/test/domain_execution_test.dart
+++ b/pkg/analysis_server/test/domain_execution_test.dart
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
import 'package:analysis_server/protocol/protocol_generated.dart';
-import 'package:analysis_server/src/domain_execution.dart';
import 'package:analysis_server/src/protocol_server.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -124,7 +123,6 @@
Future<void> setUp() async {
super.setUp();
await createProject();
- handler = ExecutionDomainHandler(server, server.executionContext);
await _createExecutionContext(testFile);
}
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index 2322191..1b46725 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -739,8 +739,6 @@
for (var directive in directivesToResolve) {
directive.element = _libraryElement;
}
-
- // TODO(scheglov) remove DirectiveResolver class
}
void _resolveFile(FileState file, CompilationUnit unit) {
diff --git a/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart b/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
index 1510042..84c6754 100644
--- a/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
@@ -665,8 +665,6 @@
for (var directive in directivesToResolve) {
directive.element = _libraryElement;
}
-
- // TODO(scheglov) remove DirectiveResolver class
}
void _resolveFile({
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 29a2a01..0f87a11 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -258,10 +258,7 @@
/// unit containing the node being visited. The [typeProvider] is the object
/// used to access the types from the core library. The [errorListener] is the
/// error listener that will be informed of any errors that are found during
- /// resolution. The [nameScope] is the scope used to resolve identifiers in
- /// the node that will first be visited. If `null` or unspecified, a new
- /// [LibraryScope] will be created based on [definingLibrary] and
- /// [typeProvider].
+ /// resolution.
///
/// TODO(paulberry): make [featureSet] a required parameter (this will be a
/// breaking change).
@@ -2910,7 +2907,7 @@
/// [definingLibrary] is the element for the library containing the node being
/// visited.
/// [source] is the source representing the compilation unit containing the
- /// node being visited
+ /// node being visited.
/// [typeProvider] is the object used to access the types from the core
/// library.
/// [errorListener] is the error listener that will be informed of any errors
diff --git a/tools/VERSION b/tools/VERSION
index a082332..db9b0e4 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 17
PATCH 0
-PRERELEASE 282
+PRERELEASE 283
PRERELEASE_PATCH 0
\ No newline at end of file