| 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 |