ExtensionTracker是
IExtensionTracker的实现,用于跟踪插件是否为活动状态,由eclipse官方提供的工具类,eclipse的官方UI组件对
IExtensionTracker有自己的实现。如下为例子:
public void start(BundleContext context) throws Exception {
IExtensionRegistry reg = Platform.getExtensionRegistry();
IExtensionPoint ep =
reg.getExtensionPoint(MY_EXTENSION_POINT_ID);
tracker = new ExtensionTracker(reg);
IFilter filter =
ExtensionTracker.createExtensionPointFilter(ep);
tracker.registerHandler(this, filter);
IExtension[] extensions = ep.getExtensions();
for (int i = 0; i < extensions.length; ++i)
addExtension(tracker, extensions);
}
public void stop(BundleContext context) throws Exception {
if (tracker != null) {
tracker.close();
tracker = null;
}
}
public void addExtension(IExtensionTracker tracker,
IExtension extension) {
IConfigurationElement[] configs =
extension.getConfigurationElements();
for (int i = 0; i < configs.length; ++i) {
// use configuration properties for something
// ...
MyDelegate delegate = (MyDelegate)
configs.createExecutableExtension(CLASS_ATTR);
// do what you need to do
// ...
delegates.add(delegate);
// register association between object and extension
// with the tracker
tracker.registerObject(extension, delegate,
IExtensionTracker.REF_WEAK);
}
}
public void removeExtension(IExtension extension,
Object[] objects) {
// stop using objects associated with
// the removed extension
for (int i = 0; i < objects.length; ++i)
delegates.remove(objects);
}