Index: mojo/public/dart/third_party/plugin/lib/plugin.dart |
diff --git a/mojo/public/dart/third_party/plugin/lib/plugin.dart b/mojo/public/dart/third_party/plugin/lib/plugin.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b0176f8d7abd1df459f5504832e70b709ab4d0b8 |
--- /dev/null |
+++ b/mojo/public/dart/third_party/plugin/lib/plugin.dart |
@@ -0,0 +1,130 @@ |
+// 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 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 host application that can extend the behavior of the |
+ * application 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'; |
+} |