eclipse启动时,会扫描plugins目录,检查所有插件,读取所有插件的清单文件,并用插件注册表管理着所有插件,维护着所有插件的所用,在插件第一次被使用时,插件才被加载,因而实现lazzy加载。插件加载首先会调用Activator.start()方法,插件生命期结束时会调用Activator.stop()方法。
插件可以扩展其它插件,称为Extension,插件也可以被其它插件扩展,必须提供扩展点(Extension Point)。每个扩展点需要提供指定的Schema,在其中指定XML元素及属性。
IAction与IActionDelegate:eclipse根据清单文件的描述信息自动创建了一个Action对象(继承了PluginAction),该对象具备操作的所有信息,唯一不能做的是执行实际操作,交给IActionDelegate来做。子类有IEditorActionDelegate,IworkbenchWindowDelegate,IViewActionDelegate,IObjectActionDelegate.
操作集:ActionSet,工具栏上的可以拖动的一组工具组成一个操作集。
1定制工作台菜单和工具:扩展actionSet,其中menu用于描述操作插入的位置,action为操作,插入到指定的menu对应的位置。action对应的class要实现IworkbenchWindowDelegate。
2view添加工具栏和下拉菜单栏:扩展viewActions的viewContribution元素,设置targetID为视图id,实现IViewActionDelegate
3编辑器添加工作台菜单和工具:编辑器的工作台菜单、工具只有在编辑器被打开时才会出现。扩展editorActions的editorContribution,设置targetID为editor的id,实现IEditorActionDelegate。
4 添加上下文菜单,扩展popuupMenus的viewerContribution,设置其targetid为需要绑定到的view或editor的id。视图则实现IViewActionDelegate,editor则实现IEditorActionDelegate。
viewerContribution规定是针对视图或editor中的通用操作,若要根据选择内容决定弹出菜单,则扩展objectContribution,其Action需要实现IObjectActionDelegate,且不需要设置targetID。
5键的绑定
扩展commands,创建一个command;扩展binding的key元素,在其中指定组合键,设置其commandID,schemaID可以使用默认的defaultAcceleratorConfigure,contextID默认为context.windows;将action与command绑定,只需要指定Action的definitionID为command的id。