Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Side by Side Diff: pkg/analysis_server/lib/src/edit/edit_domain.dart

Issue 945113002: Add 'Convert Method to Getter' proposal only if it is an available refactoring. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698