Chromium Code Reviews| 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.edit; | 5 library edit.domain; |
| 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_services/constants.dart'; | 10 import 'package:analysis_services/constants.dart'; |
| 11 import 'package:analysis_services/correction/fix.dart'; | |
| 12 import 'package:analysis_services/search/search_engine.dart'; | |
| 13 import 'package:analyzer/src/generated/error.dart' as engine; | |
| 14 import 'package:analyzer/src/generated/engine.dart' as engine; | |
| 15 import 'package:analyzer/src/generated/ast.dart'; | |
| 16 import 'package:analysis_server/src/computer/error.dart'; | |
| 17 import 'package:analysis_server/src/edit/fix.dart'; | |
| 18 | |
| 11 | 19 |
| 12 /** | 20 /** |
| 13 * Instances of the class [EditDomainHandler] implement a [RequestHandler] | 21 * Instances of the class [EditDomainHandler] implement a [RequestHandler] |
| 14 * that handles requests in the edit domain. | 22 * that handles requests in the edit domain. |
| 15 */ | 23 */ |
| 16 class EditDomainHandler implements RequestHandler { | 24 class EditDomainHandler implements RequestHandler { |
| 17 /** | 25 /** |
| 18 * The analysis server that is using this handler to process requests. | 26 * The analysis server that is using this handler to process requests. |
| 19 */ | 27 */ |
| 20 final AnalysisServer server; | 28 final AnalysisServer server; |
| 21 | 29 |
| 22 /** | 30 /** |
| 31 * The [SearchEngine] for this server. | |
| 32 */ | |
| 33 SearchEngine searchEngine; | |
| 34 | |
| 35 /** | |
| 23 * Initialize a newly created handler to handle requests for the given [server ]. | 36 * Initialize a newly created handler to handle requests for the given [server ]. |
| 24 */ | 37 */ |
| 25 EditDomainHandler(this.server); | 38 EditDomainHandler(this.server) { |
| 26 | 39 searchEngine = server.searchEngine; |
| 27 @override | |
| 28 Response handleRequest(Request request) { | |
| 29 try { | |
| 30 String requestName = request.method; | |
| 31 if (requestName == EDIT_APPLY_REFACTORING) { | |
| 32 return applyRefactoring(request); | |
| 33 } else if (requestName == EDIT_CREATE_REFACTORING) { | |
| 34 return createRefactoring(request); | |
| 35 } else if (requestName == EDIT_DELETE_REFACTORING) { | |
| 36 return deleteRefactoring(request); | |
| 37 } else if (requestName == EDIT_GET_ASSISTS) { | |
| 38 return getAssists(request); | |
| 39 } else if (requestName == EDIT_GET_FIXES) { | |
| 40 return getFixes(request); | |
| 41 } else if (requestName == EDIT_GET_REFACTORINGS) { | |
| 42 return getRefactorings(request); | |
| 43 } else if (requestName == EDIT_SET_REFACTORING_OPTIONS) { | |
| 44 return setRefactoringOptions(request); | |
| 45 } | |
| 46 } on RequestFailure catch (exception) { | |
| 47 return exception.response; | |
| 48 } | |
| 49 return null; | |
| 50 } | 40 } |
| 51 | 41 |
| 52 Response applyRefactoring(Request request) { | 42 Response applyRefactoring(Request request) { |
| 53 // id | 43 // id |
| 54 RequestDatum idDatum = request.getRequiredParameter(ID); | 44 RequestDatum idDatum = request.getRequiredParameter(ID); |
| 55 String id = idDatum.asString(); | 45 String id = idDatum.asString(); |
| 56 // TODO(brianwilkerson) implement | 46 // TODO(brianwilkerson) implement |
| 57 return null; | 47 return null; |
| 58 } | 48 } |
| 59 | 49 |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 90 RequestDatum offsetDatum = request.getRequiredParameter(OFFSET); | 80 RequestDatum offsetDatum = request.getRequiredParameter(OFFSET); |
| 91 int offset = offsetDatum.asInt(); | 81 int offset = offsetDatum.asInt(); |
| 92 // length | 82 // length |
| 93 RequestDatum lengthDatum = request.getRequiredParameter(LENGTH); | 83 RequestDatum lengthDatum = request.getRequiredParameter(LENGTH); |
| 94 int length = lengthDatum.asInt(); | 84 int length = lengthDatum.asInt(); |
| 95 // TODO(brianwilkerson) implement | 85 // TODO(brianwilkerson) implement |
| 96 return null; | 86 return null; |
| 97 } | 87 } |
| 98 | 88 |
| 99 Response getFixes(Request request) { | 89 Response getFixes(Request request) { |
| 100 // errors | 90 String file = request.getRequiredParameter(FILE).asString(); |
| 101 RequestDatum errorsDatum = request.getRequiredParameter(ERRORS); | 91 int offset = request.getRequiredParameter(OFFSET).asInt(); |
| 102 // TODO(paulberry): the API for edit.getFixes should be changed to so that | 92 List<ErrorFixes> errorFixesList = <ErrorFixes>[]; |
| 103 // it doesn't use AnalysisError as an input type. This is necessary | 93 List<CompilationUnit> units = server.getResolvedCompilationUnits(file); |
| 104 // because the JSON protocol for an AnalysisError doesn't contain the | 94 for (CompilationUnit unit in units) { |
| 105 // errorCode, so we don't have enough information to reconstitute the error | 95 engine.AnalysisErrorInfo errorInfo = server.getErrors(file); |
| 106 // object. | 96 if (errorInfo != null) { |
| 107 // List<AnalysisError> errors = errorsDatum.asList((RequestDatum datum) { | 97 for (engine.AnalysisError error in errorInfo.errors) { |
| 108 // return _createAnalysisError(request, datum); | 98 List<Fix> fixes = computeFixes(searchEngine, file, unit, error); |
| 109 // }); | 99 if (fixes.isNotEmpty) { |
| 110 | 100 AnalysisError serverError = |
| 111 // TODO(brianwilkerson) implement | 101 new AnalysisError.fromEngine(errorInfo.lineInfo, error); |
| 112 return null; | 102 ErrorFixes errorFixes = new ErrorFixes(serverError); |
| 103 errorFixesList.add(errorFixes); | |
| 104 fixes.forEach((fix) { | |
| 105 return errorFixes.addFix(fix); | |
| 106 }); | |
| 107 } | |
| 108 } | |
| 109 } | |
| 110 } | |
| 111 // respond | |
| 112 return new Response(request.id)..setResult(FIXES, errorFixesList); | |
|
Paul Berry
2014/07/22 20:22:06
'..' looks weird here. Just use '.'.
scheglov
2014/07/22 20:31:31
We use ".." to set a result and still return the R
Paul Berry
2014/07/22 20:41:43
Ah, ok. I understand now.
| |
| 113 } | 113 } |
| 114 | 114 |
| 115 Response getRefactorings(Request request) { | 115 Response getRefactorings(Request request) { |
| 116 // file | 116 // file |
| 117 RequestDatum fileDatum = request.getRequiredParameter(FILE); | 117 RequestDatum fileDatum = request.getRequiredParameter(FILE); |
| 118 String file = fileDatum.asString(); | 118 String file = fileDatum.asString(); |
| 119 // offset | 119 // offset |
| 120 RequestDatum offsetDatum = request.getRequiredParameter(OFFSET); | 120 RequestDatum offsetDatum = request.getRequiredParameter(OFFSET); |
| 121 int offset = offsetDatum.asInt(); | 121 int offset = offsetDatum.asInt(); |
| 122 // length | 122 // length |
| 123 RequestDatum lengthDatum = request.getRequiredParameter(LENGTH); | 123 RequestDatum lengthDatum = request.getRequiredParameter(LENGTH); |
| 124 int length = lengthDatum.asInt(); | 124 int length = lengthDatum.asInt(); |
| 125 // TODO(brianwilkerson) implement | 125 // TODO(brianwilkerson) implement |
| 126 return null; | 126 return null; |
| 127 } | 127 } |
| 128 | 128 |
| 129 @override | |
| 130 Response handleRequest(Request request) { | |
| 131 try { | |
| 132 String requestName = request.method; | |
| 133 if (requestName == EDIT_APPLY_REFACTORING) { | |
| 134 return applyRefactoring(request); | |
| 135 } else if (requestName == EDIT_CREATE_REFACTORING) { | |
| 136 return createRefactoring(request); | |
| 137 } else if (requestName == EDIT_DELETE_REFACTORING) { | |
| 138 return deleteRefactoring(request); | |
| 139 } else if (requestName == EDIT_GET_ASSISTS) { | |
| 140 return getAssists(request); | |
| 141 } else if (requestName == EDIT_GET_FIXES) { | |
| 142 return getFixes(request); | |
| 143 } else if (requestName == EDIT_GET_REFACTORINGS) { | |
| 144 return getRefactorings(request); | |
| 145 } else if (requestName == EDIT_SET_REFACTORING_OPTIONS) { | |
| 146 return setRefactoringOptions(request); | |
| 147 } | |
| 148 } on RequestFailure catch (exception) { | |
| 149 return exception.response; | |
| 150 } | |
| 151 return null; | |
|
Paul Berry
2014/07/22 20:22:06
Shouldn't we generate an error in the case of an u
scheglov
2014/07/22 20:31:31
No, we shouldn't.
It is OK for the Domain to retur
Paul Berry
2014/07/22 20:41:43
Ok.
| |
| 152 } | |
| 153 | |
| 129 Response setRefactoringOptions(Request request) { | 154 Response setRefactoringOptions(Request request) { |
| 130 // id | 155 // id |
| 131 RequestDatum idDatum = request.getRequiredParameter(ID); | 156 RequestDatum idDatum = request.getRequiredParameter(ID); |
| 132 String id = idDatum.asString(); | 157 String id = idDatum.asString(); |
| 133 // TODO(brianwilkerson) implement | 158 // TODO(brianwilkerson) implement |
| 134 return null; | 159 return null; |
| 135 } | 160 } |
| 136 } | 161 } |
| OLD | NEW |