| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library domain.completion; | 5 library domain.completion; |
| 6 | 6 |
| 7 import 'package:analysis_server/src/analysis_server.dart'; | 7 import 'package:analysis_server/src/analysis_server.dart'; |
| 8 import 'package:analysis_server/src/constants.dart'; | 8 import 'package:analysis_server/src/constants.dart'; |
| 9 import 'package:analysis_server/src/protocol.dart'; | 9 import 'package:analysis_server/src/protocol.dart'; |
| 10 import 'package:analysis_server/src/services/completion/completion_manager.dart'
; | 10 import 'package:analysis_server/src/services/completion/completion_manager.dart'
; |
| 11 | 11 |
| 12 /** | 12 /** |
| 13 * Instances of the class [CompletionDomainHandler] implement a [RequestHandler] | 13 * Instances of the class [CompletionDomainHandler] implement a [RequestHandler] |
| 14 * that handles requests in the search domain. | 14 * that handles requests in the search domain. |
| 15 */ | 15 */ |
| 16 class CompletionDomainHandler implements RequestHandler { | 16 class CompletionDomainHandler implements RequestHandler { |
| 17 /** | 17 /** |
| 18 * The analysis server that is using this handler to process requests. | 18 * The analysis server that is using this handler to process requests. |
| 19 */ | 19 */ |
| 20 final AnalysisServer server; | 20 final AnalysisServer server; |
| 21 | 21 |
| 22 /** | 22 /** |
| 23 * The next completion response id. | 23 * The next completion response id. |
| 24 */ | 24 */ |
| 25 int _nextCompletionId = 0; | 25 int _nextCompletionId = 0; |
| 26 | 26 |
| 27 /** | 27 /** |
| 28 * Code completion peformance for the last completion operation. |
| 29 */ |
| 30 CompletionPerformance performance; |
| 31 |
| 32 /** |
| 28 * Initialize a new request handler for the given [server]. | 33 * Initialize a new request handler for the given [server]. |
| 29 */ | 34 */ |
| 30 CompletionDomainHandler(this.server); | 35 CompletionDomainHandler(this.server); |
| 31 | 36 |
| 32 @override | 37 @override |
| 33 Response handleRequest(Request request) { | 38 Response handleRequest(Request request) { |
| 34 try { | 39 try { |
| 35 String requestName = request.method; | 40 String requestName = request.method; |
| 36 if (requestName == COMPLETION_GET_SUGGESTIONS) { | 41 if (requestName == COMPLETION_GET_SUGGESTIONS) { |
| 37 return processRequest(request); | 42 return processRequest(request); |
| 38 } | 43 } |
| 39 } on RequestFailure catch (exception) { | 44 } on RequestFailure catch (exception) { |
| 40 return exception.response; | 45 return exception.response; |
| 41 } | 46 } |
| 42 return null; | 47 return null; |
| 43 } | 48 } |
| 44 | 49 |
| 45 /** | 50 /** |
| 46 * Process a `completion.getSuggestions` request. | 51 * Process a `completion.getSuggestions` request. |
| 47 */ | 52 */ |
| 48 Response processRequest(Request request) { | 53 Response processRequest(Request request) { |
| 54 performance = new CompletionPerformance(); |
| 49 // extract params | 55 // extract params |
| 50 var params = new CompletionGetSuggestionsParams.fromRequest(request); | 56 CompletionGetSuggestionsParams params = |
| 57 new CompletionGetSuggestionsParams.fromRequest(request); |
| 51 // schedule completion analysis | 58 // schedule completion analysis |
| 52 String completionId = (_nextCompletionId++).toString(); | 59 String completionId = (_nextCompletionId++).toString(); |
| 53 CompletionManager.create( | 60 CompletionManager.create( |
| 54 server.getAnalysisContext(params.file), | 61 server.getAnalysisContext(params.file), |
| 55 server.getSource(params.file), | 62 server.getSource(params.file), |
| 56 params.offset, | 63 params.offset, |
| 57 server.searchEngine).results().listen((CompletionResult result) { | 64 server.searchEngine, |
| 65 performance).results().listen((CompletionResult result) { |
| 58 sendCompletionNotification( | 66 sendCompletionNotification( |
| 59 completionId, | 67 completionId, |
| 60 result.replacementOffset, | 68 result.replacementOffset, |
| 61 result.replacementLength, | 69 result.replacementLength, |
| 62 result.suggestions, | 70 result.suggestions, |
| 63 result.last); | 71 result.last); |
| 72 if (result.last) { |
| 73 performance.complete(); |
| 74 } |
| 64 }); | 75 }); |
| 65 // initial response without results | 76 // initial response without results |
| 66 return new CompletionGetSuggestionsResult(completionId).toResponse( | 77 return new CompletionGetSuggestionsResult( |
| 67 request.id); | 78 completionId).toResponse(request.id); |
| 68 } | 79 } |
| 69 | 80 |
| 70 /** | 81 /** |
| 71 * Send completion notification results. | 82 * Send completion notification results. |
| 72 */ | 83 */ |
| 73 void sendCompletionNotification(String completionId, int replacementOffset, | 84 void sendCompletionNotification(String completionId, int replacementOffset, |
| 74 int replacementLength, Iterable<CompletionSuggestion> results, bool isLast
) { | 85 int replacementLength, Iterable<CompletionSuggestion> results, bool isLast
) { |
| 75 server.sendNotification(new CompletionResultsParams(completionId, | 86 server.sendNotification( |
| 76 replacementOffset, replacementLength, results, isLast).toNotification())
; | 87 new CompletionResultsParams( |
| 88 completionId, |
| 89 replacementOffset, |
| 90 replacementLength, |
| 91 results, |
| 92 isLast).toNotification()); |
| 77 } | 93 } |
| 78 } | 94 } |
| OLD | NEW |