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

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

Issue 2894403003: Convert quick fix support to use AnalysisDriver (Closed)
Patch Set: Created 3 years, 7 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
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 import 'dart:async'; 5 import 'dart:async';
6 6
7 import 'package:analysis_server/plugin/edit/assist/assist_core.dart'; 7 import 'package:analysis_server/plugin/edit/assist/assist_core.dart';
8 import 'package:analysis_server/plugin/edit/assist/assist_dart.dart'; 8 import 'package:analysis_server/plugin/edit/assist/assist_dart.dart';
9 import 'package:analysis_server/plugin/edit/fix/fix_core.dart'; 9 import 'package:analysis_server/plugin/edit/fix/fix_core.dart';
10 import 'package:analysis_server/plugin/edit/fix/fix_dart.dart'; 10 import 'package:analysis_server/plugin/edit/fix/fix_dart.dart';
11 import 'package:analysis_server/src/analysis_server.dart'; 11 import 'package:analysis_server/src/analysis_server.dart';
12 import 'package:analysis_server/src/collections.dart'; 12 import 'package:analysis_server/src/collections.dart';
13 import 'package:analysis_server/src/constants.dart'; 13 import 'package:analysis_server/src/constants.dart';
14 import 'package:analysis_server/src/domain_abstract.dart'; 14 import 'package:analysis_server/src/domain_abstract.dart';
15 import 'package:analysis_server/src/plugin/plugin_manager.dart'; 15 import 'package:analysis_server/src/plugin/plugin_manager.dart';
16 import 'package:analysis_server/src/plugin/result_converter.dart'; 16 import 'package:analysis_server/src/plugin/result_converter.dart';
17 import 'package:analysis_server/src/protocol_server.dart' hide Element; 17 import 'package:analysis_server/src/protocol_server.dart' hide Element;
18 import 'package:analysis_server/src/services/completion/statement/statement_comp letion.dart'; 18 import 'package:analysis_server/src/services/completion/statement/statement_comp letion.dart';
19 import 'package:analysis_server/src/services/correction/assist.dart'; 19 import 'package:analysis_server/src/services/correction/assist.dart';
20 import 'package:analysis_server/src/services/correction/assist_internal.dart'; 20 import 'package:analysis_server/src/services/correction/assist_internal.dart';
21 import 'package:analysis_server/src/services/correction/fix.dart';
22 import 'package:analysis_server/src/services/correction/fix_internal.dart'; 21 import 'package:analysis_server/src/services/correction/fix_internal.dart';
23 import 'package:analysis_server/src/services/correction/organize_directives.dart '; 22 import 'package:analysis_server/src/services/correction/organize_directives.dart ';
24 import 'package:analysis_server/src/services/correction/sort_members.dart'; 23 import 'package:analysis_server/src/services/correction/sort_members.dart';
25 import 'package:analysis_server/src/services/correction/status.dart'; 24 import 'package:analysis_server/src/services/correction/status.dart';
26 import 'package:analysis_server/src/services/refactoring/refactoring.dart'; 25 import 'package:analysis_server/src/services/refactoring/refactoring.dart';
27 import 'package:analysis_server/src/services/search/search_engine.dart'; 26 import 'package:analysis_server/src/services/search/search_engine.dart';
28 import 'package:analyzer/dart/ast/ast.dart'; 27 import 'package:analyzer/dart/ast/ast.dart';
29 import 'package:analyzer/dart/ast/standard_resolution_map.dart'; 28 import 'package:analyzer/dart/ast/standard_resolution_map.dart';
30 import 'package:analyzer/dart/element/element.dart'; 29 import 'package:analyzer/dart/element/element.dart';
31 import 'package:analyzer/error/error.dart' as engine; 30 import 'package:analyzer/error/error.dart' as engine;
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 server 219 server
221 .sendResponse(new EditGetAssistsResult(changes).toResponse(request.id)); 220 .sendResponse(new EditGetAssistsResult(changes).toResponse(request.id));
222 } 221 }
223 222
224 Future getFixes(Request request) async { 223 Future getFixes(Request request) async {
225 var params = new EditGetFixesParams.fromRequest(request); 224 var params = new EditGetFixesParams.fromRequest(request);
226 String file = params.file; 225 String file = params.file;
227 int offset = params.offset; 226 int offset = params.offset;
228 227
229 List<AnalysisErrorFixes> errorFixesList = <AnalysisErrorFixes>[]; 228 List<AnalysisErrorFixes> errorFixesList = <AnalysisErrorFixes>[];
230 if (server.options.enableNewAnalysisDriver) { 229 //
231 // 230 // Allow plugins to start computing fixes.
232 // Allow plugins to start computing fixes. 231 //
233 // 232 Map<PluginInfo, Future<plugin.Response>> pluginFutures;
234 Map<PluginInfo, Future<plugin.Response>> pluginFutures; 233 plugin.EditGetFixesParams requestParams =
235 plugin.EditGetFixesParams requestParams = 234 new plugin.EditGetFixesParams(file, offset);
236 new plugin.EditGetFixesParams(file, offset); 235 AnalysisDriver driver = server.getAnalysisDriver(file);
237 AnalysisDriver driver = server.getAnalysisDriver(file); 236 if (driver == null) {
238 if (driver == null) { 237 pluginFutures = <PluginInfo, Future<plugin.Response>>{};
239 pluginFutures = <PluginInfo, Future<plugin.Response>>{};
240 } else {
241 pluginFutures = server.pluginManager
242 .broadcastRequest(requestParams, contextRoot: driver.contextRoot);
243 }
244 //
245 // Compute fixes associated with server-generated errors.
246 //
247 AnalysisResult result = await server.getAnalysisResult(file);
248 if (result != null) {
249 CompilationUnit unit = result.unit;
250 LineInfo lineInfo = result.lineInfo;
251 int requestLine = lineInfo.getLocation(offset).lineNumber;
252 for (engine.AnalysisError error in result.errors) {
253 int errorLine = lineInfo.getLocation(error.offset).lineNumber;
254 if (errorLine == requestLine) {
255 var context = new _DartFixContextImpl(
256 server.resourceProvider,
257 result.driver.getTopLevelNameDeclarations,
258 resolutionMap.elementDeclaredByCompilationUnit(unit).context,
259 server.getAstProvider(file),
260 unit,
261 error);
262 List<Fix> fixes =
263 await new DefaultFixContributor().internalComputeFixes(context);
264 if (fixes.isNotEmpty) {
265 fixes.sort(Fix.SORT_BY_RELEVANCE);
266 AnalysisError serverError =
267 newAnalysisError_fromEngine(lineInfo, error);
268 AnalysisErrorFixes errorFixes =
269 new AnalysisErrorFixes(serverError);
270 errorFixesList.add(errorFixes);
271 fixes.forEach((fix) {
272 errorFixes.fixes.add(fix.change);
273 });
274 }
275 }
276 }
277 }
278 //
279 // Add the fixes produced by plugins to the server-generated fixes.
280 //
281 List<plugin.Response> responses = await waitForResponses(pluginFutures,
282 requestParameters: requestParams);
283 ResultConverter converter = new ResultConverter();
284 for (plugin.Response response in responses) {
285 plugin.EditGetFixesResult result =
286 new plugin.EditGetFixesResult.fromResponse(response);
287 errorFixesList
288 .addAll(result.fixes.map(converter.convertAnalysisErrorFixes));
289 }
290 } else { 238 } else {
291 CompilationUnit unit = await server.getResolvedCompilationUnit(file); 239 pluginFutures = server.pluginManager
292 engine.AnalysisErrorInfo errorInfo = server.getErrors(file); 240 .broadcastRequest(requestParams, contextRoot: driver.contextRoot);
293 LineInfo lineInfo = errorInfo?.lineInfo; 241 }
294 if (unit != null && errorInfo != null && lineInfo != null) { 242 //
295 int requestLine = lineInfo.getLocation(offset).lineNumber; 243 // Compute fixes associated with server-generated errors.
296 for (engine.AnalysisError error in errorInfo.errors) { 244 //
297 int errorLine = lineInfo.getLocation(error.offset).lineNumber; 245 AnalysisResult result = await server.getAnalysisResult(file);
298 if (errorLine == requestLine) { 246 if (result != null) {
299 List<Fix> fixes = await computeFixes( 247 CompilationUnit unit = result.unit;
300 server.serverPlugin, 248 LineInfo lineInfo = result.lineInfo;
301 server.resourceProvider, 249 int requestLine = lineInfo.getLocation(offset).lineNumber;
302 resolutionMap.elementDeclaredByCompilationUnit(unit).context, 250 for (engine.AnalysisError error in result.errors) {
303 error); 251 int errorLine = lineInfo.getLocation(error.offset).lineNumber;
304 if (fixes.isNotEmpty) { 252 if (errorLine == requestLine) {
305 AnalysisError serverError = 253 var context = new _DartFixContextImpl(server.resourceProvider,
306 newAnalysisError_fromEngine(lineInfo, error); 254 result.driver, server.getAstProvider(file), unit, error);
307 AnalysisErrorFixes errorFixes = 255 List<Fix> fixes =
308 new AnalysisErrorFixes(serverError); 256 await new DefaultFixContributor().internalComputeFixes(context);
309 errorFixesList.add(errorFixes); 257 if (fixes.isNotEmpty) {
310 fixes.forEach((fix) { 258 fixes.sort(Fix.SORT_BY_RELEVANCE);
311 errorFixes.fixes.add(fix.change); 259 AnalysisError serverError =
312 }); 260 newAnalysisError_fromEngine(lineInfo, error);
313 } 261 AnalysisErrorFixes errorFixes = new AnalysisErrorFixes(serverError);
262 errorFixesList.add(errorFixes);
263 fixes.forEach((fix) {
264 errorFixes.fixes.add(fix.change);
265 });
314 } 266 }
315 } 267 }
316 } 268 }
317 } 269 }
318 // 270 //
271 // Add the fixes produced by plugins to the server-generated fixes.
272 //
273 List<plugin.Response> responses =
274 await waitForResponses(pluginFutures, requestParameters: requestParams);
275 ResultConverter converter = new ResultConverter();
276 for (plugin.Response response in responses) {
277 plugin.EditGetFixesResult result =
278 new plugin.EditGetFixesResult.fromResponse(response);
279 errorFixesList
280 .addAll(result.fixes.map(converter.convertAnalysisErrorFixes));
281 }
282 //
319 // Send the response. 283 // Send the response.
320 // 284 //
321 server.sendResponse( 285 server.sendResponse(
322 new EditGetFixesResult(errorFixesList).toResponse(request.id)); 286 new EditGetFixesResult(errorFixesList).toResponse(request.id));
323 } 287 }
324 288
325 Future getStatementCompletion(Request request) async { 289 Future getStatementCompletion(Request request) async {
326 var params = new EditGetStatementCompletionParams.fromRequest(request); 290 var params = new EditGetStatementCompletionParams.fromRequest(request);
327 SourceChange change; 291 SourceChange change;
328 292
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
604 } 568 }
605 569
606 /** 570 /**
607 * And implementation of [DartFixContext]. 571 * And implementation of [DartFixContext].
608 */ 572 */
609 class _DartFixContextImpl implements DartFixContext { 573 class _DartFixContextImpl implements DartFixContext {
610 @override 574 @override
611 final ResourceProvider resourceProvider; 575 final ResourceProvider resourceProvider;
612 576
613 @override 577 @override
614 final GetTopLevelDeclarations getTopLevelDeclarations; 578 final AnalysisDriver analysisDriver;
615
616 @override
617 final engine.AnalysisContext analysisContext;
618 579
619 @override 580 @override
620 final AstProvider astProvider; 581 final AstProvider astProvider;
621 582
622 @override 583 @override
623 final CompilationUnit unit; 584 final CompilationUnit unit;
624 585
625 @override 586 @override
626 final engine.AnalysisError error; 587 final engine.AnalysisError error;
627 588
628 _DartFixContextImpl(this.resourceProvider, this.getTopLevelDeclarations, 589 _DartFixContextImpl(this.resourceProvider, this.analysisDriver,
629 this.analysisContext, this.astProvider, this.unit, this.error); 590 this.astProvider, this.unit, this.error);
591
592 @override
593 GetTopLevelDeclarations get getTopLevelDeclarations =>
594 analysisDriver.getTopLevelNameDeclarations;
630 } 595 }
631 596
632 /** 597 /**
633 * An object managing a single [Refactoring] instance. 598 * An object managing a single [Refactoring] instance.
634 * 599 *
635 * The instance is identified by its kind, file, offset and length. 600 * The instance is identified by its kind, file, offset and length.
636 * It is initialized when the a set of parameters is given for the first time. 601 * It is initialized when the a set of parameters is given for the first time.
637 * All subsequent requests are performed on this [Refactoring] instance. 602 * All subsequent requests are performed on this [Refactoring] instance.
638 * 603 *
639 * Once new set of parameters is received, the previous [Refactoring] instance 604 * Once new set of parameters is received, the previous [Refactoring] instance
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after
1076 } 1041 }
1077 return new RefactoringStatus(); 1042 return new RefactoringStatus();
1078 } 1043 }
1079 } 1044 }
1080 1045
1081 /** 1046 /**
1082 * [_RefactoringManager] throws instances of this class internally to stop 1047 * [_RefactoringManager] throws instances of this class internally to stop
1083 * processing in a manager that was reset. 1048 * processing in a manager that was reset.
1084 */ 1049 */
1085 class _ResetError {} 1050 class _ResetError {}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698