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 library analyzer.plugin.plugin; | |
6 | |
7 /** | |
8 * A function used to register the given [extension] to the extension point with | |
9 * the given unique [identifier]. | |
10 * | |
11 * An [ExtensionError] will be thrown if the [extension] is not appropriate | |
12 * for the extension point, such as an [extension] that does not implement the | |
13 * required interface. | |
14 */ | |
15 typedef void RegisterExtension(String identifier, Object extension); | |
16 | |
17 /** | |
18 * A function used to register an extension point with the given simple | |
19 * [identifier]. If given, the [validator] will be used to validate extensions | |
20 * to the extension point. | |
21 * | |
22 * An [ExtensionError] will be thrown if the extension point cannot be | |
23 * registered, such as when a plugin attempts to define two extension points | |
24 * with the same simple identifier. | |
25 */ | |
26 typedef ExtensionPoint RegisterExtensionPoint(String identifier, | |
27 [ValidateExtension validateExtension]); | |
28 | |
29 /** | |
30 * A function used by a plugin to validate an [extension] to a extension point. | |
31 * | |
32 * An [ExtensionError] should be thrown if the [extension] is not valid for the | |
33 * extension point, such as an [extension] that does not implement the required | |
34 * interface. | |
35 */ | |
36 typedef void ValidateExtension(Object extension); | |
37 | |
38 /** | |
39 * An exception indicating that an error occurred while attempting to register | |
40 * either an extension or an extension point. | |
41 * | |
42 * Clients are not expected to subtype this class. | |
43 */ | |
44 class ExtensionError implements Exception { | |
45 /** | |
46 * The message describing the error that occurred. | |
47 */ | |
48 final String message; | |
49 | |
50 /** | |
51 * Initialize a newly created error to have the given message. | |
52 */ | |
53 ExtensionError(this.message); | |
54 } | |
55 | |
56 /** | |
57 * A representation of an extension point. | |
58 * | |
59 * Clients are not expected to subtype this class. | |
60 */ | |
61 abstract class ExtensionPoint { | |
62 /** | |
63 * Return an immutable list containing all of the extensions that were | |
64 * registered for this extension point. | |
65 */ | |
66 List<Object> get extensions; | |
67 | |
68 /** | |
69 * Return the plugin that defined this extension point. | |
70 */ | |
71 Plugin get plugin; | |
72 | |
73 /** | |
74 * Return the identifier used to uniquely identify this extension point within | |
75 * the defining plugin. | |
76 */ | |
77 String get simpleIdentifier; | |
78 | |
79 /** | |
80 * Return the identifier used to uniquely identify this extension point. The | |
81 * unique identifier is the identifier for the plugin, followed by a period | |
82 * (`.`), followed by the [simpleIdentifier] for the extension point. | |
83 */ | |
84 String get uniqueIdentifier; | |
85 } | |
86 | |
87 /** | |
88 * A contribution to the analysis server that can extend the behavior of the | |
89 * server while also allowing other plugins to extend it's behavior. | |
90 * | |
91 * Clients are expected to subtype this class when implementing plugins. | |
92 */ | |
93 abstract class Plugin { | |
94 /** | |
95 * Return the identifier used to uniquely identify this plugin. | |
96 */ | |
97 String get uniqueIdentifier; | |
98 | |
99 /** | |
100 * Use the [register] function to register all of the extension points | |
101 * contributed by this plugin. | |
102 * | |
103 * Clients should not invoke the [register] function after this method has | |
104 * returned. | |
105 */ | |
106 void registerExtensionPoints(RegisterExtensionPoint register); | |
107 | |
108 /** | |
109 * Use the [register] function to register all of the extensions contributed | |
110 * by this plugin. | |
111 * | |
112 * Clients should not invoke the [register] function after this method has | |
113 * returned. | |
114 */ | |
115 void registerExtensions(RegisterExtension register); | |
116 | |
117 /** | |
118 * Return a unique identifier created from the unique identifier from the | |
119 * [plugin] and the [simpleIdentifier]. | |
120 */ | |
121 static String buildUniqueIdentifier(Plugin plugin, String simpleIdentifier) => | |
122 join(plugin.uniqueIdentifier, simpleIdentifier); | |
123 | |
124 /** | |
125 * Return an identifier created by joining the [pluginIdentifier] and the | |
126 * [simpleIdentifier]. | |
127 */ | |
128 static String join(String pluginIdentifier, String simpleIdentifier) => | |
129 '$pluginIdentifier.$simpleIdentifier'; | |
130 } | |
OLD | NEW |