| Index: pkg/analyzer_plugin/lib/plugin/plugin.dart | 
| diff --git a/pkg/analyzer_plugin/lib/plugin/plugin.dart b/pkg/analyzer_plugin/lib/plugin/plugin.dart | 
| index a5f3fa1b0d70cdd1577deaf5e494f875eb04df68..b1cef681ff61978ba7b4f72d9143eb4b7d4f42c9 100644 | 
| --- a/pkg/analyzer_plugin/lib/plugin/plugin.dart | 
| +++ b/pkg/analyzer_plugin/lib/plugin/plugin.dart | 
| @@ -2,6 +2,8 @@ | 
| // 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:analyzer/file_system/file_system.dart'; | 
| import 'package:analyzer/file_system/physical_file_system.dart'; | 
| import 'package:analyzer/src/dart/analysis/driver.dart' | 
| @@ -179,8 +181,8 @@ abstract class ServerPlugin { | 
| /** | 
| * Handle an 'analysis.handleWatchEvents' request. | 
| */ | 
| -  AnalysisHandleWatchEventsResult handleAnalysisHandleWatchEvents( | 
| -      AnalysisHandleWatchEventsParams parameters) { | 
| +  Future<AnalysisHandleWatchEventsResult> handleAnalysisHandleWatchEvents( | 
| +      AnalysisHandleWatchEventsParams parameters) async { | 
| for (WatchEvent event in parameters.events) { | 
| switch (event.type) { | 
| case WatchEventType.ADD: | 
| @@ -203,9 +205,9 @@ abstract class ServerPlugin { | 
| /** | 
| * Handle an 'analysis.reanalyze' request. | 
| */ | 
| -  AnalysisReanalyzeResult handleAnalysisReanalyze( | 
| -      AnalysisReanalyzeParams parameters) { | 
| -    var rootPaths = parameters.roots; | 
| +  Future<AnalysisReanalyzeResult> handleAnalysisReanalyze( | 
| +      AnalysisReanalyzeParams parameters) async { | 
| +    List<String> rootPaths = parameters.roots; | 
| if (rootPaths == null) { | 
| // | 
| // Reanalyze everything. | 
| @@ -236,15 +238,16 @@ abstract class ServerPlugin { | 
| /** | 
| * Handle an 'analysis.setContextBuilderOptions' request. | 
| */ | 
| -  AnalysisSetContextBuilderOptionsResult handleAnalysisSetContextBuilderOptions( | 
| -          AnalysisSetContextBuilderOptionsParams parameters) => | 
| -      null; | 
| +  Future<AnalysisSetContextBuilderOptionsResult> | 
| +      handleAnalysisSetContextBuilderOptions( | 
| +              AnalysisSetContextBuilderOptionsParams parameters) async => | 
| +          null; | 
|  | 
| /** | 
| * Handle an 'analysis.setContextRoots' request. | 
| */ | 
| -  AnalysisSetContextRootsResult handleAnalysisSetContextRoots( | 
| -      AnalysisSetContextRootsParams parameters) { | 
| +  Future<AnalysisSetContextRootsResult> handleAnalysisSetContextRoots( | 
| +      AnalysisSetContextRootsParams parameters) async { | 
| List<ContextRoot> contextRoots = parameters.roots; | 
| List<ContextRoot> oldRoots = driverMap.keys.toList(); | 
| for (ContextRoot contextRoot in contextRoots) { | 
| @@ -268,8 +271,8 @@ abstract class ServerPlugin { | 
| /** | 
| * Handle an 'analysis.setPriorityFiles' request. | 
| */ | 
| -  AnalysisSetPriorityFilesResult handleAnalysisSetPriorityFiles( | 
| -      AnalysisSetPriorityFilesParams parameters) { | 
| +  Future<AnalysisSetPriorityFilesResult> handleAnalysisSetPriorityFiles( | 
| +      AnalysisSetPriorityFilesParams parameters) async { | 
| List<String> files = parameters.files; | 
| Map<AnalysisDriverGeneric, List<String>> filesByDriver = | 
| <AnalysisDriverGeneric, List<String>>{}; | 
| @@ -292,8 +295,8 @@ abstract class ServerPlugin { | 
| * override this method, but should instead use the [subscriptionManager] to | 
| * access the list of subscriptions for any given file. | 
| */ | 
| -  AnalysisSetSubscriptionsResult handleAnalysisSetSubscriptions( | 
| -      AnalysisSetSubscriptionsParams parameters) { | 
| +  Future<AnalysisSetSubscriptionsResult> handleAnalysisSetSubscriptions( | 
| +      AnalysisSetSubscriptionsParams parameters) async { | 
| Map<AnalysisService, List<String>> subscriptions = parameters.subscriptions; | 
| Map<String, List<AnalysisService>> newSubscriptions = | 
| subscriptionManager.setSubscriptions(subscriptions); | 
| @@ -306,8 +309,8 @@ abstract class ServerPlugin { | 
| * override this method, but should instead use the [contentCache] to access | 
| * the current content of overlaid files. | 
| */ | 
| -  AnalysisUpdateContentResult handleAnalysisUpdateContent( | 
| -      AnalysisUpdateContentParams parameters) { | 
| +  Future<AnalysisUpdateContentResult> handleAnalysisUpdateContent( | 
| +      AnalysisUpdateContentParams parameters) async { | 
| Map<String, Object> files = parameters.files; | 
| files.forEach((String filePath, Object overlay) { | 
| // We don't need to get the correct URI because only the full path is | 
| @@ -343,15 +346,16 @@ abstract class ServerPlugin { | 
| /** | 
| * Handle a 'completion.getSuggestions' request. | 
| */ | 
| -  CompletionGetSuggestionsResult handleCompletionGetSuggestions( | 
| -          CompletionGetSuggestionsParams parameters) => | 
| +  Future<CompletionGetSuggestionsResult> handleCompletionGetSuggestions( | 
| +          CompletionGetSuggestionsParams parameters) async => | 
| new CompletionGetSuggestionsResult( | 
| -1, -1, const <CompletionSuggestion>[]); | 
|  | 
| /** | 
| * Handle an 'edit.getAssists' request. | 
| */ | 
| -  EditGetAssistsResult handleEditGetAssists(EditGetAssistsParams parameters) => | 
| +  Future<EditGetAssistsResult> handleEditGetAssists( | 
| +          EditGetAssistsParams parameters) async => | 
| new EditGetAssistsResult(const <PrioritizedSourceChange>[]); | 
|  | 
| /** | 
| @@ -359,21 +363,22 @@ abstract class ServerPlugin { | 
| * this method in order to participate in refactorings must also override the | 
| * method [handleEditGetRefactoring]. | 
| */ | 
| -  EditGetAvailableRefactoringsResult handleEditGetAvailableRefactorings( | 
| -          EditGetAvailableRefactoringsParams parameters) => | 
| +  Future<EditGetAvailableRefactoringsResult> handleEditGetAvailableRefactorings( | 
| +          EditGetAvailableRefactoringsParams parameters) async => | 
| new EditGetAvailableRefactoringsResult(const <RefactoringKind>[]); | 
|  | 
| /** | 
| * Handle an 'edit.getFixes' request. | 
| */ | 
| -  EditGetFixesResult handleEditGetFixes(EditGetFixesParams parameters) => | 
| +  Future<EditGetFixesResult> handleEditGetFixes( | 
| +          EditGetFixesParams parameters) async => | 
| new EditGetFixesResult(const <AnalysisErrorFixes>[]); | 
|  | 
| /** | 
| * Handle an 'edit.getRefactoring' request. | 
| */ | 
| -  EditGetRefactoringResult handleEditGetRefactoring( | 
| -          EditGetRefactoringParams parameters) => | 
| +  Future<EditGetRefactoringResult> handleEditGetRefactoring( | 
| +          EditGetRefactoringParams parameters) async => | 
| null; | 
|  | 
| /** | 
| @@ -381,14 +386,15 @@ abstract class ServerPlugin { | 
| * perform any required clean-up, but cannot prevent the plugin from shutting | 
| * down. | 
| */ | 
| -  PluginShutdownResult handlePluginShutdown(PluginShutdownParams parameters) => | 
| +  Future<PluginShutdownResult> handlePluginShutdown( | 
| +          PluginShutdownParams parameters) async => | 
| new PluginShutdownResult(); | 
|  | 
| /** | 
| * Handle a 'plugin.versionCheck' request. | 
| */ | 
| -  PluginVersionCheckResult handlePluginVersionCheck( | 
| -      PluginVersionCheckParams parameters) { | 
| +  Future<PluginVersionCheckResult> handlePluginVersionCheck( | 
| +      PluginVersionCheckParams parameters) async { | 
| String byteStorePath = parameters.byteStorePath; | 
| String versionString = parameters.version; | 
| Version serverVersion = new Version.parse(versionString); | 
| @@ -441,68 +447,68 @@ abstract class ServerPlugin { | 
| * Compute the response that should be returned for the given [request], or | 
| * `null` if the response has already been sent. | 
| */ | 
| -  Response _getResponse(Request request) { | 
| +  Future<Response> _getResponse(Request request) async { | 
| ResponseResult result = null; | 
| switch (request.method) { | 
| case ANALYSIS_REQUEST_HANDLE_WATCH_EVENTS: | 
| var params = new AnalysisHandleWatchEventsParams.fromRequest(request); | 
| -        result = handleAnalysisHandleWatchEvents(params); | 
| +        result = await handleAnalysisHandleWatchEvents(params); | 
| break; | 
| case ANALYSIS_REQUEST_REANALYZE: | 
| var params = new AnalysisReanalyzeParams.fromRequest(request); | 
| -        result = handleAnalysisReanalyze(params); | 
| +        result = await handleAnalysisReanalyze(params); | 
| break; | 
| case ANALYSIS_REQUEST_SET_CONTEXT_BUILDER_OPTIONS: | 
| var params = | 
| new AnalysisSetContextBuilderOptionsParams.fromRequest(request); | 
| -        result = handleAnalysisSetContextBuilderOptions(params); | 
| +        result = await handleAnalysisSetContextBuilderOptions(params); | 
| break; | 
| case ANALYSIS_REQUEST_SET_CONTEXT_ROOTS: | 
| var params = new AnalysisSetContextRootsParams.fromRequest(request); | 
| -        result = handleAnalysisSetContextRoots(params); | 
| +        result = await handleAnalysisSetContextRoots(params); | 
| break; | 
| case ANALYSIS_REQUEST_SET_PRIORITY_FILES: | 
| var params = new AnalysisSetPriorityFilesParams.fromRequest(request); | 
| -        result = handleAnalysisSetPriorityFiles(params); | 
| +        result = await handleAnalysisSetPriorityFiles(params); | 
| break; | 
| case ANALYSIS_REQUEST_SET_SUBSCRIPTIONS: | 
| var params = new AnalysisSetSubscriptionsParams.fromRequest(request); | 
| -        result = handleAnalysisSetSubscriptions(params); | 
| +        result = await handleAnalysisSetSubscriptions(params); | 
| break; | 
| case ANALYSIS_REQUEST_UPDATE_CONTENT: | 
| var params = new AnalysisUpdateContentParams.fromRequest(request); | 
| -        result = handleAnalysisUpdateContent(params); | 
| +        result = await handleAnalysisUpdateContent(params); | 
| break; | 
| case COMPLETION_REQUEST_GET_SUGGESTIONS: | 
| var params = new CompletionGetSuggestionsParams.fromRequest(request); | 
| -        result = handleCompletionGetSuggestions(params); | 
| +        result = await handleCompletionGetSuggestions(params); | 
| break; | 
| case EDIT_REQUEST_GET_ASSISTS: | 
| var params = new EditGetAssistsParams.fromRequest(request); | 
| -        result = handleEditGetAssists(params); | 
| +        result = await handleEditGetAssists(params); | 
| break; | 
| case EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS: | 
| var params = | 
| new EditGetAvailableRefactoringsParams.fromRequest(request); | 
| -        result = handleEditGetAvailableRefactorings(params); | 
| +        result = await handleEditGetAvailableRefactorings(params); | 
| break; | 
| case EDIT_REQUEST_GET_FIXES: | 
| var params = new EditGetFixesParams.fromRequest(request); | 
| -        result = handleEditGetFixes(params); | 
| +        result = await handleEditGetFixes(params); | 
| break; | 
| case EDIT_REQUEST_GET_REFACTORING: | 
| var params = new EditGetRefactoringParams.fromRequest(request); | 
| -        result = handleEditGetRefactoring(params); | 
| +        result = await handleEditGetRefactoring(params); | 
| break; | 
| case PLUGIN_REQUEST_SHUTDOWN: | 
| var params = new PluginShutdownParams(); | 
| -        result = handlePluginShutdown(params); | 
| +        result = await handlePluginShutdown(params); | 
| _channel.sendResponse(result.toResponse(request.id)); | 
| _channel.close(); | 
| return null; | 
| case PLUGIN_REQUEST_VERSION_CHECK: | 
| var params = new PluginVersionCheckParams.fromRequest(request); | 
| -        result = handlePluginVersionCheck(params); | 
| +        result = await handlePluginVersionCheck(params); | 
| break; | 
| } | 
| if (result == null) { | 
| @@ -516,13 +522,13 @@ abstract class ServerPlugin { | 
| * The method that is called when a [request] is received from the analysis | 
| * server. | 
| */ | 
| -  void _onRequest(Request request) { | 
| +  Future<Null> _onRequest(Request request) async { | 
| String id = request.id; | 
| Response response; | 
| try { | 
| -      response = _getResponse(request); | 
| +      response = await _getResponse(request); | 
| } on RequestFailure catch (exception) { | 
| -      _channel.sendResponse(new Response(id, error: exception.error)); | 
| +      response = new Response(id, error: exception.error); | 
| } catch (exception, stackTrace) { | 
| response = new Response(id, | 
| error: new RequestError( | 
|  |