【角色之间的关系】
1、org.eclipse.ui.editors扩展和IEditorPart之间的关系
一个org.eclipse.ui.editors扩展会指定一个对应的IEditorPart实现,一个IEditorPart实现可以被用在多个org.eclipse.ui.editors扩展中,也就是说IEditorPart相对于org.eclipse.ui.editors扩展是1:N的关系。
例如WTP提供的StructuredTextEditor是一个文本类型editor part实现,其在org.eclipse.jst.jsp.ui、org.eclipse.wst.html.ui等多个插件中被注册,它被WTP用来编辑jsp、html等多种资源。例如:
2、IEditorPart和IEditorActionBarContributor之间的关系
上面已经说过,多个IEditorPart实例共享同一个IEditorActionBarContributor实例。结合具体场景讲,例如用同一种类型的JSP编辑器打开了10个JSP文件,每次都会产生一个新的该类型IEditorPart实例,但是对应的是同一个IEditorActionBarContributor实例。
一个IEditorPart实现可以被注册多次(上面第一个点说过),每次可以配置不同类型的IEditorActionBarContributor实现。
上面可以看出来,当StructuredTextEditor被配置用来绑定jsp文件类型的时候,给它配置的是ActionContributorJSP,当StructuredTextEditor被配置用来绑定html文件类型的时候,给它配置的是ActionContributorHTML。那就是说,当我们用StructuredTextEditor分别开发jsp和html的时候,工作台工具栏和菜单栏可能会有所不同^_^ 3、SourceViewer和SourceViewerConfiguration 之间的关系 SourceViewer的很多行为是由SourceViewerConfiguration制定的,前者承担的可以认为是source viewer的核心行为,例如绑定document、annotation model等等,后者可以认为是前者对应的服务接口,提供额外服务。对于同一个SourceViewer实例,可以用不同类型SourceViewerConfiguration进行配置,以达到定制的效果,外在行为则看起来就会有所不同。
上面说过,WTP在编辑jsp、html等页面资源类型的时候其实对应都是StructuredTextEditor,但是使用过的就会知道,自动提示等等行为还是有所不同的。StructuredTextEditor持有的是同种类型的SourceViewer实现:org.eclipse.wst.sse.ui.internal.StructuredTextViewer,但是,如果给StructuredTextViewer配置不同的SourceViewerConfiguration,则就可以定制其行为了^_^。 当用StructuredTextEditor打开jsp文件时,在StructuredTextEditor.createPartControl过程中给其配置StructuredTextViewerConfigurationJSP,当用StructuredTextEditor打开html文件时,在StructuredTextEditor.createPartControl过程中给其配置StructuredTextViewerConfigurationHTML...
【WTP StructuredTextEditor分析】 其实上面已经分析了建立一个编辑器扩展所依赖的关键角色,那么我们看一下WTP提供的用来编辑jsp、html等多种页面资源的StructuredTextEditor是如何配置起来的。 IEditorPart:StructuredTextEditor
IEditorActionBarContributor:提供了ActionContributorJSP等多种实现,通过org.eclipse.ui.editors扩展来和StructuredTextEditor集成
IDocumentProvider:提供了StructuredModelDocumentProvider和StorageModelModelProvider两种实现,通过StructuredTextEditor.setDocumentProvider(IEditorInput)完成
ISourceViewer:StructuredTextViewer
SourceViewerConfiguration:提供StructuredTextViewerConfigurationJSP、StructuredTextViewerConfigurationHTML等多种实现,在StructuredTextEditor.createPartControl过程中对StructuredTextViewer进行配置。
【基于WTP创建自定义的JSP编辑器扩展】