原文链接:
http://www.jetbrains.org/intellij/sdk/docs/basics/architectural_overview/file_view_providers.html
文件视图提供者(查看FileViewProvider类)是在IntelliJ IDEA 6.0引入的。它的主要目的是为了管理单个文件多个PSI树的访问。
例如,一个JSPX页面有单独的Java代码(PsiJavaFile
)的PSI树, 有单独的XML代码(XmlFile
)的PSI树和单独的作为JspFile文件的PSI树。
每个PSI树都覆盖文件的整个内容,并且在有不同语言的内容的位置包含特殊的“外部语言元素”。
一个FileViewProvider
实例对应单个VirtualFile
、单个Document
并且可以用来检索多个PsiFile
实例。
我怎样得到一个FVP?
- 虚拟文件:
PsiManager.getInstance(project).findViewProvider()
; - PSI文件:
psiFile.getViewProvider()
。
我能用它来做什么?
- 得到一个文件中所有现有语言的PSI树列表:
fileViewProvider.getLanguages()
; - 得到特定语言的PSI树:
fileViewProvider.getPsi(language)
,其中Language参数可以采用在StdLanguages类中定义的语言类型的值。例如,要得到XML的PSI树,使用fileViewProvider.getPsi(StdLanguages.XML)
; - 在文件中指定的偏移处找到特定语言的元素:
fileViewProvider.findElementAt(offset,language)
我怎样扩展FVP?
要创建一个拥有多种不同语言的文件类型,你的插件必须包含一个*IntelliJ平台 *核心可用的fileType.fileViewProviderFactory
扩展点的扩展。
这个扩展点是使用FileTypeExtensionPointbean类声明的。
访问这个扩展点需要新建一个实现FileViewProviderFactory接口的Java类并在这个类中重写createFileViewProvider
方法。
要声明fileType.fileViewProviderFactory
扩展点的扩展,在plugin.xml文件中的<extensions>
部分使用以下语法:
<extensions>
<fileType.fileViewProviderFactory filetype="%file_type%" implementationClass="%class_name%" />
</extensions>
其中%file_type%
指要创建的文件类型(例如"JFS"),%class_name%
指实现FileViewProviderFactory
接口的类名。
网友评论