| 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'; | |
| 20 import 'package:analysis_server/src/services/correction/assist_internal.dart'; | 19 import 'package:analysis_server/src/services/correction/assist_internal.dart'; |
| 21 import 'package:analysis_server/src/services/correction/fix_internal.dart'; | 20 import 'package:analysis_server/src/services/correction/fix_internal.dart'; |
| 22 import 'package:analysis_server/src/services/correction/organize_directives.dart
'; | 21 import 'package:analysis_server/src/services/correction/organize_directives.dart
'; |
| 23 import 'package:analysis_server/src/services/correction/sort_members.dart'; | 22 import 'package:analysis_server/src/services/correction/sort_members.dart'; |
| 24 import 'package:analysis_server/src/services/correction/status.dart'; | 23 import 'package:analysis_server/src/services/correction/status.dart'; |
| 25 import 'package:analysis_server/src/services/refactoring/refactoring.dart'; | 24 import 'package:analysis_server/src/services/refactoring/refactoring.dart'; |
| 26 import 'package:analysis_server/src/services/search/search_engine.dart'; | 25 import 'package:analysis_server/src/services/search/search_engine.dart'; |
| 27 import 'package:analyzer/dart/ast/ast.dart'; | 26 import 'package:analyzer/dart/ast/ast.dart'; |
| 28 import 'package:analyzer/dart/ast/standard_resolution_map.dart'; | 27 import 'package:analyzer/dart/ast/standard_resolution_map.dart'; |
| 29 import 'package:analyzer/dart/element/element.dart'; | 28 import 'package:analyzer/dart/element/element.dart'; |
| 30 import 'package:analyzer/error/error.dart' as engine; | 29 import 'package:analyzer/error/error.dart' as engine; |
| 31 import 'package:analyzer/file_system/file_system.dart'; | 30 import 'package:analyzer/file_system/file_system.dart'; |
| 31 import 'package:analyzer/src/dart/analysis/ast_provider_driver.dart'; |
| 32 import 'package:analyzer/src/dart/analysis/driver.dart'; | 32 import 'package:analyzer/src/dart/analysis/driver.dart'; |
| 33 import 'package:analyzer/src/dart/element/ast_provider.dart'; | 33 import 'package:analyzer/src/dart/element/ast_provider.dart'; |
| 34 import 'package:analyzer/src/dart/scanner/scanner.dart' as engine; | 34 import 'package:analyzer/src/dart/scanner/scanner.dart' as engine; |
| 35 import 'package:analyzer/src/error/codes.dart' as engine; | 35 import 'package:analyzer/src/error/codes.dart' as engine; |
| 36 import 'package:analyzer/src/generated/engine.dart' as engine; | 36 import 'package:analyzer/src/generated/engine.dart' as engine; |
| 37 import 'package:analyzer/src/generated/parser.dart' as engine; | 37 import 'package:analyzer/src/generated/parser.dart' as engine; |
| 38 import 'package:analyzer/src/generated/source.dart'; | 38 import 'package:analyzer/src/generated/source.dart'; |
| 39 import 'package:analyzer/task/dart.dart'; | 39 import 'package:analyzer/task/dart.dart'; |
| 40 import 'package:analyzer_plugin/protocol/protocol.dart' as plugin; | 40 import 'package:analyzer_plugin/protocol/protocol.dart' as plugin; |
| 41 import 'package:analyzer_plugin/protocol/protocol_constants.dart' as plugin; | 41 import 'package:analyzer_plugin/protocol/protocol_constants.dart' as plugin; |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 140 .toResponse(request.id); | 140 .toResponse(request.id); |
| 141 } | 141 } |
| 142 | 142 |
| 143 Future getAssists(Request request) async { | 143 Future getAssists(Request request) async { |
| 144 EditGetAssistsParams params = new EditGetAssistsParams.fromRequest(request); | 144 EditGetAssistsParams params = new EditGetAssistsParams.fromRequest(request); |
| 145 String file = params.file; | 145 String file = params.file; |
| 146 int offset = params.offset; | 146 int offset = params.offset; |
| 147 int length = params.length; | 147 int length = params.length; |
| 148 | 148 |
| 149 List<SourceChange> changes = <SourceChange>[]; | 149 List<SourceChange> changes = <SourceChange>[]; |
| 150 if (server.options.enableNewAnalysisDriver) { | 150 // |
| 151 // | 151 // Allow plugins to start computing assists. |
| 152 // Allow plugins to start computing assists. | 152 // |
| 153 // | 153 Map<PluginInfo, Future<plugin.Response>> pluginFutures; |
| 154 Map<PluginInfo, Future<plugin.Response>> pluginFutures; | 154 plugin.EditGetAssistsParams requestParams = |
| 155 plugin.EditGetAssistsParams requestParams = | 155 new plugin.EditGetAssistsParams(file, offset, length); |
| 156 new plugin.EditGetAssistsParams(file, offset, length); | 156 AnalysisDriver driver = server.getAnalysisDriver(file); |
| 157 AnalysisDriver driver = server.getAnalysisDriver(file); | 157 if (driver == null) { |
| 158 if (driver == null) { | 158 pluginFutures = <PluginInfo, Future<plugin.Response>>{}; |
| 159 pluginFutures = <PluginInfo, Future<plugin.Response>>{}; | |
| 160 } else { | |
| 161 pluginFutures = server.pluginManager | |
| 162 .broadcastRequest(requestParams, contextRoot: driver.contextRoot); | |
| 163 } | |
| 164 // | |
| 165 // Compute fixes associated with server-generated errors. | |
| 166 // | |
| 167 AnalysisResult result = await server.getAnalysisResult(file); | |
| 168 if (result != null) { | |
| 169 CompilationUnit unit = result.unit; | |
| 170 CompilationUnitElement compilationUnitElement = | |
| 171 resolutionMap.elementDeclaredByCompilationUnit(unit); | |
| 172 DartAssistContext dartAssistContext = new _DartAssistContextForValues( | |
| 173 compilationUnitElement.source, | |
| 174 offset, | |
| 175 length, | |
| 176 compilationUnitElement.context, | |
| 177 server.getAstProvider(file), | |
| 178 unit); | |
| 179 try { | |
| 180 AssistProcessor processor = new AssistProcessor(dartAssistContext); | |
| 181 List<Assist> assists = await processor.compute(); | |
| 182 for (Assist assist in assists) { | |
| 183 changes.add(assist.change); | |
| 184 } | |
| 185 } catch (_) {} | |
| 186 } | |
| 187 // | |
| 188 // Add the fixes produced by plugins to the server-generated fixes. | |
| 189 // | |
| 190 List<plugin.Response> responses = await waitForResponses(pluginFutures, | |
| 191 requestParameters: requestParams); | |
| 192 ResultConverter converter = new ResultConverter(); | |
| 193 List<plugin.PrioritizedSourceChange> pluginChanges = | |
| 194 <plugin.PrioritizedSourceChange>[]; | |
| 195 for (plugin.Response response in responses) { | |
| 196 plugin.EditGetAssistsResult result = | |
| 197 new plugin.EditGetAssistsResult.fromResponse(response); | |
| 198 pluginChanges.addAll(result.assists); | |
| 199 } | |
| 200 pluginChanges | |
| 201 .sort((first, second) => first.priority.compareTo(second.priority)); | |
| 202 changes | |
| 203 .addAll(pluginChanges.map(converter.convertPrioritizedSourceChange)); | |
| 204 } else { | 159 } else { |
| 205 ContextSourcePair pair = server.getContextSourcePair(file); | 160 pluginFutures = server.pluginManager |
| 206 engine.AnalysisContext context = pair.context; | 161 .broadcastRequest(requestParams, contextRoot: driver.contextRoot); |
| 207 Source source = pair.source; | 162 } |
| 208 if (context != null && source != null) { | 163 // |
| 209 List<Assist> assists = await computeAssists( | 164 // Compute fixes associated with server-generated errors. |
| 210 server.serverPlugin, context, source, offset, length); | 165 // |
| 166 AnalysisResult result = await server.getAnalysisResult(file); |
| 167 if (result != null) { |
| 168 CompilationUnit unit = result.unit; |
| 169 CompilationUnitElement compilationUnitElement = |
| 170 resolutionMap.elementDeclaredByCompilationUnit(unit); |
| 171 DartAssistContext dartAssistContext = new _DartAssistContextForValues( |
| 172 compilationUnitElement.source, |
| 173 offset, |
| 174 length, |
| 175 driver, |
| 176 new AstProviderForDriver(driver), |
| 177 unit); |
| 178 try { |
| 179 AssistProcessor processor = new AssistProcessor(dartAssistContext); |
| 180 List<Assist> assists = await processor.compute(); |
| 211 for (Assist assist in assists) { | 181 for (Assist assist in assists) { |
| 212 changes.add(assist.change); | 182 changes.add(assist.change); |
| 213 } | 183 } |
| 214 } | 184 } catch (_) {} |
| 215 } | 185 } |
| 216 // | 186 // |
| 187 // Add the fixes produced by plugins to the server-generated fixes. |
| 188 // |
| 189 List<plugin.Response> responses = |
| 190 await waitForResponses(pluginFutures, requestParameters: requestParams); |
| 191 ResultConverter converter = new ResultConverter(); |
| 192 List<plugin.PrioritizedSourceChange> pluginChanges = |
| 193 <plugin.PrioritizedSourceChange>[]; |
| 194 for (plugin.Response response in responses) { |
| 195 plugin.EditGetAssistsResult result = |
| 196 new plugin.EditGetAssistsResult.fromResponse(response); |
| 197 pluginChanges.addAll(result.assists); |
| 198 } |
| 199 pluginChanges |
| 200 .sort((first, second) => first.priority.compareTo(second.priority)); |
| 201 changes.addAll(pluginChanges.map(converter.convertPrioritizedSourceChange)); |
| 202 // |
| 217 // Send the response. | 203 // Send the response. |
| 218 // | 204 // |
| 219 server | 205 server |
| 220 .sendResponse(new EditGetAssistsResult(changes).toResponse(request.id)); | 206 .sendResponse(new EditGetAssistsResult(changes).toResponse(request.id)); |
| 221 } | 207 } |
| 222 | 208 |
| 223 Future getFixes(Request request) async { | 209 Future getFixes(Request request) async { |
| 224 var params = new EditGetFixesParams.fromRequest(request); | 210 var params = new EditGetFixesParams.fromRequest(request); |
| 225 String file = params.file; | 211 String file = params.file; |
| 226 int offset = params.offset; | 212 int offset = params.offset; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 244 // | 230 // |
| 245 AnalysisResult result = await server.getAnalysisResult(file); | 231 AnalysisResult result = await server.getAnalysisResult(file); |
| 246 if (result != null) { | 232 if (result != null) { |
| 247 CompilationUnit unit = result.unit; | 233 CompilationUnit unit = result.unit; |
| 248 LineInfo lineInfo = result.lineInfo; | 234 LineInfo lineInfo = result.lineInfo; |
| 249 int requestLine = lineInfo.getLocation(offset).lineNumber; | 235 int requestLine = lineInfo.getLocation(offset).lineNumber; |
| 250 for (engine.AnalysisError error in result.errors) { | 236 for (engine.AnalysisError error in result.errors) { |
| 251 int errorLine = lineInfo.getLocation(error.offset).lineNumber; | 237 int errorLine = lineInfo.getLocation(error.offset).lineNumber; |
| 252 if (errorLine == requestLine) { | 238 if (errorLine == requestLine) { |
| 253 var context = new _DartFixContextImpl(server.resourceProvider, | 239 var context = new _DartFixContextImpl(server.resourceProvider, |
| 254 result.driver, server.getAstProvider(file), unit, error); | 240 result.driver, new AstProviderForDriver(driver), unit, error); |
| 255 List<Fix> fixes = | 241 List<Fix> fixes = |
| 256 await new DefaultFixContributor().internalComputeFixes(context); | 242 await new DefaultFixContributor().internalComputeFixes(context); |
| 257 if (fixes.isNotEmpty) { | 243 if (fixes.isNotEmpty) { |
| 258 fixes.sort(Fix.SORT_BY_RELEVANCE); | 244 fixes.sort(Fix.SORT_BY_RELEVANCE); |
| 259 AnalysisError serverError = | 245 AnalysisError serverError = |
| 260 newAnalysisError_fromEngine(lineInfo, error); | 246 newAnalysisError_fromEngine(lineInfo, error); |
| 261 AnalysisErrorFixes errorFixes = new AnalysisErrorFixes(serverError); | 247 AnalysisErrorFixes errorFixes = new AnalysisErrorFixes(serverError); |
| 262 errorFixesList.add(errorFixes); | 248 errorFixesList.add(errorFixes); |
| 263 fixes.forEach((fix) { | 249 fixes.forEach((fix) { |
| 264 errorFixes.fixes.add(fix.change); | 250 errorFixes.fixes.add(fix.change); |
| (...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 548 @override | 534 @override |
| 549 final Source source; | 535 final Source source; |
| 550 | 536 |
| 551 @override | 537 @override |
| 552 final int selectionOffset; | 538 final int selectionOffset; |
| 553 | 539 |
| 554 @override | 540 @override |
| 555 final int selectionLength; | 541 final int selectionLength; |
| 556 | 542 |
| 557 @override | 543 @override |
| 558 final engine.AnalysisContext analysisContext; | 544 final AnalysisDriver analysisDriver; |
| 559 | 545 |
| 560 @override | 546 @override |
| 561 final AstProvider astProvider; | 547 final AstProvider astProvider; |
| 562 | 548 |
| 563 @override | 549 @override |
| 564 final CompilationUnit unit; | 550 final CompilationUnit unit; |
| 565 | 551 |
| 566 _DartAssistContextForValues(this.source, this.selectionOffset, | 552 _DartAssistContextForValues(this.source, this.selectionOffset, |
| 567 this.selectionLength, this.analysisContext, this.astProvider, this.unit); | 553 this.selectionLength, this.analysisDriver, this.astProvider, this.unit); |
| 568 } | 554 } |
| 569 | 555 |
| 570 /** | 556 /** |
| 571 * And implementation of [DartFixContext]. | 557 * And implementation of [DartFixContext]. |
| 572 */ | 558 */ |
| 573 class _DartFixContextImpl implements DartFixContext { | 559 class _DartFixContextImpl implements DartFixContext { |
| 574 @override | 560 @override |
| 575 final ResourceProvider resourceProvider; | 561 final ResourceProvider resourceProvider; |
| 576 | 562 |
| 577 @override | 563 @override |
| (...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1041 } | 1027 } |
| 1042 return new RefactoringStatus(); | 1028 return new RefactoringStatus(); |
| 1043 } | 1029 } |
| 1044 } | 1030 } |
| 1045 | 1031 |
| 1046 /** | 1032 /** |
| 1047 * [_RefactoringManager] throws instances of this class internally to stop | 1033 * [_RefactoringManager] throws instances of this class internally to stop |
| 1048 * processing in a manager that was reset. | 1034 * processing in a manager that was reset. |
| 1049 */ | 1035 */ |
| 1050 class _ResetError {} | 1036 class _ResetError {} |
| OLD | NEW |