Index: pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart |
diff --git a/pkg/analysis_server/lib/src/services/completion/completion_dart.dart b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart |
similarity index 70% |
rename from pkg/analysis_server/lib/src/services/completion/completion_dart.dart |
rename to pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart |
index 1ccc28b5ede0492ae4196f3eb6b56c3b058f60b1..abd1eddb595f35fe19e7b628a0aa4928576bbaad 100644 |
--- a/pkg/analysis_server/lib/src/services/completion/completion_dart.dart |
+++ b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart |
@@ -2,15 +2,17 @@ |
// for details. All rights reserved. Use of this source code is governed by a |
// BSD-style license that can be found in the LICENSE file. |
-library analysis_server.src.services.completion.completion_dart; |
+library services.completion.dart.manager; |
import 'dart:async'; |
+import 'package:analysis_server/plugin/protocol/protocol.dart'; |
import 'package:analysis_server/src/provisional/completion/completion_core.dart' |
- show CompletionRequest; |
+ show CompletionContributor, CompletionRequest; |
import 'package:analysis_server/src/provisional/completion/completion_dart.dart'; |
import 'package:analysis_server/src/provisional/completion/dart/completion_target.dart'; |
import 'package:analysis_server/src/services/completion/completion_core.dart'; |
+import 'package:analysis_server/src/services/completion/dart/keyword_contributor.dart'; |
import 'package:analyzer/file_system/file_system.dart'; |
import 'package:analyzer/src/context/context.dart' |
show AnalysisFutureHelper, AnalysisContextImpl; |
@@ -21,6 +23,40 @@ import 'package:analyzer/src/task/dart.dart'; |
import 'package:analyzer/task/dart.dart'; |
/** |
+ * [DartCompletionManager] determines if a completion request is Dart specific |
+ * and forwards those requests to all [DartCompletionContributor]s. |
+ */ |
+class DartCompletionManager implements CompletionContributor { |
+ // TODO(danrubel) initialize using plugin API |
+ List<DartCompletionContributor> contributors = <DartCompletionContributor>[ |
+ new KeywordContributor(), |
+ ]; |
+ |
+ @override |
+ Future<List<CompletionSuggestion>> computeSuggestions( |
+ CompletionRequest request) { |
+ if (AnalysisEngine.isDartFileName(request.source.shortName)) { |
+ return _computeDartSuggestions( |
+ new DartCompletionRequestImpl.forRequest(request)); |
+ } |
+ return new Future.value(); |
+ } |
+ |
+ /** |
+ * Return a [Future] that completes with a list of suggestions |
+ * for the given completion [request]. |
+ */ |
+ Future<List<CompletionSuggestion>> _computeDartSuggestions( |
+ DartCompletionRequest request) async { |
+ List<CompletionSuggestion> suggestions = <CompletionSuggestion>[]; |
+ for (DartCompletionContributor contributor in contributors) { |
+ suggestions.addAll(await contributor.computeSuggestions(request)); |
+ } |
+ return suggestions; |
+ } |
+} |
+ |
+/** |
* The information about a requested list of completions within a Dart file. |
*/ |
class DartCompletionRequestImpl extends CompletionRequestImpl |