OLD | NEW |
| (Empty) |
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 | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 import 'package:analysis_server/plugin/analysis/analysis_domain.dart'; | |
6 import 'package:analysis_server/plugin/analysis/analyzed_files.dart'; | |
7 import 'package:analysis_server/plugin/analysis/navigation/navigation.dart'; | |
8 import 'package:analysis_server/plugin/analysis/navigation/navigation_core.dart'
; | |
9 import 'package:analysis_server/plugin/analysis/occurrences/occurrences.dart'; | |
10 import 'package:analysis_server/plugin/analysis/occurrences/occurrences_core.dar
t'; | |
11 import 'package:analysis_server/plugin/edit/assist/assist.dart'; | |
12 import 'package:analysis_server/plugin/edit/assist/assist_core.dart'; | |
13 import 'package:analysis_server/plugin/edit/fix/fix.dart'; | |
14 import 'package:analysis_server/plugin/edit/fix/fix_core.dart'; | |
15 import 'package:analysis_server/protocol/protocol.dart'; | |
16 import 'package:analysis_server/src/analysis_server.dart'; | |
17 import 'package:analysis_server/src/domain_analysis.dart'; | |
18 import 'package:analysis_server/src/domain_analytics.dart'; | |
19 import 'package:analysis_server/src/domain_completion.dart'; | |
20 import 'package:analysis_server/src/domain_diagnostic.dart'; | |
21 import 'package:analysis_server/src/domain_execution.dart'; | |
22 import 'package:analysis_server/src/domain_kythe.dart'; | |
23 import 'package:analysis_server/src/domain_server.dart'; | |
24 import 'package:analysis_server/src/domains/analysis/navigation_dart.dart'; | |
25 import 'package:analysis_server/src/domains/analysis/occurrences_dart.dart'; | |
26 import 'package:analysis_server/src/edit/edit_domain.dart'; | |
27 import 'package:analysis_server/src/provisional/completion/completion_core.dart'
; | |
28 import 'package:analysis_server/src/search/search_domain.dart'; | |
29 import 'package:analysis_server/src/services/correction/assist_internal.dart'; | |
30 import 'package:analysis_server/src/services/correction/fix_internal.dart'; | |
31 import 'package:analyzer/src/generated/engine.dart'; | |
32 import 'package:plugin/plugin.dart'; | |
33 | |
34 /** | |
35 * A function that will create a request handler that can be used by the given | |
36 * [server]. | |
37 */ | |
38 typedef RequestHandler RequestHandlerFactory(AnalysisServer server); | |
39 | |
40 /** | |
41 * A plugin that defines the extension points and extensions that are inherently | |
42 * defined by the analysis server. | |
43 */ | |
44 class ServerPlugin implements Plugin { | |
45 /** | |
46 * The simple identifier of the extension point that allows plugins to | |
47 * register file patterns that will cause files to be analyzed. | |
48 */ | |
49 static const String ANALYZED_FILE_PATTERNS_EXTENSION_POINT = | |
50 'analyzedFilePatterns'; | |
51 | |
52 /** | |
53 * The simple identifier of the extension point that allows plugins to | |
54 * register assist contributors. | |
55 */ | |
56 static const String ASSIST_CONTRIBUTOR_EXTENSION_POINT = 'assistContributor'; | |
57 | |
58 /** | |
59 * The simple identifier of the extension point that allows plugins to | |
60 * register completion contributors. | |
61 */ | |
62 static const String COMPLETION_CONTRIBUTOR_EXTENSION_POINT = | |
63 'completionContributor'; | |
64 | |
65 /** | |
66 * The simple identifier of the extension point that allows plugins to | |
67 * register domains. | |
68 */ | |
69 static const String DOMAIN_EXTENSION_POINT = 'domain'; | |
70 | |
71 /** | |
72 * The simple identifier of the extension point that allows plugins to | |
73 * register fix contributors. | |
74 */ | |
75 static const String FIX_CONTRIBUTOR_EXTENSION_POINT = 'fixContributor'; | |
76 | |
77 /** | |
78 * The simple identifier of the extension point that allows plugins to | |
79 * register index contributors. | |
80 */ | |
81 static const String INDEX_CONTRIBUTOR_EXTENSION_POINT = 'indexContributor'; | |
82 | |
83 /** | |
84 * The simple identifier of the extension point that allows plugins to | |
85 * register navigation contributors. | |
86 */ | |
87 static const String NAVIGATION_CONTRIBUTOR_EXTENSION_POINT = | |
88 'navigationContributor'; | |
89 | |
90 /** | |
91 * The simple identifier of the extension point that allows plugins to | |
92 * register element occurrences. | |
93 */ | |
94 static const String OCCURRENCES_CONTRIBUTOR_EXTENSION_POINT = | |
95 'occurrencesContributor'; | |
96 | |
97 /** | |
98 * The simple identifier of the extension point that allows plugins to | |
99 * register analysis result listeners. | |
100 */ | |
101 static const String SET_ANALISYS_DOMAIN_EXTENSION_POINT = 'setAnalysisDomain'; | |
102 | |
103 /** | |
104 * The unique identifier of this plugin. | |
105 */ | |
106 static const String UNIQUE_IDENTIFIER = 'analysis_server.core'; | |
107 | |
108 /** | |
109 * The extension point that allows plugins to register file patterns that will | |
110 * cause files to be analyzed. | |
111 */ | |
112 ExtensionPoint<List<String>> analyzedFilePatternsExtensionPoint; | |
113 | |
114 /** | |
115 * The extension point that allows plugins to register assist contributors. | |
116 */ | |
117 ExtensionPoint<AssistContributor> assistContributorExtensionPoint; | |
118 | |
119 /** | |
120 * The extension point that allows plugins to register completion | |
121 * contributors. | |
122 */ | |
123 ExtensionPoint<CompletionContributorFactory> | |
124 completionContributorExtensionPoint; | |
125 | |
126 /** | |
127 * The extension point that allows plugins to register domains with the | |
128 * server. | |
129 */ | |
130 ExtensionPoint<RequestHandlerFactory> domainExtensionPoint; | |
131 | |
132 /** | |
133 * The extension point that allows plugins to register fix contributors with | |
134 * the server. | |
135 */ | |
136 ExtensionPoint<FixContributor> fixContributorExtensionPoint; | |
137 | |
138 /** | |
139 * The extension point that allows plugins to register navigation | |
140 * contributors. | |
141 */ | |
142 ExtensionPoint<NavigationContributor> navigationContributorExtensionPoint; | |
143 | |
144 /** | |
145 * The extension point that allows plugins to register occurrences | |
146 * contributors. | |
147 */ | |
148 ExtensionPoint<OccurrencesContributor> occurrencesContributorExtensionPoint; | |
149 | |
150 /** | |
151 * The extension point that allows plugins to get access to the `analysis` | |
152 * domain. | |
153 */ | |
154 ExtensionPoint<SetAnalysisDomain> setAnalysisDomainExtensionPoint; | |
155 | |
156 /** | |
157 * Initialize a newly created plugin. | |
158 */ | |
159 ServerPlugin(); | |
160 | |
161 /** | |
162 * Return a list containing all of the file patterns that can cause files to | |
163 * be analyzed. | |
164 */ | |
165 List<String> get analyzedFilePatterns { | |
166 List<String> patterns = <String>[]; | |
167 for (List<String> extension | |
168 in analyzedFilePatternsExtensionPoint.extensions) { | |
169 patterns.addAll(extension); | |
170 } | |
171 return patterns; | |
172 } | |
173 | |
174 /** | |
175 * Return a list containing all of the assist contributors that were | |
176 * contributed. | |
177 */ | |
178 List<AssistContributor> get assistContributors => | |
179 assistContributorExtensionPoint.extensions; | |
180 | |
181 /** | |
182 * Return a list containing all of the completion contributors that were | |
183 * contributed. | |
184 */ | |
185 Iterable<CompletionContributor> get completionContributors => | |
186 completionContributorExtensionPoint.extensions | |
187 .map((CompletionContributorFactory factory) => factory()); | |
188 | |
189 /** | |
190 * Return a list containing all of the fix contributors that were contributed. | |
191 */ | |
192 List<FixContributor> get fixContributors => | |
193 fixContributorExtensionPoint.extensions; | |
194 | |
195 /** | |
196 * Return a list containing all of the navigation contributors that were | |
197 * contributed. | |
198 */ | |
199 List<NavigationContributor> get navigationContributors => | |
200 navigationContributorExtensionPoint.extensions; | |
201 | |
202 /** | |
203 * Return a list containing all of the occurrences contributors that were | |
204 * contributed. | |
205 */ | |
206 List<OccurrencesContributor> get occurrencesContributors => | |
207 occurrencesContributorExtensionPoint.extensions; | |
208 | |
209 /** | |
210 * Return a list containing all of the receivers of the `analysis` domain | |
211 * instance. | |
212 */ | |
213 List<SetAnalysisDomain> get setAnalysisDomainFunctions => | |
214 setAnalysisDomainExtensionPoint.extensions; | |
215 | |
216 @override | |
217 String get uniqueIdentifier => UNIQUE_IDENTIFIER; | |
218 | |
219 /** | |
220 * Use the given [server] to create all of the domains ([RequestHandler]'s) | |
221 * that have been registered and return the newly created domains. | |
222 */ | |
223 List<RequestHandler> createDomains(AnalysisServer server) { | |
224 if (domainExtensionPoint == null) { | |
225 return <RequestHandler>[]; | |
226 } | |
227 return domainExtensionPoint.extensions | |
228 .map((RequestHandlerFactory factory) => factory(server)) | |
229 .toList(); | |
230 } | |
231 | |
232 @override | |
233 void registerExtensionPoints(RegisterExtensionPoint registerExtensionPoint) { | |
234 analyzedFilePatternsExtensionPoint = new ExtensionPoint<List<String>>( | |
235 this, ANALYZED_FILE_PATTERNS_EXTENSION_POINT, null); | |
236 registerExtensionPoint(analyzedFilePatternsExtensionPoint); | |
237 assistContributorExtensionPoint = new ExtensionPoint<AssistContributor>( | |
238 this, ASSIST_CONTRIBUTOR_EXTENSION_POINT, null); | |
239 registerExtensionPoint(assistContributorExtensionPoint); | |
240 completionContributorExtensionPoint = | |
241 new ExtensionPoint<CompletionContributorFactory>( | |
242 this, COMPLETION_CONTRIBUTOR_EXTENSION_POINT, null); | |
243 registerExtensionPoint(completionContributorExtensionPoint); | |
244 domainExtensionPoint = new ExtensionPoint<RequestHandlerFactory>( | |
245 this, DOMAIN_EXTENSION_POINT, null); | |
246 registerExtensionPoint(domainExtensionPoint); | |
247 fixContributorExtensionPoint = new ExtensionPoint<FixContributor>( | |
248 this, FIX_CONTRIBUTOR_EXTENSION_POINT, null); | |
249 registerExtensionPoint(fixContributorExtensionPoint); | |
250 navigationContributorExtensionPoint = | |
251 new ExtensionPoint<NavigationContributor>( | |
252 this, NAVIGATION_CONTRIBUTOR_EXTENSION_POINT, null); | |
253 registerExtensionPoint(navigationContributorExtensionPoint); | |
254 occurrencesContributorExtensionPoint = | |
255 new ExtensionPoint<OccurrencesContributor>( | |
256 this, OCCURRENCES_CONTRIBUTOR_EXTENSION_POINT, null); | |
257 registerExtensionPoint(occurrencesContributorExtensionPoint); | |
258 setAnalysisDomainExtensionPoint = new ExtensionPoint<SetAnalysisDomain>( | |
259 this, SET_ANALISYS_DOMAIN_EXTENSION_POINT, null); | |
260 registerExtensionPoint(setAnalysisDomainExtensionPoint); | |
261 } | |
262 | |
263 @override | |
264 void registerExtensions(RegisterExtension registerExtension) { | |
265 // | |
266 // Register analyzed file patterns. | |
267 // | |
268 List<String> patterns = <String>[ | |
269 '**/*.${AnalysisEngine.SUFFIX_DART}', | |
270 '**/*.${AnalysisEngine.SUFFIX_HTML}', | |
271 '**/*.${AnalysisEngine.SUFFIX_HTM}', | |
272 '**/${AnalysisEngine.ANALYSIS_OPTIONS_FILE}', | |
273 '**/${AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE}' | |
274 ]; | |
275 registerExtension(ANALYZED_FILE_PATTERNS_EXTENSION_POINT_ID, patterns); | |
276 // | |
277 // Register assist contributors. | |
278 // | |
279 registerExtension( | |
280 ASSIST_CONTRIBUTOR_EXTENSION_POINT_ID, new DefaultAssistContributor()); | |
281 // | |
282 // Register completion contributors. | |
283 // | |
284 // TODO(brianwilkerson) Register the completion contributors. | |
285 //registerExtension(COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID, ???); | |
286 // | |
287 // Register analysis contributors. | |
288 // | |
289 registerExtension(NAVIGATION_CONTRIBUTOR_EXTENSION_POINT_ID, | |
290 new DartNavigationComputer()); | |
291 registerExtension(OCCURRENCES_CONTRIBUTOR_EXTENSION_POINT_ID, | |
292 new DartOccurrencesComputer()); | |
293 // | |
294 // Register domains. | |
295 // | |
296 String domainId = Plugin.join(UNIQUE_IDENTIFIER, DOMAIN_EXTENSION_POINT); | |
297 registerExtension( | |
298 domainId, (AnalysisServer server) => new ServerDomainHandler(server)); | |
299 registerExtension( | |
300 domainId, (AnalysisServer server) => new AnalysisDomainHandler(server)); | |
301 registerExtension( | |
302 domainId, (AnalysisServer server) => new EditDomainHandler(server)); | |
303 registerExtension( | |
304 domainId, (AnalysisServer server) => new SearchDomainHandler(server)); | |
305 registerExtension(domainId, | |
306 (AnalysisServer server) => new CompletionDomainHandler(server)); | |
307 registerExtension(domainId, | |
308 (AnalysisServer server) => new ExecutionDomainHandler(server)); | |
309 registerExtension(domainId, | |
310 (AnalysisServer server) => new DiagnosticDomainHandler(server)); | |
311 registerExtension(domainId, | |
312 (AnalysisServer server) => new AnalyticsDomainHandler(server)); | |
313 registerExtension( | |
314 domainId, (AnalysisServer server) => new KytheDomainHandler(server)); | |
315 | |
316 // | |
317 // Register fix contributors. | |
318 // | |
319 registerExtension( | |
320 FIX_CONTRIBUTOR_EXTENSION_POINT_ID, new DefaultFixContributor()); | |
321 } | |
322 } | |
OLD | NEW |