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 analysis_server.src.plugin.server_plugin; | 5 library analysis_server.src.plugin.server_plugin; |
6 | 6 |
7 import 'package:analysis_server/analysis/index/index_core.dart'; | 7 import 'package:analysis_server/analysis/index/index_core.dart'; |
8 import 'package:analysis_server/completion/completion_core.dart'; | 8 import 'package:analysis_server/completion/completion_core.dart'; |
9 import 'package:analysis_server/edit/assist/assist_core.dart'; | 9 import 'package:analysis_server/edit/assist/assist_core.dart'; |
10 import 'package:analysis_server/edit/fix/fix_core.dart'; | 10 import 'package:analysis_server/edit/fix/fix_core.dart'; |
| 11 import 'package:analysis_server/plugin/analyzed_files.dart'; |
11 import 'package:analysis_server/plugin/assist.dart'; | 12 import 'package:analysis_server/plugin/assist.dart'; |
12 //import 'package:analysis_server/plugin/completion.dart'; | |
13 import 'package:analysis_server/plugin/fix.dart'; | 13 import 'package:analysis_server/plugin/fix.dart'; |
14 import 'package:analysis_server/src/analysis_server.dart'; | 14 import 'package:analysis_server/src/analysis_server.dart'; |
15 import 'package:analysis_server/src/domain_analysis.dart'; | 15 import 'package:analysis_server/src/domain_analysis.dart'; |
16 import 'package:analysis_server/src/domain_completion.dart'; | 16 import 'package:analysis_server/src/domain_completion.dart'; |
17 import 'package:analysis_server/src/domain_execution.dart'; | 17 import 'package:analysis_server/src/domain_execution.dart'; |
18 import 'package:analysis_server/src/domain_server.dart'; | 18 import 'package:analysis_server/src/domain_server.dart'; |
19 import 'package:analysis_server/src/edit/edit_domain.dart'; | 19 import 'package:analysis_server/src/edit/edit_domain.dart'; |
20 import 'package:analysis_server/src/protocol.dart'; | 20 import 'package:analysis_server/src/protocol.dart'; |
21 import 'package:analysis_server/src/search/search_domain.dart'; | 21 import 'package:analysis_server/src/search/search_domain.dart'; |
22 import 'package:analysis_server/src/services/correction/assist_internal.dart'; | 22 import 'package:analysis_server/src/services/correction/assist_internal.dart'; |
23 import 'package:analysis_server/src/services/correction/fix_internal.dart'; | 23 import 'package:analysis_server/src/services/correction/fix_internal.dart'; |
| 24 import 'package:analyzer/file_system/file_system.dart'; |
| 25 import 'package:analyzer/src/generated/engine.dart'; |
24 import 'package:plugin/plugin.dart'; | 26 import 'package:plugin/plugin.dart'; |
25 | 27 |
26 /** | 28 /** |
27 * A function that will create a request handler that can be used by the given | 29 * A function that will create a request handler that can be used by the given |
28 * [server]. | 30 * [server]. |
29 */ | 31 */ |
30 typedef RequestHandler RequestHandlerFactory(AnalysisServer server); | 32 typedef RequestHandler RequestHandlerFactory(AnalysisServer server); |
31 | 33 |
32 /** | 34 /** |
33 * A plugin that defines the extension points and extensions that are inherently | 35 * A plugin that defines the extension points and extensions that are inherently |
34 * defined by the analysis server. | 36 * defined by the analysis server. |
35 */ | 37 */ |
36 class ServerPlugin implements Plugin { | 38 class ServerPlugin implements Plugin { |
37 /** | 39 /** |
38 * The simple identifier of the extension point that allows plugins to | 40 * The simple identifier of the extension point that allows plugins to |
39 * register new assist contributors with the server. | 41 * register functions that can cause files to be analyzed. |
| 42 */ |
| 43 static const String ANALYZE_FILE_EXTENSION_POINT = 'analyzeFile'; |
| 44 |
| 45 /** |
| 46 * The simple identifier of the extension point that allows plugins to |
| 47 * register assist contributors. |
40 */ | 48 */ |
41 static const String ASSIST_CONTRIBUTOR_EXTENSION_POINT = 'assistContributor'; | 49 static const String ASSIST_CONTRIBUTOR_EXTENSION_POINT = 'assistContributor'; |
42 | 50 |
43 /** | 51 /** |
44 * The simple identifier of the extension point that allows plugins to | 52 * The simple identifier of the extension point that allows plugins to |
45 * register new completion contributors with the server. | 53 * register completion contributors. |
46 */ | 54 */ |
47 static const String COMPLETION_CONTRIBUTOR_EXTENSION_POINT = | 55 static const String COMPLETION_CONTRIBUTOR_EXTENSION_POINT = |
48 'completionContributor'; | 56 'completionContributor'; |
49 | 57 |
50 /** | 58 /** |
51 * The simple identifier of the extension point that allows plugins to | 59 * The simple identifier of the extension point that allows plugins to |
52 * register new domains with the server. | 60 * register domains. |
53 */ | 61 */ |
54 static const String DOMAIN_EXTENSION_POINT = 'domain'; | 62 static const String DOMAIN_EXTENSION_POINT = 'domain'; |
55 | 63 |
56 /** | 64 /** |
57 * The simple identifier of the extension point that allows plugins to | 65 * The simple identifier of the extension point that allows plugins to |
58 * register new fix contributors with the server. | 66 * register fix contributors. |
59 */ | 67 */ |
60 static const String FIX_CONTRIBUTOR_EXTENSION_POINT = 'fixContributor'; | 68 static const String FIX_CONTRIBUTOR_EXTENSION_POINT = 'fixContributor'; |
61 | 69 |
62 /** | 70 /** |
63 * The simple identifier of the extension point that allows plugins to | 71 * The simple identifier of the extension point that allows plugins to |
64 * register new index contributors with the server. | 72 * register index contributors. |
65 */ | 73 */ |
66 static const String INDEX_CONTRIBUTOR_EXTENSION_POINT = 'indexContributor'; | 74 static const String INDEX_CONTRIBUTOR_EXTENSION_POINT = 'indexContributor'; |
67 | 75 |
68 /** | 76 /** |
69 * The unique identifier of this plugin. | 77 * The unique identifier of this plugin. |
70 */ | 78 */ |
71 static const String UNIQUE_IDENTIFIER = 'analysis_server.core'; | 79 static const String UNIQUE_IDENTIFIER = 'analysis_server.core'; |
72 | 80 |
73 /** | 81 /** |
74 * The extension point that allows plugins to register new assist contributors | 82 * The extension point that allows plugins to register functions that can |
75 * with the server. | 83 * cause files to be analyzed. |
| 84 */ |
| 85 ExtensionPoint analyzeFileExtensionPoint; |
| 86 |
| 87 /** |
| 88 * The extension point that allows plugins to register assist contributors. |
76 */ | 89 */ |
77 ExtensionPoint assistContributorExtensionPoint; | 90 ExtensionPoint assistContributorExtensionPoint; |
78 | 91 |
79 /** | 92 /** |
80 * The extension point that allows plugins to register new completion | 93 * The extension point that allows plugins to register completion |
81 * contributors with the server. | 94 * contributors. |
82 */ | 95 */ |
83 ExtensionPoint completionContributorExtensionPoint; | 96 ExtensionPoint completionContributorExtensionPoint; |
84 | 97 |
85 /** | 98 /** |
86 * The extension point that allows plugins to register new domains with the | 99 * The extension point that allows plugins to register domains with the |
87 * server. | 100 * server. |
88 */ | 101 */ |
89 ExtensionPoint domainExtensionPoint; | 102 ExtensionPoint domainExtensionPoint; |
90 | 103 |
91 /** | 104 /** |
92 * The extension point that allows plugins to register new fix contributors | 105 * The extension point that allows plugins to register fix contributors with |
93 * with the server. | 106 * the server. |
94 */ | 107 */ |
95 ExtensionPoint fixContributorExtensionPoint; | 108 ExtensionPoint fixContributorExtensionPoint; |
96 | 109 |
97 /** | 110 /** |
98 * The extension point that allows plugins to register new index contributors | 111 * The extension point that allows plugins to register index contributors. |
99 * with the server. | |
100 */ | 112 */ |
101 ExtensionPoint indexContributorExtensionPoint; | 113 ExtensionPoint indexContributorExtensionPoint; |
102 | 114 |
103 /** | 115 /** |
104 * Initialize a newly created plugin. | 116 * Initialize a newly created plugin. |
105 */ | 117 */ |
106 ServerPlugin(); | 118 ServerPlugin(); |
107 | 119 |
108 /** | 120 /** |
| 121 * Return a list containing all of the functions that can cause files to be |
| 122 * analyzed. |
| 123 */ |
| 124 List<ShouldAnalyzeFile> get analyzeFileFunctions => |
| 125 analyzeFileExtensionPoint.extensions; |
| 126 |
| 127 /** |
109 * Return a list containing all of the assist contributors that were | 128 * Return a list containing all of the assist contributors that were |
110 * contributed. | 129 * contributed. |
111 */ | 130 */ |
112 List<AssistContributor> get assistContributors => | 131 List<AssistContributor> get assistContributors => |
113 assistContributorExtensionPoint.extensions; | 132 assistContributorExtensionPoint.extensions; |
114 | 133 |
115 /** | 134 /** |
116 * Return a list containing all of the completion contributors that were | 135 * Return a list containing all of the completion contributors that were |
117 * contributed. | 136 * contributed. |
118 */ | 137 */ |
(...skipping 24 matching lines...) Expand all Loading... |
143 if (domainExtensionPoint == null) { | 162 if (domainExtensionPoint == null) { |
144 return <RequestHandler>[]; | 163 return <RequestHandler>[]; |
145 } | 164 } |
146 return domainExtensionPoint.extensions | 165 return domainExtensionPoint.extensions |
147 .map((RequestHandlerFactory factory) => factory(server)) | 166 .map((RequestHandlerFactory factory) => factory(server)) |
148 .toList(); | 167 .toList(); |
149 } | 168 } |
150 | 169 |
151 @override | 170 @override |
152 void registerExtensionPoints(RegisterExtensionPoint registerExtensionPoint) { | 171 void registerExtensionPoints(RegisterExtensionPoint registerExtensionPoint) { |
| 172 analyzeFileExtensionPoint = registerExtensionPoint( |
| 173 ANALYZE_FILE_EXTENSION_POINT, _validateAnalyzeFileExtension); |
153 assistContributorExtensionPoint = registerExtensionPoint( | 174 assistContributorExtensionPoint = registerExtensionPoint( |
154 ASSIST_CONTRIBUTOR_EXTENSION_POINT, | 175 ASSIST_CONTRIBUTOR_EXTENSION_POINT, |
155 _validateAssistContributorExtension); | 176 _validateAssistContributorExtension); |
156 completionContributorExtensionPoint = registerExtensionPoint( | 177 completionContributorExtensionPoint = registerExtensionPoint( |
157 COMPLETION_CONTRIBUTOR_EXTENSION_POINT, | 178 COMPLETION_CONTRIBUTOR_EXTENSION_POINT, |
158 _validateCompletionContributorExtension); | 179 _validateCompletionContributorExtension); |
159 domainExtensionPoint = registerExtensionPoint( | 180 domainExtensionPoint = registerExtensionPoint( |
160 DOMAIN_EXTENSION_POINT, _validateDomainExtension); | 181 DOMAIN_EXTENSION_POINT, _validateDomainExtension); |
161 fixContributorExtensionPoint = registerExtensionPoint( | 182 fixContributorExtensionPoint = registerExtensionPoint( |
162 FIX_CONTRIBUTOR_EXTENSION_POINT, _validateFixContributorExtension); | 183 FIX_CONTRIBUTOR_EXTENSION_POINT, _validateFixContributorExtension); |
163 indexContributorExtensionPoint = registerExtensionPoint( | 184 indexContributorExtensionPoint = registerExtensionPoint( |
164 INDEX_CONTRIBUTOR_EXTENSION_POINT, _validateIndexContributorExtension); | 185 INDEX_CONTRIBUTOR_EXTENSION_POINT, _validateIndexContributorExtension); |
165 } | 186 } |
166 | 187 |
167 @override | 188 @override |
168 void registerExtensions(RegisterExtension registerExtension) { | 189 void registerExtensions(RegisterExtension registerExtension) { |
169 // | 190 // |
| 191 // Register analyze file functions. |
| 192 // |
| 193 registerExtension(ANALYZE_FILE_EXTENSION_POINT_ID, |
| 194 (File file) => AnalysisEngine.isDartFileName(file.path) || |
| 195 AnalysisEngine.isHtmlFileName(file.path)); |
| 196 // |
170 // Register assist contributors. | 197 // Register assist contributors. |
171 // | 198 // |
172 registerExtension( | 199 registerExtension( |
173 ASSIST_CONTRIBUTOR_EXTENSION_POINT_ID, new DefaultAssistContributor()); | 200 ASSIST_CONTRIBUTOR_EXTENSION_POINT_ID, new DefaultAssistContributor()); |
174 // | 201 // |
175 // Register completion contributors. | 202 // Register completion contributors. |
176 // | 203 // |
177 // TODO(brianwilkerson) Register the completion contributors. | 204 // TODO(brianwilkerson) Register the completion contributors. |
178 // registerExtension(COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID, ???); | 205 // registerExtension(COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID, ???); |
179 // | 206 // |
180 // Register domains. | 207 // Register domains. |
181 // | 208 // |
182 String domainId = Plugin.join(UNIQUE_IDENTIFIER, DOMAIN_EXTENSION_POINT); | 209 String domainId = Plugin.join(UNIQUE_IDENTIFIER, DOMAIN_EXTENSION_POINT); |
183 registerExtension( | 210 registerExtension( |
184 domainId, (AnalysisServer server) => new ServerDomainHandler(server)); | 211 domainId, (AnalysisServer server) => new ServerDomainHandler(server)); |
185 registerExtension( | 212 registerExtension( |
186 domainId, (AnalysisServer server) => new AnalysisDomainHandler(server)); | 213 domainId, (AnalysisServer server) => new AnalysisDomainHandler(server)); |
187 registerExtension(domainId, | 214 registerExtension( |
188 (AnalysisServer server) => new EditDomainHandler(server, this)); | 215 domainId, (AnalysisServer server) => new EditDomainHandler(server)); |
189 registerExtension( | 216 registerExtension( |
190 domainId, (AnalysisServer server) => new SearchDomainHandler(server)); | 217 domainId, (AnalysisServer server) => new SearchDomainHandler(server)); |
191 registerExtension(domainId, | 218 registerExtension(domainId, |
192 (AnalysisServer server) => new CompletionDomainHandler(server)); | 219 (AnalysisServer server) => new CompletionDomainHandler(server)); |
193 registerExtension(domainId, | 220 registerExtension(domainId, |
194 (AnalysisServer server) => new ExecutionDomainHandler(server)); | 221 (AnalysisServer server) => new ExecutionDomainHandler(server)); |
195 // | 222 // |
196 // Register fix contributors. | 223 // Register fix contributors. |
197 // | 224 // |
198 registerExtension( | 225 registerExtension( |
199 FIX_CONTRIBUTOR_EXTENSION_POINT_ID, new DefaultFixContributor()); | 226 FIX_CONTRIBUTOR_EXTENSION_POINT_ID, new DefaultFixContributor()); |
200 // | 227 // |
201 // Register index contributors. | 228 // Register index contributors. |
202 // | 229 // |
203 // TODO(brianwilkerson) Register the index contributors. | 230 // TODO(brianwilkerson) Register the index contributors. |
204 // registerExtension(INDEX_CONTRIBUTOR_EXTENSION_POINT, ???); | 231 // registerExtension(INDEX_CONTRIBUTOR_EXTENSION_POINT, ???); |
205 } | 232 } |
206 | 233 |
207 /** | 234 /** |
208 * Validate the given extension by throwing an [ExtensionError] if it is not a | 235 * Validate the given extension by throwing an [ExtensionError] if it is not a |
209 * valid assist contributor. | 236 * valid assist contributor. |
210 */ | 237 */ |
| 238 void _validateAnalyzeFileExtension(Object extension) { |
| 239 if (extension is! ShouldAnalyzeFile) { |
| 240 String id = analyzeFileExtensionPoint.uniqueIdentifier; |
| 241 throw new ExtensionError( |
| 242 'Extensions to $id must be an ShouldAnalyzeFile function'); |
| 243 } |
| 244 } |
| 245 |
| 246 /** |
| 247 * Validate the given extension by throwing an [ExtensionError] if it is not a |
| 248 * valid assist contributor. |
| 249 */ |
211 void _validateAssistContributorExtension(Object extension) { | 250 void _validateAssistContributorExtension(Object extension) { |
212 if (extension is! AssistContributor) { | 251 if (extension is! AssistContributor) { |
213 String id = assistContributorExtensionPoint.uniqueIdentifier; | 252 String id = assistContributorExtensionPoint.uniqueIdentifier; |
214 throw new ExtensionError( | 253 throw new ExtensionError( |
215 'Extensions to $id must be an AssistContributor'); | 254 'Extensions to $id must be an AssistContributor'); |
216 } | 255 } |
217 } | 256 } |
218 | 257 |
219 /** | 258 /** |
220 * Validate the given extension by throwing an [ExtensionError] if it is not a | 259 * Validate the given extension by throwing an [ExtensionError] if it is not a |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 * Validate the given extension by throwing an [ExtensionError] if it is not a | 294 * Validate the given extension by throwing an [ExtensionError] if it is not a |
256 * valid index contributor. | 295 * valid index contributor. |
257 */ | 296 */ |
258 void _validateIndexContributorExtension(Object extension) { | 297 void _validateIndexContributorExtension(Object extension) { |
259 if (extension is! IndexContributor) { | 298 if (extension is! IndexContributor) { |
260 String id = indexContributorExtensionPoint.uniqueIdentifier; | 299 String id = indexContributorExtensionPoint.uniqueIdentifier; |
261 throw new ExtensionError('Extensions to $id must be an IndexContributor'); | 300 throw new ExtensionError('Extensions to $id must be an IndexContributor'); |
262 } | 301 } |
263 } | 302 } |
264 } | 303 } |
OLD | NEW |