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

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

Issue 2899843002: Convert quick assist 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';
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
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
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
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
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 {}
OLDNEW
« no previous file with comments | « pkg/analysis_server/lib/plugin/edit/fix/fix_core.dart ('k') | pkg/analysis_server/lib/src/services/correction/assist.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698