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

Side by Side 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 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) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 analysis_server.src.services.completion.completion_dart; 5 library services.completion.dart.manager;
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/src/provisional/completion/completion_core.dart' 10 import 'package:analysis_server/src/provisional/completion/completion_core.dart'
10 show CompletionRequest; 11 show CompletionContributor, CompletionRequest;
11 import 'package:analysis_server/src/provisional/completion/completion_dart.dart' ; 12 import 'package:analysis_server/src/provisional/completion/completion_dart.dart' ;
12 import 'package:analysis_server/src/provisional/completion/dart/completion_targe t.dart'; 13 import 'package:analysis_server/src/provisional/completion/dart/completion_targe t.dart';
13 import 'package:analysis_server/src/services/completion/completion_core.dart'; 14 import 'package:analysis_server/src/services/completion/completion_core.dart';
15 import 'package:analysis_server/src/services/completion/dart/keyword_contributor .dart';
14 import 'package:analyzer/file_system/file_system.dart'; 16 import 'package:analyzer/file_system/file_system.dart';
15 import 'package:analyzer/src/context/context.dart' 17 import 'package:analyzer/src/context/context.dart'
16 show AnalysisFutureHelper, AnalysisContextImpl; 18 show AnalysisFutureHelper, AnalysisContextImpl;
17 import 'package:analyzer/src/generated/ast.dart'; 19 import 'package:analyzer/src/generated/ast.dart';
18 import 'package:analyzer/src/generated/engine.dart' hide AnalysisContextImpl; 20 import 'package:analyzer/src/generated/engine.dart' hide AnalysisContextImpl;
19 import 'package:analyzer/src/generated/source.dart'; 21 import 'package:analyzer/src/generated/source.dart';
20 import 'package:analyzer/src/task/dart.dart'; 22 import 'package:analyzer/src/task/dart.dart';
21 import 'package:analyzer/task/dart.dart'; 23 import 'package:analyzer/task/dart.dart';
22 24
23 /** 25 /**
26 * [DartCompletionManager] determines if a completion request is Dart specific
27 * and forwards those requests to all [DartCompletionContributor]s.
28 */
29 class DartCompletionManager implements CompletionContributor {
30 // TODO(danrubel) initialize using plugin API
31 List<DartCompletionContributor> contributors = <DartCompletionContributor>[
32 new KeywordContributor(),
33 ];
34
35 @override
36 Future<List<CompletionSuggestion>> computeSuggestions(
37 CompletionRequest request) {
38 if (AnalysisEngine.isDartFileName(request.source.shortName)) {
39 return _computeDartSuggestions(
40 new DartCompletionRequestImpl.forRequest(request));
41 }
42 return new Future.value();
43 }
44
45 /**
46 * Return a [Future] that completes with a list of suggestions
47 * for the given completion [request].
48 */
49 Future<List<CompletionSuggestion>> _computeDartSuggestions(
50 DartCompletionRequest request) async {
51 List<CompletionSuggestion> suggestions = <CompletionSuggestion>[];
52 for (DartCompletionContributor contributor in contributors) {
53 suggestions.addAll(await contributor.computeSuggestions(request));
54 }
55 return suggestions;
56 }
57 }
58
59 /**
24 * The information about a requested list of completions within a Dart file. 60 * The information about a requested list of completions within a Dart file.
25 */ 61 */
26 class DartCompletionRequestImpl extends CompletionRequestImpl 62 class DartCompletionRequestImpl extends CompletionRequestImpl
27 implements DartCompletionRequest { 63 implements DartCompletionRequest {
28 /** 64 /**
29 * The cached completion target or `null` if not computed yet. 65 * The cached completion target or `null` if not computed yet.
30 */ 66 */
31 CompletionTarget _target; 67 CompletionTarget _target;
32 68
33 /** 69 /**
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 127
92 @override 128 @override
93 CompletionTarget get target { 129 CompletionTarget get target {
94 if (_target == null) { 130 if (_target == null) {
95 CompilationUnit unit = context.computeResult(source, PARSED_UNIT); 131 CompilationUnit unit = context.computeResult(source, PARSED_UNIT);
96 _target = new CompletionTarget.forOffset(unit, offset); 132 _target = new CompletionTarget.forOffset(unit, offset);
97 } 133 }
98 return _target; 134 return _target;
99 } 135 }
100 } 136 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698