| 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 'dart:async'; | 7 import 'dart:async'; |
| 8 | 8 |
| 9 import 'package:analysis_server/src/analysis_server.dart'; | 9 import 'package:analysis_server/src/analysis_server.dart'; |
| 10 import 'package:analysis_server/src/collections.dart'; | 10 import 'package:analysis_server/src/collections.dart'; |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 CompilationUnit unit = units[0]; | 119 CompilationUnit unit = units[0]; |
| 120 List<Assist> assists = computeAssists(unit, params.offset, params.length); | 120 List<Assist> assists = computeAssists(unit, params.offset, params.length); |
| 121 assists.forEach((Assist assist) { | 121 assists.forEach((Assist assist) { |
| 122 changes.add(assist.change); | 122 changes.add(assist.change); |
| 123 }); | 123 }); |
| 124 } | 124 } |
| 125 // respond | 125 // respond |
| 126 return new EditGetAssistsResult(changes).toResponse(request.id); | 126 return new EditGetAssistsResult(changes).toResponse(request.id); |
| 127 } | 127 } |
| 128 | 128 |
| 129 Response getAvailableRefactorings(Request request) { | |
| 130 if (searchEngine == null) { | |
| 131 return new Response.noIndexGenerated(request); | |
| 132 } | |
| 133 // prepare parameters | |
| 134 var params = new EditGetAvailableRefactoringsParams.fromRequest(request); | |
| 135 String file = params.file; | |
| 136 int offset = params.offset; | |
| 137 int length = params.length; | |
| 138 // add refactoring kinds | |
| 139 List<RefactoringKind> kinds = <RefactoringKind>[]; | |
| 140 // try EXTRACT_* | |
| 141 if (length != 0) { | |
| 142 kinds.add(RefactoringKind.EXTRACT_LOCAL_VARIABLE); | |
| 143 kinds.add(RefactoringKind.EXTRACT_METHOD); | |
| 144 } | |
| 145 // try RENAME | |
| 146 { | |
| 147 List<Element> elements = server.getElementsAtOffset(file, offset); | |
| 148 if (elements.isNotEmpty) { | |
| 149 Element element = elements[0]; | |
| 150 RenameRefactoring renameRefactoring = | |
| 151 new RenameRefactoring(searchEngine, element); | |
| 152 if (renameRefactoring != null) { | |
| 153 kinds.add(RefactoringKind.RENAME); | |
| 154 } | |
| 155 } | |
| 156 } | |
| 157 // respond | |
| 158 return new EditGetAvailableRefactoringsResult(kinds).toResponse(request.id); | |
| 159 } | |
| 160 | |
| 161 Response getFixes(Request request) { | 129 Response getFixes(Request request) { |
| 162 var params = new EditGetFixesParams.fromRequest(request); | 130 var params = new EditGetFixesParams.fromRequest(request); |
| 163 String file = params.file; | 131 String file = params.file; |
| 164 int offset = params.offset; | 132 int offset = params.offset; |
| 165 // add fixes | 133 // add fixes |
| 166 List<AnalysisErrorFixes> errorFixesList = <AnalysisErrorFixes>[]; | 134 List<AnalysisErrorFixes> errorFixesList = <AnalysisErrorFixes>[]; |
| 167 List<CompilationUnit> units = server.getResolvedCompilationUnits(file); | 135 List<CompilationUnit> units = server.getResolvedCompilationUnits(file); |
| 168 for (CompilationUnit unit in units) { | 136 for (CompilationUnit unit in units) { |
| 169 engine.AnalysisErrorInfo errorInfo = server.getErrors(file); | 137 engine.AnalysisErrorInfo errorInfo = server.getErrors(file); |
| 170 if (errorInfo != null) { | 138 if (errorInfo != null) { |
| (...skipping 23 matching lines...) Expand all Loading... |
| 194 | 162 |
| 195 @override | 163 @override |
| 196 Response handleRequest(Request request) { | 164 Response handleRequest(Request request) { |
| 197 try { | 165 try { |
| 198 String requestName = request.method; | 166 String requestName = request.method; |
| 199 if (requestName == EDIT_FORMAT) { | 167 if (requestName == EDIT_FORMAT) { |
| 200 return format(request); | 168 return format(request); |
| 201 } else if (requestName == EDIT_GET_ASSISTS) { | 169 } else if (requestName == EDIT_GET_ASSISTS) { |
| 202 return getAssists(request); | 170 return getAssists(request); |
| 203 } else if (requestName == EDIT_GET_AVAILABLE_REFACTORINGS) { | 171 } else if (requestName == EDIT_GET_AVAILABLE_REFACTORINGS) { |
| 204 return getAvailableRefactorings(request); | 172 return _getAvailableRefactorings(request); |
| 205 } else if (requestName == EDIT_GET_FIXES) { | 173 } else if (requestName == EDIT_GET_FIXES) { |
| 206 return getFixes(request); | 174 return getFixes(request); |
| 207 } else if (requestName == EDIT_GET_REFACTORING) { | 175 } else if (requestName == EDIT_GET_REFACTORING) { |
| 208 return _getRefactoring(request); | 176 return _getRefactoring(request); |
| 209 } else if (requestName == EDIT_SORT_MEMBERS) { | 177 } else if (requestName == EDIT_SORT_MEMBERS) { |
| 210 return sortMembers(request); | 178 return sortMembers(request); |
| 211 } | 179 } |
| 212 } on RequestFailure catch (exception) { | 180 } on RequestFailure catch (exception) { |
| 213 return exception.response; | 181 return exception.response; |
| 214 } | 182 } |
| (...skipping 30 matching lines...) Expand all Loading... |
| 245 } | 213 } |
| 246 // do sort | 214 // do sort |
| 247 int fileStamp = context.getModificationStamp(source); | 215 int fileStamp = context.getModificationStamp(source); |
| 248 String code = context.getContents(source).data; | 216 String code = context.getContents(source).data; |
| 249 MemberSorter sorter = new MemberSorter(code, unit); | 217 MemberSorter sorter = new MemberSorter(code, unit); |
| 250 List<SourceEdit> edits = sorter.sort(); | 218 List<SourceEdit> edits = sorter.sort(); |
| 251 SourceFileEdit fileEdit = new SourceFileEdit(file, fileStamp, edits: edits); | 219 SourceFileEdit fileEdit = new SourceFileEdit(file, fileStamp, edits: edits); |
| 252 return new EditSortMembersResult(fileEdit).toResponse(request.id); | 220 return new EditSortMembersResult(fileEdit).toResponse(request.id); |
| 253 } | 221 } |
| 254 | 222 |
| 223 Response _getAvailableRefactorings(Request request) { |
| 224 if (searchEngine == null) { |
| 225 return new Response.noIndexGenerated(request); |
| 226 } |
| 227 _getAvailableRefactoringsImpl(request); |
| 228 return Response.DELAYED_RESPONSE; |
| 229 } |
| 230 |
| 231 Future _getAvailableRefactoringsImpl(Request request) async { |
| 232 // prepare parameters |
| 233 var params = new EditGetAvailableRefactoringsParams.fromRequest(request); |
| 234 String file = params.file; |
| 235 int offset = params.offset; |
| 236 int length = params.length; |
| 237 // add refactoring kinds |
| 238 List<RefactoringKind> kinds = <RefactoringKind>[]; |
| 239 // try EXTRACT_* |
| 240 if (length != 0) { |
| 241 kinds.add(RefactoringKind.EXTRACT_LOCAL_VARIABLE); |
| 242 kinds.add(RefactoringKind.EXTRACT_METHOD); |
| 243 } |
| 244 // check elements |
| 245 { |
| 246 List<Element> elements = server.getElementsAtOffset(file, offset); |
| 247 if (elements.isNotEmpty) { |
| 248 Element element = elements[0]; |
| 249 // try CONVERT_METHOD_TO_GETTER |
| 250 if (element is ExecutableElement) { |
| 251 Refactoring refactoring = |
| 252 new ConvertMethodToGetterRefactoring(searchEngine, element); |
| 253 RefactoringStatus status = await refactoring.checkInitialConditions(); |
| 254 if (!status.hasFatalError) { |
| 255 kinds.add(RefactoringKind.CONVERT_METHOD_TO_GETTER); |
| 256 } |
| 257 } |
| 258 // try RENAME |
| 259 { |
| 260 RenameRefactoring renameRefactoring = |
| 261 new RenameRefactoring(searchEngine, element); |
| 262 if (renameRefactoring != null) { |
| 263 kinds.add(RefactoringKind.RENAME); |
| 264 } |
| 265 } |
| 266 } |
| 267 } |
| 268 // respond |
| 269 var result = new EditGetAvailableRefactoringsResult(kinds); |
| 270 server.sendResponse(result.toResponse(request.id)); |
| 271 } |
| 272 |
| 255 Response _getRefactoring(Request request) { | 273 Response _getRefactoring(Request request) { |
| 256 if (searchEngine == null) { | 274 if (searchEngine == null) { |
| 257 return new Response.noIndexGenerated(request); | 275 return new Response.noIndexGenerated(request); |
| 258 } | 276 } |
| 259 if (refactoringManager.hasPendingRequest) { | 277 if (refactoringManager.hasPendingRequest) { |
| 260 refactoringManager.cancel(); | 278 refactoringManager.cancel(); |
| 261 _newRefactoringManager(); | 279 _newRefactoringManager(); |
| 262 } | 280 } |
| 263 refactoringManager.getRefactoring(request); | 281 refactoringManager.getRefactoring(request); |
| 264 return Response.DELAYED_RESPONSE; | 282 return Response.DELAYED_RESPONSE; |
| (...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 619 } | 637 } |
| 620 if (refactoring is RenameRefactoring) { | 638 if (refactoring is RenameRefactoring) { |
| 621 RenameRefactoring renameRefactoring = refactoring; | 639 RenameRefactoring renameRefactoring = refactoring; |
| 622 RenameOptions renameOptions = params.options; | 640 RenameOptions renameOptions = params.options; |
| 623 renameRefactoring.newName = renameOptions.newName; | 641 renameRefactoring.newName = renameOptions.newName; |
| 624 return renameRefactoring.checkNewName(); | 642 return renameRefactoring.checkNewName(); |
| 625 } | 643 } |
| 626 return new RefactoringStatus(); | 644 return new RefactoringStatus(); |
| 627 } | 645 } |
| 628 } | 646 } |
| OLD | NEW |