| 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 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 {} |
| OLD | NEW |