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

Side by Side Diff: pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart

Issue 1484853002: new DartCompletionPlugin (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: 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 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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698