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

Side by Side Diff: pkg/analysis_server/lib/src/services/completion/dart_completion_manager.dart

Issue 1484853002: new DartCompletionPlugin (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years 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 library services.completion.dart; 5 library services.completion.dart;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 8
9 import 'package:analysis_server/plugin/protocol/protocol.dart'; 9 import 'package:analysis_server/plugin/protocol/protocol.dart';
10 import 'package:analysis_server/src/analysis_server.dart';
11 import 'package:analysis_server/src/provisional/completion/completion_core.dart' 10 import 'package:analysis_server/src/provisional/completion/completion_core.dart'
12 show AnalysisRequest, CompletionContributor, CompletionRequest; 11 show AnalysisRequest, CompletionContributor, CompletionRequest;
13 import 'package:analysis_server/src/provisional/completion/dart/completion_targe t.dart'; 12 import 'package:analysis_server/src/provisional/completion/dart/completion_targe t.dart';
14 import 'package:analysis_server/src/services/completion/arglist_contributor.dart '; 13 import 'package:analysis_server/src/services/completion/arglist_contributor.dart ';
15 import 'package:analysis_server/src/services/completion/combinator_contributor.d art'; 14 import 'package:analysis_server/src/services/completion/combinator_contributor.d art';
16 import 'package:analysis_server/src/services/completion/completion_core.dart'; 15 import 'package:analysis_server/src/services/completion/completion_core.dart';
17 import 'package:analysis_server/src/services/completion/completion_manager.dart' ; 16 import 'package:analysis_server/src/services/completion/completion_manager.dart' ;
18 import 'package:analysis_server/src/services/completion/dart/common_usage_sorter .dart'; 17 import 'package:analysis_server/src/services/completion/dart/common_usage_sorter .dart';
19 import 'package:analysis_server/src/services/completion/dart/completion_manager. dart' 18 import 'package:analysis_server/src/services/completion/dart/completion_manager. dart'
20 as newImpl; 19 as newImpl;
21 import 'package:analysis_server/src/services/completion/dart/contribution_sorter .dart'; 20 import 'package:analysis_server/src/services/completion/dart/contribution_sorter .dart';
22 import 'package:analysis_server/src/services/completion/dart_completion_cache.da rt'; 21 import 'package:analysis_server/src/services/completion/dart_completion_cache.da rt';
23 import 'package:analysis_server/src/services/completion/imported_reference_contr ibutor.dart'; 22 import 'package:analysis_server/src/services/completion/imported_reference_contr ibutor.dart';
24 import 'package:analysis_server/src/services/completion/local_reference_contribu tor.dart'; 23 import 'package:analysis_server/src/services/completion/local_reference_contribu tor.dart';
25 import 'package:analysis_server/src/services/completion/optype.dart'; 24 import 'package:analysis_server/src/services/completion/optype.dart';
26 import 'package:analysis_server/src/services/completion/prefixed_element_contrib utor.dart'; 25 import 'package:analysis_server/src/services/completion/prefixed_element_contrib utor.dart';
27 import 'package:analysis_server/src/services/completion/uri_contributor.dart'; 26 import 'package:analysis_server/src/services/completion/uri_contributor.dart';
28 import 'package:analysis_server/src/services/search/search_engine.dart'; 27 import 'package:analysis_server/src/services/search/search_engine.dart';
28 import 'package:analyzer/file_system/file_system.dart';
29 import 'package:analyzer/src/generated/ast.dart'; 29 import 'package:analyzer/src/generated/ast.dart';
30 import 'package:analyzer/src/generated/engine.dart' hide AnalysisContextImpl; 30 import 'package:analyzer/src/generated/engine.dart' hide AnalysisContextImpl;
31 import 'package:analyzer/src/generated/scanner.dart'; 31 import 'package:analyzer/src/generated/scanner.dart';
32 import 'package:analyzer/src/generated/source.dart'; 32 import 'package:analyzer/src/generated/source.dart';
33 33
34 export 'package:analysis_server/src/provisional/completion/dart/completion_dart. dart' 34 export 'package:analysis_server/src/provisional/completion/dart/completion_dart. dart'
35 show 35 show
36 DART_RELEVANCE_COMMON_USAGE, 36 DART_RELEVANCE_COMMON_USAGE,
37 DART_RELEVANCE_DEFAULT, 37 DART_RELEVANCE_DEFAULT,
38 DART_RELEVANCE_HIGH, 38 DART_RELEVANCE_HIGH,
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 195
196 /** 196 /**
197 * If there is remaining work to be done, then wait for the unit to be 197 * If there is remaining work to be done, then wait for the unit to be
198 * resolved and request that each remaining contributor finish their work. 198 * resolved and request that each remaining contributor finish their work.
199 * Return a [Future] that completes when the last notification has been sent. 199 * Return a [Future] that completes when the last notification has been sent.
200 */ 200 */
201 Future computeFull( 201 Future computeFull(
202 DartCompletionRequest request, 202 DartCompletionRequest request,
203 CompletionPerformance performance, 203 CompletionPerformance performance,
204 List<DartCompletionContributor> todo) async { 204 List<DartCompletionContributor> todo) async {
205
206 // Compute suggestions using the new API 205 // Compute suggestions using the new API
207 performance.logStartTime('computeSuggestions'); 206 performance.logStartTime('computeSuggestions');
208 for (CompletionContributor contributor in newContributors) { 207 for (CompletionContributor contributor in newContributors) {
209 String contributorTag = 'computeSuggestions - ${contributor.runtimeType}'; 208 String contributorTag = 'computeSuggestions - ${contributor.runtimeType}';
210 performance.logStartTime(contributorTag); 209 performance.logStartTime(contributorTag);
211 List<CompletionSuggestion> newSuggestions = 210 List<CompletionSuggestion> newSuggestions =
212 await contributor.computeSuggestions(request); 211 await contributor.computeSuggestions(request);
213 for (CompletionSuggestion suggestion in newSuggestions) { 212 for (CompletionSuggestion suggestion in newSuggestions) {
214 request.addSuggestion(suggestion); 213 request.addSuggestion(suggestion);
215 } 214 }
216 performance.logElapseTime(contributorTag); 215 performance.logElapseTime(contributorTag);
217 } 216 }
218 performance.logElapseTime('computeSuggestions'); 217 performance.logElapseTime('computeSuggestions');
219 performance.logStartTime('waitForAnalysis'); 218 performance.logStartTime('waitForAnalysis');
220 219
221 if (todo.isEmpty) { 220 if (todo.isEmpty) {
222 // TODO(danrubel) current sorter requires no additional analysis, 221 // TODO(danrubel) current sorter requires no additional analysis,
223 // but need to handle the returned future the same way that futures 222 // but need to handle the returned future the same way that futures
224 // returned from contributors are handled once this method is refactored 223 // returned from contributors are handled once this method is refactored
225 // to be async. 224 // to be async.
226 /* await */ contributionSorter.sort( 225 /* await */ contributionSorter.sort(request, request.suggestions);
227 request, request.suggestions);
228 // TODO (danrubel) if request is obsolete 226 // TODO (danrubel) if request is obsolete
229 // (processAnalysisRequest returns false) 227 // (processAnalysisRequest returns false)
230 // then send empty results 228 // then send empty results
231 sendResults(request, true); 229 sendResults(request, true);
232 } 230 }
233 231
234 // Compute the other suggestions 232 // Compute the other suggestions
235 return waitForAnalysis().then((CompilationUnit unit) { 233 return waitForAnalysis().then((CompilationUnit unit) {
236 if (controller.isClosed) { 234 if (controller.isClosed) {
237 return; 235 return;
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 /** 366 /**
369 * The list of suggestions to be sent to the client. 367 * The list of suggestions to be sent to the client.
370 */ 368 */
371 final List<CompletionSuggestion> _suggestions = <CompletionSuggestion>[]; 369 final List<CompletionSuggestion> _suggestions = <CompletionSuggestion>[];
372 370
373 /** 371 /**
374 * The set of completions used to prevent duplicates 372 * The set of completions used to prevent duplicates
375 */ 373 */
376 final Set<String> _completions = new Set<String>(); 374 final Set<String> _completions = new Set<String>();
377 375
378 DartCompletionRequest(AnalysisServer server, AnalysisContext context, 376 DartCompletionRequest(
379 Source source, int offset, this.cache) 377 AnalysisContext context,
380 : super(server, context, source, offset); 378 ResourceProvider resourceProvider,
379 SearchEngine searchEngine,
380 Source source,
381 int offset,
382 this.cache)
383 : super(context, resourceProvider, searchEngine, source, offset);
381 384
382 factory DartCompletionRequest.from( 385 factory DartCompletionRequest.from(
383 CompletionRequestImpl request, DartCompletionCache cache) => 386 CompletionRequestImpl request, DartCompletionCache cache) =>
384 new DartCompletionRequest(request.server, request.context, request.source, 387 new DartCompletionRequest(request.context, request.resourceProvider,
385 request.offset, cache); 388 request.searchEngine, request.source, request.offset, cache);
386 389
387 /** 390 /**
388 * Return the original text from the [replacementOffset] to the [offset] 391 * Return the original text from the [replacementOffset] to the [offset]
389 * that can be used to filter the suggestions on the server side. 392 * that can be used to filter the suggestions on the server side.
390 */ 393 */
391 String get filterText { 394 String get filterText {
392 return context 395 return context
393 .getContents(source) 396 .getContents(source)
394 .data 397 .data
395 .substring(replacementOffset, offset); 398 .substring(replacementOffset, offset);
396 } 399 }
397 400
398 /** 401 /**
399 * Information about the types of suggestions that should be included. 402 * Information about the types of suggestions that should be included.
400 * The [target] must be set first. 403 * The [target] must be set first.
401 */ 404 */
402 OpType get optype { 405 OpType get optype {
403 if (_optype == null) { 406 if (_optype == null) {
404 _optype = new OpType.forCompletion(target, offset); 407 _optype = new OpType.forCompletion(target, offset);
405 } 408 }
406 return _optype; 409 return _optype;
407 } 410 }
408 411
409 /** 412 /**
410 * The search engine for use when building suggestions.
411 */
412 SearchEngine get searchEngine => server.searchEngine;
413
414 /**
415 * The list of suggestions to be sent to the client. 413 * The list of suggestions to be sent to the client.
416 */ 414 */
417 Iterable<CompletionSuggestion> get suggestions => _suggestions; 415 Iterable<CompletionSuggestion> get suggestions => _suggestions;
418 416
419 /** 417 /**
420 * Add the given suggestion to the list that is returned to the client as long 418 * Add the given suggestion to the list that is returned to the client as long
421 * as a suggestion with an identical completion has not already been added. 419 * as a suggestion with an identical completion has not already been added.
422 */ 420 */
423 void addSuggestion(CompletionSuggestion suggestion) { 421 void addSuggestion(CompletionSuggestion suggestion) {
424 if (_completions.add(suggestion.completion)) { 422 if (_completions.add(suggestion.completion)) {
(...skipping 24 matching lines...) Expand all
449 parameterNames: suggestion.parameterNames, 447 parameterNames: suggestion.parameterNames,
450 parameterTypes: suggestion.parameterTypes, 448 parameterTypes: suggestion.parameterTypes,
451 requiredParameterCount: suggestion.requiredParameterCount, 449 requiredParameterCount: suggestion.requiredParameterCount,
452 hasNamedParameters: suggestion.hasNamedParameters, 450 hasNamedParameters: suggestion.hasNamedParameters,
453 returnType: suggestion.returnType, 451 returnType: suggestion.returnType,
454 element: suggestion.element); 452 element: suggestion.element);
455 } 453 }
456 } 454 }
457 } 455 }
458 } 456 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698