Chromium Code Reviews| Index: pkg/analysis_server/lib/src/plugin/server_plugin.dart |
| diff --git a/pkg/analysis_server/lib/src/plugin/server_plugin.dart b/pkg/analysis_server/lib/src/plugin/server_plugin.dart |
| index b5a522d15ea7aaf5f895efa63d0a0d44b3e546b9..2a049c83d31b0cbfeabc7f4e149e2334f4ae85bd 100644 |
| --- a/pkg/analysis_server/lib/src/plugin/server_plugin.dart |
| +++ b/pkg/analysis_server/lib/src/plugin/server_plugin.dart |
| @@ -2,12 +2,17 @@ |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| -library analysis_server.src.plugin.plugin_impl; |
| +library analysis_server.src.plugin.server_plugin; |
| import 'package:analysis_server/plugin/plugin.dart'; |
| import 'package:analysis_server/src/analysis_server.dart'; |
| +import 'package:analysis_server/src/domain_analysis.dart'; |
| +import 'package:analysis_server/src/domain_completion.dart'; |
| +import 'package:analysis_server/src/domain_execution.dart'; |
| import 'package:analysis_server/src/domain_server.dart'; |
| +import 'package:analysis_server/src/edit/edit_domain.dart'; |
| import 'package:analysis_server/src/protocol.dart'; |
| +import 'package:analysis_server/src/search/search_domain.dart'; |
| /** |
| * A function that will create a request handler that can be used by the given |
| @@ -34,6 +39,12 @@ class ServerPlugin implements Plugin { |
| static const String UNIQUE_IDENTIFIER = 'analysis_server.core'; |
| /** |
| + * The extension point that allows plugins to register new domains with the |
| + * server. |
| + */ |
| + ExtensionPoint domainExtensionPoint; |
| + |
| + /** |
| * Initialize a newly created plugin. |
| */ |
| ServerPlugin(); |
| @@ -41,11 +52,22 @@ class ServerPlugin implements Plugin { |
| @override |
| String get uniqueIdentifier => UNIQUE_IDENTIFIER; |
| + /** |
| + * Use the given [server] to create all of the domains ([RequestHandler]'s) |
| + * that have been registered and return the newly created domains. |
| + */ |
| + List<RequestHandler> createDomains(AnalysisServer server) { |
| + if (domainExtensionPoint == null) { |
| + return <RequestHandler>[]; |
| + } |
| + return domainExtensionPoint.extensions.map( |
| + (RequestHandlerFactory factory) => factory(server)).toList(); |
| + } |
| + |
| @override |
| void registerExtensionPoints(RegisterExtensionPoint registerExtensionPoint) { |
| - registerExtensionPoint( |
| - DOMAIN_EXTENSION_POINT, |
| - (Object extension) => extension is RequestHandlerFactory); |
| + domainExtensionPoint = |
| + registerExtensionPoint(DOMAIN_EXTENSION_POINT, _validateDomainExtension); |
| } |
| @override |
| @@ -54,6 +76,32 @@ class ServerPlugin implements Plugin { |
| registerExtension( |
| domainId, |
| (AnalysisServer server) => new ServerDomainHandler(server)); |
| - // TODO(brianwilkerson) Register the other domains. |
| + registerExtension( |
| + domainId, |
| + (AnalysisServer server) => new AnalysisDomainHandler(server)); |
| + registerExtension( |
| + domainId, |
| + (AnalysisServer server) => new EditDomainHandler(server)); |
| + registerExtension( |
| + domainId, |
| + (AnalysisServer server) => new SearchDomainHandler(server)); |
| + registerExtension( |
| + domainId, |
| + (AnalysisServer server) => new CompletionDomainHandler(server)); |
| + registerExtension( |
| + domainId, |
| + (AnalysisServer server) => new ExecutionDomainHandler(server)); |
| + } |
| + |
| + /** |
| + * Validate the given extension by throwing an [ExtensionError] if it is not a |
| + * valid domain. |
| + */ |
| + void _validateDomainExtension(Object extension) { |
| + if (extension is! RequestHandlerFactory) { |
| + var id = domainExtensionPoint.uniqueIdentifier; |
|
scheglov
2015/01/09 21:37:46
String?
Brian Wilkerson
2015/01/09 22:14:52
Done
|
| + throw new ExtensionError( |
| + 'Extensions to the $id must be a RequestHandlerFactory'); |
| + } |
| } |
| } |