Chromium Code Reviews| Index: pkg/analysis_server/lib/src/domain_completion.dart |
| diff --git a/pkg/analysis_server/lib/src/domain_completion.dart b/pkg/analysis_server/lib/src/domain_completion.dart |
| index 916b20e7f4e4f2a72b50166864c236d1d00a4c1c..fb2554f58027ca9910f69f003e4e6df06de5b4cf 100644 |
| --- a/pkg/analysis_server/lib/src/domain_completion.dart |
| +++ b/pkg/analysis_server/lib/src/domain_completion.dart |
| @@ -91,7 +91,6 @@ class CompletionDomainHandler implements RequestHandler { |
| } |
| performance.logElapseTime(contributorTag); |
| } |
| - |
| performance.logElapseTime(COMPUTE_SUGGESTIONS_TAG); |
| // TODO (danrubel) if request is obsolete |
| @@ -139,8 +138,14 @@ class CompletionDomainHandler implements RequestHandler { |
| result = await server.getAnalysisResult(params.file); |
| if (result == null || !result.exists) { |
| - server.sendResponse(new Response.unknownSource(request)); |
| - return; |
| + if (server.onNoAnalysisCompletion != null) { |
| + String completionId = (_nextCompletionId++).toString(); |
| + await server.onNoAnalysisCompletion(request, this, params, performance, completionId,); |
|
scheglov
2017/04/26 19:35:04
Extra comma at the end?
|
| + return; |
| + } else { |
| + server.sendResponse(new Response.unknownSource(request)); |
| + return; |
| + } |
| } |
| if (params.offset < 0 || params.offset > result.content.length) { |
| @@ -187,10 +192,10 @@ class CompletionDomainHandler implements RequestHandler { |
| params.offset, |
| performance, |
| server.ideOptions); |
| + |
| String completionId = (_nextCompletionId++).toString(); |
| - _abortCurrentRequest(); |
| - _currentRequest = completionRequest; |
| + setNewRequest(completionRequest); |
| // initial response without results |
| server.sendResponse(new CompletionGetSuggestionsResult(completionId) |
| @@ -203,19 +208,27 @@ class CompletionDomainHandler implements RequestHandler { |
| sendCompletionNotification(completionId, result.replacementOffset, |
| result.replacementLength, result.suggestions); |
| performance.logElapseTime(SEND_NOTIFICATION_TAG); |
| - |
| performance.notificationCount = 1; |
| performance.logFirstNotificationComplete('notification 1 complete'); |
| performance.suggestionCountFirst = result.suggestions.length; |
| performance.suggestionCountLast = result.suggestions.length; |
| performance.complete(); |
| }).whenComplete(() { |
| - if (_currentRequest == completionRequest) { |
| - _currentRequest = null; |
| - } |
| + ifMatchesRequestClear(completionRequest); |
| }); |
| } |
| + void setNewRequest(CompletionRequest completionRequest) { |
| + _abortCurrentRequest(); |
| + _currentRequest = completionRequest; |
| + } |
| + |
| + void ifMatchesRequestClear(CompletionRequest completionRequest) { |
| + if (_currentRequest == completionRequest) { |
| + _currentRequest = null; |
| + } |
| + } |
| + |
| /** |
| * If tracking code completion performance over time, then |
| * record addition information about the request in the performance record. |