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

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

Issue 1471173003: hook new DartCompletionContributor API into existing framework (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: merge Created 5 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: pkg/analysis_server/lib/src/services/completion/dart_completion_manager.dart
diff --git a/pkg/analysis_server/lib/src/services/completion/dart_completion_manager.dart b/pkg/analysis_server/lib/src/services/completion/dart_completion_manager.dart
index a42fb5b66228e793b225b38c253977a312192df2..861c803785816db367bc5b0fd1c3f09eba8f9967 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart_completion_manager.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart_completion_manager.dart
@@ -9,16 +9,17 @@ import 'dart:async';
import 'package:analysis_server/plugin/protocol/protocol.dart';
import 'package:analysis_server/src/analysis_server.dart';
import 'package:analysis_server/src/provisional/completion/completion_core.dart'
- show AnalysisRequest, CompletionRequest;
+ show AnalysisRequest, CompletionContributor, CompletionRequest;
import 'package:analysis_server/src/provisional/completion/dart/completion_target.dart';
import 'package:analysis_server/src/services/completion/arglist_contributor.dart';
import 'package:analysis_server/src/services/completion/combinator_contributor.dart';
import 'package:analysis_server/src/services/completion/completion_manager.dart';
import 'package:analysis_server/src/services/completion/dart/common_usage_sorter.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart'
+ as newImpl;
import 'package:analysis_server/src/services/completion/dart/contribution_sorter.dart';
import 'package:analysis_server/src/services/completion/dart_completion_cache.dart';
import 'package:analysis_server/src/services/completion/imported_reference_contributor.dart';
-import 'package:analysis_server/src/services/completion/keyword_contributor.dart';
import 'package:analysis_server/src/services/completion/local_reference_contributor.dart';
import 'package:analysis_server/src/services/completion/optype.dart';
import 'package:analysis_server/src/services/completion/prefixed_element_contributor.dart';
@@ -29,22 +30,24 @@ import 'package:analyzer/src/generated/engine.dart' hide AnalysisContextImpl;
import 'package:analyzer/src/generated/scanner.dart';
import 'package:analyzer/src/generated/source.dart';
-const int DART_RELEVANCE_COMMON_USAGE = 1200;
-const int DART_RELEVANCE_DEFAULT = 1000;
-const int DART_RELEVANCE_HIGH = 2000;
-const int DART_RELEVANCE_INHERITED_ACCESSOR = 1057;
-const int DART_RELEVANCE_INHERITED_FIELD = 1058;
-const int DART_RELEVANCE_INHERITED_METHOD = 1057;
-const int DART_RELEVANCE_KEYWORD = 1055;
-const int DART_RELEVANCE_LOCAL_ACCESSOR = 1057;
-const int DART_RELEVANCE_LOCAL_FIELD = 1058;
-const int DART_RELEVANCE_LOCAL_FUNCTION = 1056;
-const int DART_RELEVANCE_LOCAL_METHOD = 1057;
-const int DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE = 1056;
-const int DART_RELEVANCE_LOCAL_VARIABLE = 1059;
-const int DART_RELEVANCE_LOW = 500;
-const int DART_RELEVANCE_NAMED_PARAMETER = 1060;
-const int DART_RELEVANCE_PARAMETER = 1059;
+export 'package:analysis_server/src/provisional/completion/completion_dart.dart'
+ show
+ DART_RELEVANCE_COMMON_USAGE,
+ DART_RELEVANCE_DEFAULT,
+ DART_RELEVANCE_HIGH,
+ DART_RELEVANCE_INHERITED_ACCESSOR,
+ DART_RELEVANCE_INHERITED_FIELD,
+ DART_RELEVANCE_INHERITED_METHOD,
+ DART_RELEVANCE_KEYWORD,
+ DART_RELEVANCE_LOCAL_ACCESSOR,
+ DART_RELEVANCE_LOCAL_FIELD,
+ DART_RELEVANCE_LOCAL_FUNCTION,
+ DART_RELEVANCE_LOCAL_METHOD,
+ DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE,
+ DART_RELEVANCE_LOCAL_VARIABLE,
+ DART_RELEVANCE_LOW,
+ DART_RELEVANCE_NAMED_PARAMETER,
+ DART_RELEVANCE_PARAMETER;
/**
* The base class for contributing code completion suggestions.
@@ -83,11 +86,12 @@ class DartCompletionManager extends CompletionManager {
final SearchEngine searchEngine;
final DartCompletionCache cache;
List<DartCompletionContributor> contributors;
+ List<CompletionContributor> newContributors;
DartContributionSorter contributionSorter;
DartCompletionManager(
AnalysisContext context, this.searchEngine, Source source, this.cache,
- [this.contributors, this.contributionSorter])
+ [this.contributors, this.newContributors, this.contributionSorter])
: super(context, source) {
if (contributors == null) {
contributors = [
@@ -96,7 +100,7 @@ class DartCompletionManager extends CompletionManager {
// and can hide other suggestions with the same name
new LocalReferenceContributor(),
new ImportedReferenceContributor(),
- new KeywordContributor(),
+ //new KeywordContributor(),
new ArgListContributor(),
new CombinatorContributor(),
new PrefixedElementContributor(),
@@ -106,6 +110,12 @@ class DartCompletionManager extends CompletionManager {
// new NewCompletionWrapper(new InheritedContributor())
];
}
+ if (newContributors == null) {
+ newContributors = <CompletionContributor>[
+ // TODO(danrubel) initialize using plugin API
+ new newImpl.DartCompletionManager(),
+ ];
+ }
if (contributionSorter == null) {
contributionSorter = defaultContributionSorter;
}
@@ -178,17 +188,6 @@ class DartCompletionManager extends CompletionManager {
return c.computeFast(request);
});
});
- // TODO(danrubel) current sorter requires no additional analysis,
- // but need to handle the returned future the same way that futures
- // returned from contributors are handled once this method is refactored
- // to be async.
- /* await */ contributionSorter.sort(request, request.suggestions);
- // TODO (danrubel) if request is obsolete
- // (processAnalysisRequest returns false)
- // then send empty results
- if (todo.isEmpty) {
- sendResults(request, todo.isEmpty);
- }
return todo;
});
}
@@ -198,9 +197,40 @@ class DartCompletionManager extends CompletionManager {
* resolved and request that each remaining contributor finish their work.
* Return a [Future] that completes when the last notification has been sent.
*/
- Future computeFull(DartCompletionRequest request,
- CompletionPerformance performance, List<DartCompletionContributor> todo) {
+ Future computeFull(
+ DartCompletionRequest request,
+ CompletionPerformance performance,
+ List<DartCompletionContributor> todo) async {
+
+ // Compute suggestions using the new API
+ performance.logStartTime('computeSuggestions');
+ for (CompletionContributor contributor in newContributors) {
+ String contributorTag = 'computeSuggestions - ${contributor.runtimeType}';
+ performance.logStartTime(contributorTag);
+ List<CompletionSuggestion> newSuggestions =
+ await contributor.computeSuggestions(request);
+ for (CompletionSuggestion suggestion in newSuggestions) {
+ request.addSuggestion(suggestion);
+ }
+ performance.logElapseTime(contributorTag);
+ }
+ performance.logElapseTime('computeSuggestions');
performance.logStartTime('waitForAnalysis');
+
+ if (todo.isEmpty) {
+ // TODO(danrubel) current sorter requires no additional analysis,
+ // but need to handle the returned future the same way that futures
+ // returned from contributors are handled once this method is refactored
+ // to be async.
+ /* await */ contributionSorter.sort(
+ request, request.suggestions);
+ // TODO (danrubel) if request is obsolete
+ // (processAnalysisRequest returns false)
+ // then send empty results
+ sendResults(request, true);
+ }
+
+ // Compute the other suggestions
return waitForAnalysis().then((CompilationUnit unit) {
if (controller.isClosed) {
return;
@@ -229,7 +259,8 @@ class DartCompletionManager extends CompletionManager {
// but need to handle the returned future the same way that futures
// returned from contributors are handled once this method is refactored
// to be async.
- /* await */ contributionSorter.sort(request, request.suggestions);
+ /* await */ contributionSorter.sort(
+ request, request.suggestions);
// TODO (danrubel) if request is obsolete
// (processAnalysisRequest returns false)
// then send empty results
@@ -249,9 +280,7 @@ class DartCompletionManager extends CompletionManager {
CompletionPerformance performance = new CompletionPerformance();
performance.logElapseTime('compute', () {
List<DartCompletionContributor> todo = computeFast(request, performance);
- if (!todo.isEmpty) {
- computeFull(request, performance, todo);
- }
+ computeFull(request, performance, todo);
});
}

Powered by Google App Engine
This is Rietveld 408576698