blob: 8c638bee70400729d106b6f55d2ccb7b65ca1903 [file] [log] [blame]
// 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 'dart:async';
import 'package:analysis_server/protocol/protocol.dart';
import 'package:analysis_server/protocol/protocol_constants.dart';
import 'package:analysis_server/src/domain_abstract.dart';
import 'package:analysis_server/src/handler/legacy/completion_get_suggestion_details.dart';
import 'package:analysis_server/src/handler/legacy/completion_get_suggestion_details2.dart';
import 'package:analysis_server/src/handler/legacy/completion_get_suggestions.dart';
import 'package:analysis_server/src/handler/legacy/completion_get_suggestions2.dart';
import 'package:analysis_server/src/handler/legacy/completion_set_subscriptions.dart';
import 'package:analyzer/exception/exception.dart';
import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/utilities/cancellation.dart';
/// Instances of the class [CompletionDomainHandler] implement a
/// [RequestHandler] that handles requests in the completion domain.
class CompletionDomainHandler extends AbstractRequestHandler {
/// Initialize a new request handler for the given [server].
CompletionDomainHandler(super.server);
@override
Response? handleRequest(
Request request, CancellationToken cancellationToken) {
if (!server.options.featureSet.completion) {
return Response.invalidParameter(
request,
'request',
'The completion feature is not enabled',
);
}
return runZonedGuarded<Response?>(() {
var requestName = request.method;
if (requestName == COMPLETION_REQUEST_GET_SUGGESTION_DETAILS) {
CompletionGetSuggestionDetailsHandler(
server, request, cancellationToken)
.handle();
return Response.DELAYED_RESPONSE;
} else if (requestName == COMPLETION_REQUEST_GET_SUGGESTION_DETAILS2) {
CompletionGetSuggestionDetails2Handler(
server, request, cancellationToken)
.handle();
return Response.DELAYED_RESPONSE;
} else if (requestName == COMPLETION_REQUEST_GET_SUGGESTIONS) {
CompletionGetSuggestionsHandler(server, request, cancellationToken)
.handle();
return Response.DELAYED_RESPONSE;
} else if (requestName == COMPLETION_REQUEST_GET_SUGGESTIONS2) {
CompletionGetSuggestions2Handler(server, request, cancellationToken)
.handle();
return Response.DELAYED_RESPONSE;
} else if (requestName == COMPLETION_REQUEST_SET_SUBSCRIPTIONS) {
CompletionSetSubscriptionsHandler(server, request, cancellationToken)
.handle();
return Response.DELAYED_RESPONSE;
}
return null;
}, (exception, stackTrace) {
AnalysisEngine.instance.instrumentationService.logException(
CaughtException.withMessage(
'Failed to handle completion domain request: ${request.method}',
exception,
stackTrace));
});
}
}