| // Copyright (c) 2018, 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_constants.dart'; | |
| import 'package:analysis_server/src/analysis_server.dart'; | |
| import 'package:analysis_server/src/domain_abstract.dart'; | |
| import 'package:analysis_server/src/flutter/flutter_correction.dart'; | |
| import 'package:analysis_server/src/protocol/protocol_internal.dart'; | |
| import 'package:analysis_server/src/protocol_server.dart'; | |
| import 'package:analyzer/dart/analysis/results.dart'; | |
| /** | |
| * A [RequestHandler] that handles requests in the `flutter` domain. | |
| */ | |
| class FlutterDomainHandler extends AbstractRequestHandler { | |
| /** | |
| * Initialize a newly created handler to handle requests for the given [server]. | |
| */ | |
| FlutterDomainHandler(AnalysisServer server) : super(server); | |
| /** | |
| * Implement the 'flutter.getChangeAddForDesignTimeConstructor' request. | |
| */ | |
| Future getChangeAddForDesignTimeConstructor(Request request) async { | |
| // TODO(brianwilkerson) Determine whether this await is necessary. | |
| await null; | |
| var params = | |
| new FlutterGetChangeAddForDesignTimeConstructorParams.fromRequest( | |
| request); | |
| String file = params.file; | |
| int offset = params.offset; | |
| ResolveResult result = await server.getAnalysisResult(file); | |
| if (result != null) { | |
| var corrections = new FlutterCorrections( | |
| file: file, | |
| fileContent: result.content, | |
| selectionOffset: offset, | |
| selectionLength: 0, | |
| session: result.session, | |
| unit: result.unit); | |
| SourceChange change = await corrections.addForDesignTimeConstructor(); | |
| if (change != null) { | |
| server.sendResponse( | |
| new FlutterGetChangeAddForDesignTimeConstructorResult(change) | |
| .toResponse(request.id)); | |
| return; | |
| } | |
| } | |
| server.sendResponse( | |
| new Response.invalidParameter(request, 'file', 'No change')); | |
| } | |
| @override | |
| Response handleRequest(Request request) { | |
| try { | |
| String requestName = request.method; | |
| if (requestName == | |
| FLUTTER_REQUEST_GET_CHANGE_ADD_FOR_DESIGN_TIME_CONSTRUCTOR) { | |
| getChangeAddForDesignTimeConstructor(request); | |
| return Response.DELAYED_RESPONSE; | |
| } | |
| if (requestName == FLUTTER_REQUEST_SET_SUBSCRIPTIONS) { | |
| return setSubscriptions(request); | |
| } | |
| } on RequestFailure catch (exception) { | |
| return exception.response; | |
| } | |
| return null; | |
| } | |
| /** | |
| * Implement the 'flutter.setSubscriptions' request. | |
| */ | |
| Response setSubscriptions(Request request) { | |
| var params = new FlutterSetSubscriptionsParams.fromRequest(request); | |
| Map<FlutterService, Set<String>> subMap = mapMap(params.subscriptions, | |
| valueCallback: (List<String> subscriptions) => subscriptions.toSet()); | |
| server.setFlutterSubscriptions(subMap); | |
| return new FlutterSetSubscriptionsResult().toResponse(request.id); | |
| } | |
| } |