| 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 edit.domain; | 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/computer/error.dart'; |
| 8 import 'package:analysis_server/src/constants.dart'; | 9 import 'package:analysis_server/src/constants.dart'; |
| 10 import 'package:analysis_server/src/edit/fix.dart'; |
| 9 import 'package:analysis_server/src/protocol.dart'; | 11 import 'package:analysis_server/src/protocol.dart'; |
| 10 import 'package:analysis_services/constants.dart'; | 12 import 'package:analysis_services/constants.dart'; |
| 11 import 'package:analysis_services/correction/fix.dart'; | 13 import 'package:analysis_services/correction/fix.dart'; |
| 14 import 'package:analysis_services/refactoring/refactoring.dart'; |
| 12 import 'package:analysis_services/search/search_engine.dart'; | 15 import 'package:analysis_services/search/search_engine.dart'; |
| 16 import 'package:analyzer/src/generated/ast.dart'; |
| 17 import 'package:analyzer/src/generated/element.dart'; |
| 18 import 'package:analyzer/src/generated/engine.dart' as engine; |
| 13 import 'package:analyzer/src/generated/error.dart' as engine; | 19 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 | 20 |
| 19 | 21 |
| 20 /** | 22 /** |
| 21 * Instances of the class [EditDomainHandler] implement a [RequestHandler] | 23 * Instances of the class [EditDomainHandler] implement a [RequestHandler] |
| 22 * that handles requests in the edit domain. | 24 * that handles requests in the edit domain. |
| 23 */ | 25 */ |
| 24 class EditDomainHandler implements RequestHandler { | 26 class EditDomainHandler implements RequestHandler { |
| 25 /** | 27 /** |
| 26 * The analysis server that is using this handler to process requests. | 28 * The analysis server that is using this handler to process requests. |
| 27 */ | 29 */ |
| 28 final AnalysisServer server; | 30 final AnalysisServer server; |
| 29 | 31 |
| 30 /** | 32 /** |
| 31 * The [SearchEngine] for this server. | 33 * The [SearchEngine] for this server. |
| 32 */ | 34 */ |
| 33 SearchEngine searchEngine; | 35 SearchEngine searchEngine; |
| 34 | 36 |
| 35 /** | 37 /** |
| 36 * Initialize a newly created handler to handle requests for the given [server
]. | 38 * Initialize a newly created handler to handle requests for the given [server
]. |
| 37 */ | 39 */ |
| 38 EditDomainHandler(this.server) { | 40 EditDomainHandler(this.server) { |
| 39 searchEngine = server.searchEngine; | 41 searchEngine = server.searchEngine; |
| 40 } | 42 } |
| 41 | 43 |
| 42 Response applyRefactoring(Request request) { | 44 Response getAssists(Request request) { |
| 43 // id | |
| 44 RequestDatum idDatum = request.getRequiredParameter(ID); | |
| 45 String id = idDatum.asString(); | |
| 46 // TODO(brianwilkerson) implement | |
| 47 return null; | |
| 48 } | |
| 49 | |
| 50 Response createRefactoring(Request request) { | |
| 51 // kind | |
| 52 RequestDatum kindDatum = request.getRequiredParameter(KIND); | |
| 53 String kind = kindDatum.asString(); | |
| 54 // file | 45 // file |
| 55 RequestDatum fileDatum = request.getRequiredParameter(FILE); | 46 RequestDatum fileDatum = request.getRequiredParameter(FILE); |
| 56 String file = fileDatum.asString(); | 47 String file = fileDatum.asString(); |
| 57 // offset | 48 // offset |
| 58 RequestDatum offsetDatum = request.getRequiredParameter(OFFSET); | 49 RequestDatum offsetDatum = request.getRequiredParameter(OFFSET); |
| 59 int offset = offsetDatum.asInt(); | 50 int offset = offsetDatum.asInt(); |
| 60 // length | 51 // length |
| 61 RequestDatum lengthDatum = request.getRequiredParameter(LENGTH); | 52 RequestDatum lengthDatum = request.getRequiredParameter(LENGTH); |
| 62 int length = lengthDatum.asInt(); | 53 int length = lengthDatum.asInt(); |
| 63 // TODO(brianwilkerson) implement | 54 // TODO(brianwilkerson) implement |
| 64 return null; | 55 return null; |
| 65 } | 56 } |
| 66 | 57 |
| 67 Response deleteRefactoring(Request request) { | 58 Response getAvailableRefactorings(Request request) { |
| 68 // id | 59 String file = request.getRequiredParameter(FILE).asString(); |
| 69 RequestDatum idDatum = request.getRequiredParameter(ID); | 60 int offset = request.getRequiredParameter(OFFSET).asInt(); |
| 70 String id = idDatum.asString(); | 61 int length = request.getRequiredParameter(LENGTH).asInt(); |
| 71 // TODO(brianwilkerson) implement | 62 List<String> kinds = <String>[]; |
| 72 return null; | 63 List<Element> elements = server.getElementsAtOffset(file, offset); |
| 73 } | 64 if (elements.isNotEmpty) { |
| 74 | 65 Element element = elements[0]; |
| 75 Response getAssists(Request request) { | 66 RenameRefactoring renameRefactoring = |
| 76 // file | 67 new RenameRefactoring(searchEngine, element); |
| 77 RequestDatum fileDatum = request.getRequiredParameter(FILE); | 68 if (renameRefactoring != null) { |
| 78 String file = fileDatum.asString(); | 69 kinds.add(RefactoringKind.RENAME); |
| 79 // offset | 70 } |
| 80 RequestDatum offsetDatum = request.getRequiredParameter(OFFSET); | 71 } |
| 81 int offset = offsetDatum.asInt(); | 72 // respond |
| 82 // length | 73 return new Response(request.id)..setResult(KINDS, kinds); |
| 83 RequestDatum lengthDatum = request.getRequiredParameter(LENGTH); | |
| 84 int length = lengthDatum.asInt(); | |
| 85 // TODO(brianwilkerson) implement | |
| 86 return null; | |
| 87 } | 74 } |
| 88 | 75 |
| 89 Response getFixes(Request request) { | 76 Response getFixes(Request request) { |
| 90 String file = request.getRequiredParameter(FILE).asString(); | 77 String file = request.getRequiredParameter(FILE).asString(); |
| 91 int offset = request.getRequiredParameter(OFFSET).asInt(); | 78 int offset = request.getRequiredParameter(OFFSET).asInt(); |
| 92 List<ErrorFixes> errorFixesList = <ErrorFixes>[]; | 79 List<ErrorFixes> errorFixesList = <ErrorFixes>[]; |
| 93 List<CompilationUnit> units = server.getResolvedCompilationUnits(file); | 80 List<CompilationUnit> units = server.getResolvedCompilationUnits(file); |
| 94 for (CompilationUnit unit in units) { | 81 for (CompilationUnit unit in units) { |
| 95 engine.AnalysisErrorInfo errorInfo = server.getErrors(file); | 82 engine.AnalysisErrorInfo errorInfo = server.getErrors(file); |
| 96 if (errorInfo != null) { | 83 if (errorInfo != null) { |
| 97 for (engine.AnalysisError error in errorInfo.errors) { | 84 for (engine.AnalysisError error in errorInfo.errors) { |
| 98 List<Fix> fixes = computeFixes(searchEngine, unit, error); | 85 List<Fix> fixes = computeFixes(searchEngine, unit, error); |
| 99 if (fixes.isNotEmpty) { | 86 if (fixes.isNotEmpty) { |
| 100 AnalysisError serverError = | 87 AnalysisError serverError = |
| 101 new AnalysisError.fromEngine(errorInfo.lineInfo, error); | 88 new AnalysisError.fromEngine(errorInfo.lineInfo, error); |
| 102 ErrorFixes errorFixes = new ErrorFixes(serverError); | 89 ErrorFixes errorFixes = new ErrorFixes(serverError); |
| 103 errorFixesList.add(errorFixes); | 90 errorFixesList.add(errorFixes); |
| 104 fixes.forEach((fix) { | 91 fixes.forEach((fix) { |
| 105 return errorFixes.addFix(fix); | 92 return errorFixes.addFix(fix); |
| 106 }); | 93 }); |
| 107 } | 94 } |
| 108 } | 95 } |
| 109 } | 96 } |
| 110 } | 97 } |
| 111 // respond | 98 // respond |
| 112 return new Response(request.id)..setResult(FIXES, errorFixesList); | 99 return new Response(request.id)..setResult(FIXES, errorFixesList); |
| 113 } | 100 } |
| 114 | 101 |
| 115 Response getRefactorings(Request request) { | |
| 116 // file | |
| 117 RequestDatum fileDatum = request.getRequiredParameter(FILE); | |
| 118 String file = fileDatum.asString(); | |
| 119 // offset | |
| 120 RequestDatum offsetDatum = request.getRequiredParameter(OFFSET); | |
| 121 int offset = offsetDatum.asInt(); | |
| 122 // length | |
| 123 RequestDatum lengthDatum = request.getRequiredParameter(LENGTH); | |
| 124 int length = lengthDatum.asInt(); | |
| 125 // TODO(brianwilkerson) implement | |
| 126 return null; | |
| 127 } | |
| 128 | |
| 129 @override | 102 @override |
| 130 Response handleRequest(Request request) { | 103 Response handleRequest(Request request) { |
| 131 try { | 104 try { |
| 132 String requestName = request.method; | 105 String requestName = request.method; |
| 133 if (requestName == EDIT_APPLY_REFACTORING) { | 106 if (requestName == EDIT_GET_AVAILABLE_REFACTORINGS) { |
| 134 return applyRefactoring(request); | 107 return getAvailableRefactorings(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) { | 108 } else if (requestName == EDIT_GET_ASSISTS) { |
| 140 return getAssists(request); | 109 return getAssists(request); |
| 141 } else if (requestName == EDIT_GET_FIXES) { | 110 } else if (requestName == EDIT_GET_FIXES) { |
| 142 return getFixes(request); | 111 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 } | 112 } |
| 148 } on RequestFailure catch (exception) { | 113 } on RequestFailure catch (exception) { |
| 149 return exception.response; | 114 return exception.response; |
| 150 } | 115 } |
| 151 return null; | 116 return null; |
| 152 } | 117 } |
| 118 } |
| 153 | 119 |
| 154 Response setRefactoringOptions(Request request) { | 120 |
| 155 // id | 121 class RefactoringKind { |
| 156 RequestDatum idDatum = request.getRequiredParameter(ID); | 122 static const String CONVERT_GETTER_TO_METHOD = 'CONVERT_GETTER_TO_METHOD'; |
| 157 String id = idDatum.asString(); | 123 static const String CONVERT_METHOD_TO_GETTER = 'CONVERT_METHOD_TO_GETTER'; |
| 158 // TODO(brianwilkerson) implement | 124 static const String EXTRACT_LOCAL_VARIABLE = 'EXTRACT_LOCAL_VARIABLE'; |
| 159 return null; | 125 static const String EXTRACT_METHOD = 'EXTRACT_METHOD'; |
| 160 } | 126 static const String INLINE_LOCAL_VARIABLE = 'INLINE_LOCAL_VARIABLE'; |
| 127 static const String INLINE_METHOD = 'INLINE_METHOD'; |
| 128 static const String RENAME = 'RENAME'; |
| 161 } | 129 } |
| OLD | NEW |