b161853940
R=scheglov@google.com Review URL: https://codereview.chromium.org//840473007 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42776 260f80e4-7a28-3924-810f-c04153c831b5
131 lines
4.0 KiB
Dart
131 lines
4.0 KiB
Dart
// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
|
|
// 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.plugin.plugin;
|
|
|
|
/**
|
|
* A function used to register the given [extension] to the extension point with
|
|
* the given unique [identifier].
|
|
*
|
|
* An [ExtensionError] will be thrown if the [extension] is not appropriate
|
|
* for the extension point, such as an [extension] that does not implement the
|
|
* required interface.
|
|
*/
|
|
typedef void RegisterExtension(String identifier, Object extension);
|
|
|
|
/**
|
|
* A function used to register an extension point with the given simple
|
|
* [identifier]. If given, the [validator] will be used to validate extensions
|
|
* to the extension point.
|
|
*
|
|
* An [ExtensionError] will be thrown if the extension point cannot be
|
|
* registered, such as when a plugin attempts to define two extension points
|
|
* with the same simple identifier.
|
|
*/
|
|
typedef ExtensionPoint RegisterExtensionPoint(String identifier,
|
|
[ValidateExtension validateExtension]);
|
|
|
|
/**
|
|
* A function used by a plugin to validate an [extension] to a extension point.
|
|
*
|
|
* An [ExtensionError] should be thrown if the [extension] is not valid for the
|
|
* extension point, such as an [extension] that does not implement the required
|
|
* interface.
|
|
*/
|
|
typedef void ValidateExtension(Object extension);
|
|
|
|
/**
|
|
* An exception indicating that an error occurred while attempting to register
|
|
* either an extension or an extension point.
|
|
*
|
|
* Clients are not expected to subtype this class.
|
|
*/
|
|
class ExtensionError implements Exception {
|
|
/**
|
|
* The message describing the error that occurred.
|
|
*/
|
|
final String message;
|
|
|
|
/**
|
|
* Initialize a newly created error to have the given message.
|
|
*/
|
|
ExtensionError(this.message);
|
|
}
|
|
|
|
/**
|
|
* A representation of an extension point.
|
|
*
|
|
* Clients are not expected to subtype this class.
|
|
*/
|
|
abstract class ExtensionPoint {
|
|
/**
|
|
* Return an immutable list containing all of the extensions that were
|
|
* registered for this extension point.
|
|
*/
|
|
List<Object> get extensions;
|
|
|
|
/**
|
|
* Return the plugin that defined this extension point.
|
|
*/
|
|
Plugin get plugin;
|
|
|
|
/**
|
|
* Return the identifier used to uniquely identify this extension point within
|
|
* the defining plugin.
|
|
*/
|
|
String get simpleIdentifier;
|
|
|
|
/**
|
|
* Return the identifier used to uniquely identify this extension point. The
|
|
* unique identifier is the identifier for the plugin, followed by a period
|
|
* (`.`), followed by the [simpleIdentifier] for the extension point.
|
|
*/
|
|
String get uniqueIdentifier;
|
|
}
|
|
|
|
/**
|
|
* A contribution to the analysis server that can extend the behavior of the
|
|
* server while also allowing other plugins to extend it's behavior.
|
|
*
|
|
* Clients are expected to subtype this class when implementing plugins.
|
|
*/
|
|
abstract class Plugin {
|
|
/**
|
|
* Return the identifier used to uniquely identify this plugin.
|
|
*/
|
|
String get uniqueIdentifier;
|
|
|
|
/**
|
|
* Use the [register] function to register all of the extension points
|
|
* contributed by this plugin.
|
|
*
|
|
* Clients should not invoke the [register] function after this method has
|
|
* returned.
|
|
*/
|
|
void registerExtensionPoints(RegisterExtensionPoint register);
|
|
|
|
/**
|
|
* Use the [register] function to register all of the extensions contributed
|
|
* by this plugin.
|
|
*
|
|
* Clients should not invoke the [register] function after this method has
|
|
* returned.
|
|
*/
|
|
void registerExtensions(RegisterExtension register);
|
|
|
|
/**
|
|
* Return a unique identifier created from the unique identifier from the
|
|
* [plugin] and the [simpleIdentifier].
|
|
*/
|
|
static String buildUniqueIdentifier(Plugin plugin, String simpleIdentifier) =>
|
|
join(plugin.uniqueIdentifier, simpleIdentifier);
|
|
|
|
/**
|
|
* Return an identifier created by joining the [pluginIdentifier] and the
|
|
* [simpleIdentifier].
|
|
*/
|
|
static String join(String pluginIdentifier, String simpleIdentifier) =>
|
|
'$pluginIdentifier.$simpleIdentifier';
|
|
}
|