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); |
}); |
} |