OLD | NEW |
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 services.completion.dart.manager; | 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/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 CompletionContributor, CompletionRequest; | 11 show CompletionContributor, CompletionRequest; |
13 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.
dart'; | 12 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.
dart'; |
| 13 import 'package:analysis_server/src/provisional/completion/dart/completion_plugi
n.dart'; |
14 import 'package:analysis_server/src/provisional/completion/dart/completion_targe
t.dart'; | 14 import 'package:analysis_server/src/provisional/completion/dart/completion_targe
t.dart'; |
15 import 'package:analysis_server/src/services/completion/completion_core.dart'; | 15 import 'package:analysis_server/src/services/completion/completion_core.dart'; |
16 import 'package:analysis_server/src/services/completion/dart/keyword_contributor
.dart'; | 16 import 'package:analysis_server/src/services/search/search_engine.dart'; |
17 import 'package:analyzer/file_system/file_system.dart'; | 17 import 'package:analyzer/file_system/file_system.dart'; |
18 import 'package:analyzer/src/context/context.dart' | 18 import 'package:analyzer/src/context/context.dart' |
19 show AnalysisFutureHelper, AnalysisContextImpl; | 19 show AnalysisFutureHelper, AnalysisContextImpl; |
20 import 'package:analyzer/src/generated/ast.dart'; | 20 import 'package:analyzer/src/generated/ast.dart'; |
21 import 'package:analyzer/src/generated/engine.dart' hide AnalysisContextImpl; | 21 import 'package:analyzer/src/generated/engine.dart' hide AnalysisContextImpl; |
22 import 'package:analyzer/src/generated/source.dart'; | 22 import 'package:analyzer/src/generated/source.dart'; |
23 import 'package:analyzer/src/task/dart.dart'; | 23 import 'package:analyzer/src/task/dart.dart'; |
24 import 'package:analyzer/task/dart.dart'; | 24 import 'package:analyzer/task/dart.dart'; |
25 | 25 |
26 /** | 26 /** |
27 * A factory for constructing the default set of [DartCompletionContributor]s. | |
28 * Do not call this function directly... | |
29 * use ServerPlugin.dartCompletionContributorFactories | |
30 */ | |
31 List<DartCompletionContributor> defaultDartCompletionContributorFactory() => | |
32 [new KeywordContributor(),]; | |
33 | |
34 /** | |
35 * [DartCompletionManager] determines if a completion request is Dart specific | 27 * [DartCompletionManager] determines if a completion request is Dart specific |
36 * and forwards those requests to all [DartCompletionContributor]s. | 28 * and forwards those requests to all [DartCompletionContributor]s. |
37 */ | 29 */ |
38 class DartCompletionManager implements CompletionContributor { | 30 class DartCompletionManager implements CompletionContributor { |
39 @override | 31 @override |
40 Future<List<CompletionSuggestion>> computeSuggestions( | 32 Future<List<CompletionSuggestion>> computeSuggestions( |
41 CompletionRequest request) { | 33 CompletionRequest request) { |
42 if (AnalysisEngine.isDartFileName(request.source.shortName)) { | 34 if (AnalysisEngine.isDartFileName(request.source.shortName)) { |
43 return _computeDartSuggestions( | 35 return _computeDartSuggestions( |
44 new DartCompletionRequestImpl.forRequest(request)); | 36 new DartCompletionRequestImpl.forRequest(request)); |
45 } | 37 } |
46 return new Future.value(); | 38 return new Future.value(); |
47 } | 39 } |
48 | 40 |
49 /** | 41 /** |
50 * Return a [Future] that completes with a list of suggestions | 42 * Return a [Future] that completes with a list of suggestions |
51 * for the given completion [request]. | 43 * for the given completion [request]. |
52 */ | 44 */ |
53 Future<List<CompletionSuggestion>> _computeDartSuggestions( | 45 Future<List<CompletionSuggestion>> _computeDartSuggestions( |
54 DartCompletionRequest request) async { | 46 DartCompletionRequest request) async { |
55 // Build the Dart specific completion contributors | 47 // Build the Dart specific completion contributors |
56 List<DartCompletionContributor> contributors = | 48 List<DartCompletionContributor> contributors = |
57 <DartCompletionContributor>[]; | 49 <DartCompletionContributor>[]; |
58 for (DartCompletionContributorFactory contributorFactory | 50 for (DartCompletionContributorFactory contributorFactory |
59 in request.serverPlugin.dartCompletionContributorFactories) { | 51 in dartCompletionPlugin.contributorFactories) { |
60 contributors.addAll(contributorFactory()); | 52 contributors.add(contributorFactory()); |
61 } | 53 } |
62 | 54 |
63 // Request Dart specific completions from each contributor | 55 // Request Dart specific completions from each contributor |
64 List<CompletionSuggestion> suggestions = <CompletionSuggestion>[]; | 56 List<CompletionSuggestion> suggestions = <CompletionSuggestion>[]; |
65 for (DartCompletionContributor contributor in contributors) { | 57 for (DartCompletionContributor contributor in contributors) { |
66 suggestions.addAll(await contributor.computeSuggestions(request)); | 58 suggestions.addAll(await contributor.computeSuggestions(request)); |
67 } | 59 } |
68 return suggestions; | 60 return suggestions; |
69 } | 61 } |
70 } | 62 } |
(...skipping 11 matching lines...) Expand all Loading... |
82 /** | 74 /** |
83 * `true` if [resolveDeclarationsInScope] has partially resolved the unit | 75 * `true` if [resolveDeclarationsInScope] has partially resolved the unit |
84 * referenced by [target], else `false`. | 76 * referenced by [target], else `false`. |
85 */ | 77 */ |
86 bool _haveResolveDeclarationsInScope = false; | 78 bool _haveResolveDeclarationsInScope = false; |
87 | 79 |
88 /** | 80 /** |
89 * Initialize a newly created completion request based on the given request. | 81 * Initialize a newly created completion request based on the given request. |
90 */ | 82 */ |
91 factory DartCompletionRequestImpl.forRequest(CompletionRequest request) { | 83 factory DartCompletionRequestImpl.forRequest(CompletionRequest request) { |
92 return new DartCompletionRequestImpl._(request.server, request.context, | 84 return new DartCompletionRequestImpl._( |
93 request.resourceProvider, request.source, request.offset); | 85 request.context, |
| 86 request.resourceProvider, |
| 87 request.searchEngine, |
| 88 request.source, |
| 89 request.offset); |
94 } | 90 } |
95 | 91 |
96 DartCompletionRequestImpl._(AnalysisServer server, AnalysisContext context, | 92 DartCompletionRequestImpl._( |
97 ResourceProvider resourceProvider, Source source, int offset) | 93 AnalysisContext context, |
98 : super(server, context, source, offset); | 94 ResourceProvider resourceProvider, |
| 95 SearchEngine searchEngine, |
| 96 Source source, |
| 97 int offset) |
| 98 : super(context, resourceProvider, searchEngine, source, offset); |
99 | 99 |
100 @override | 100 @override |
101 Future<CompilationUnit> resolveDeclarationsInScope() async { | 101 Future<CompilationUnit> resolveDeclarationsInScope() async { |
102 CompilationUnit unit = target.unit; | 102 CompilationUnit unit = target.unit; |
103 if (_haveResolveDeclarationsInScope) { | 103 if (_haveResolveDeclarationsInScope) { |
104 return unit; | 104 return unit; |
105 } | 105 } |
106 | 106 |
107 // Determine the library source | 107 // Determine the library source |
108 Source librarySource; | 108 Source librarySource; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 | 140 |
141 @override | 141 @override |
142 CompletionTarget get target { | 142 CompletionTarget get target { |
143 if (_target == null) { | 143 if (_target == null) { |
144 CompilationUnit unit = context.computeResult(source, PARSED_UNIT); | 144 CompilationUnit unit = context.computeResult(source, PARSED_UNIT); |
145 _target = new CompletionTarget.forOffset(unit, offset); | 145 _target = new CompletionTarget.forOffset(unit, offset); |
146 } | 146 } |
147 return _target; | 147 return _target; |
148 } | 148 } |
149 } | 149 } |
OLD | NEW |