| 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.analysis; | 5 library domain.analysis; |
| 6 | 6 |
| 7 import 'dart:async'; |
| 8 |
| 7 import 'package:analysis_server/src/analysis_server.dart'; | 9 import 'package:analysis_server/src/analysis_server.dart'; |
| 8 import 'package:analysis_server/src/computer/computer_hover.dart'; | 10 import 'package:analysis_server/src/computer/computer_hover.dart'; |
| 9 import 'package:analysis_server/src/constants.dart'; | 11 import 'package:analysis_server/src/constants.dart'; |
| 10 import 'package:analysis_server/src/protocol.dart'; | 12 import 'package:analysis_server/src/protocol.dart'; |
| 11 import 'package:analyzer/src/generated/ast.dart'; | 13 import 'package:analyzer/src/generated/ast.dart'; |
| 12 import 'package:analyzer/src/generated/engine.dart' as engine; | 14 import 'package:analyzer/src/generated/engine.dart' as engine; |
| 13 | 15 |
| 14 | 16 |
| 15 /** | 17 /** |
| 16 * Instances of the class [AnalysisDomainHandler] implement a [RequestHandler] | 18 * Instances of the class [AnalysisDomainHandler] implement a [RequestHandler] |
| 17 * that handles requests in the `analysis` domain. | 19 * that handles requests in the `analysis` domain. |
| 18 */ | 20 */ |
| 19 class AnalysisDomainHandler implements RequestHandler { | 21 class AnalysisDomainHandler implements RequestHandler { |
| 20 /** | 22 /** |
| 21 * The analysis server that is using this handler to process requests. | 23 * The analysis server that is using this handler to process requests. |
| 22 */ | 24 */ |
| 23 final AnalysisServer server; | 25 final AnalysisServer server; |
| 24 | 26 |
| 25 /** | 27 /** |
| 26 * Initialize a newly created handler to handle requests for the given [server
]. | 28 * Initialize a newly created handler to handle requests for the given [server
]. |
| 27 */ | 29 */ |
| 28 AnalysisDomainHandler(this.server); | 30 AnalysisDomainHandler(this.server); |
| 29 | 31 |
| 30 /** | 32 /** |
| 31 * Implement the `analysis.getErrors` request. | 33 * Implement the `analysis.getErrors` request. |
| 32 */ | 34 */ |
| 33 Response getErrors(Request request) { | 35 Response getErrors(Request request) { |
| 34 String file = new AnalysisGetErrorsParams.fromRequest(request).file; | 36 String file = new AnalysisGetErrorsParams.fromRequest(request).file; |
| 35 server.onFileAnalysisComplete(file).then((_) { | 37 Future<AnalysisDoneReason> completionFuture = |
| 36 engine.AnalysisErrorInfo errorInfo = server.getErrors(file); | 38 server.onFileAnalysisComplete(file); |
| 37 List<AnalysisError> errors; | 39 if (completionFuture == null) { |
| 38 if (errorInfo == null) { | 40 return new Response.getErrorsInvalidFile(request); |
| 39 errors = []; | 41 } |
| 40 } else { | 42 completionFuture.then((AnalysisDoneReason reason) { |
| 41 errors = AnalysisError.listFromEngine(errorInfo.lineInfo, | 43 switch (reason) { |
| 42 errorInfo.errors); | 44 case AnalysisDoneReason.COMPLETE: |
| 45 engine.AnalysisErrorInfo errorInfo = server.getErrors(file); |
| 46 List<AnalysisError> errors; |
| 47 if (errorInfo == null) { |
| 48 server.sendResponse(new Response.getErrorsInvalidFile(request)); |
| 49 } else { |
| 50 errors = AnalysisError.listFromEngine(errorInfo.lineInfo, |
| 51 errorInfo.errors); |
| 52 server.sendResponse(new AnalysisGetErrorsResult(errors).toResponse( |
| 53 request.id)); |
| 54 } |
| 55 break; |
| 56 case AnalysisDoneReason.CONTEXT_REMOVED: |
| 57 // The active contexts have changed, so try again. |
| 58 Response response = getErrors(request); |
| 59 if (response != Response.DELAYED_RESPONSE) { |
| 60 server.sendResponse(response); |
| 61 } |
| 62 break; |
| 43 } | 63 } |
| 44 server.sendResponse(new AnalysisGetErrorsResult(errors).toResponse( | |
| 45 request.id)); | |
| 46 }).catchError((message) { | |
| 47 if (message is! String) { | |
| 48 engine.AnalysisEngine.instance.logger.logError( | |
| 49 'Illegal error message during getErrors: $message'); | |
| 50 message = ''; | |
| 51 } | |
| 52 server.sendResponse(new Response.getErrorsError(request, message, | |
| 53 new AnalysisGetErrorsResult([]).toJson())); | |
| 54 }); | 64 }); |
| 55 // delay response | 65 // delay response |
| 56 return Response.DELAYED_RESPONSE; | 66 return Response.DELAYED_RESPONSE; |
| 57 } | 67 } |
| 58 | 68 |
| 59 /** | 69 /** |
| 60 * Implement the `analysis.getHover` request. | 70 * Implement the `analysis.getHover` request. |
| 61 */ | 71 */ |
| 62 Response getHover(Request request) { | 72 Response getHover(Request request) { |
| 63 // prepare parameters | 73 // prepare parameters |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 } | 194 } |
| 185 if (newOptions.generateHints != null) { | 195 if (newOptions.generateHints != null) { |
| 186 updaters.add((engine.AnalysisOptionsImpl options) { | 196 updaters.add((engine.AnalysisOptionsImpl options) { |
| 187 options.hint = newOptions.generateHints; | 197 options.hint = newOptions.generateHints; |
| 188 }); | 198 }); |
| 189 } | 199 } |
| 190 server.updateOptions(updaters); | 200 server.updateOptions(updaters); |
| 191 return new AnalysisUpdateOptionsResult().toResponse(request.id); | 201 return new AnalysisUpdateOptionsResult().toResponse(request.id); |
| 192 } | 202 } |
| 193 } | 203 } |
| OLD | NEW |