原文鏈接:
http://www.jetbrains.org/intellij/sdk/docs/basics/architectural_overview/file_view_providers.html
文件視圖提供者(查看FileViewProvider類)是在IntelliJ IDEA 6.0引入的琴昆。它的主要目的是為了管理單個(gè)文件多個(gè)PSI樹的訪問憨栽。
例如泛啸,一個(gè)JSPX頁面有單獨(dú)的Java代碼(PsiJavaFile
)的PSI樹, 有單獨(dú)的XML代碼(XmlFile
)的PSI樹和單獨(dú)的作為JspFile文件的PSI樹倘潜。
每個(gè)PSI樹都覆蓋文件的整個(gè)內(nèi)容,并且在有不同語言的內(nèi)容的位置包含特殊的“外部語言元素”派桩。
一個(gè)FileViewProvider
實(shí)例對(duì)應(yīng)單個(gè)VirtualFile
椭盏、單個(gè)Document
并且可以用來檢索多個(gè)PsiFile
實(shí)例。
我怎樣得到一個(gè)FVP峻呕?
- 虛擬文件:
PsiManager.getInstance(project).findViewProvider()
利职; - PSI文件:
psiFile.getViewProvider()
。
我能用它來做什么瘦癌?
- 得到一個(gè)文件中所有現(xiàn)有語言的PSI樹列表:
fileViewProvider.getLanguages()
猪贪; - 得到特定語言的PSI樹:
fileViewProvider.getPsi(language)
,其中Language參數(shù)可以采用在StdLanguages類中定義的語言類型的值佩憾。例如哮伟,要得到XML的PSI樹,使用fileViewProvider.getPsi(StdLanguages.XML)
妄帘; - 在文件中指定的偏移處找到特定語言的元素:
fileViewProvider.findElementAt(offset,language)
我怎樣擴(kuò)展FVP?
要?jiǎng)?chuàng)建一個(gè)擁有多種不同語言的文件類型池凄,你的插件必須包含一個(gè)*IntelliJ平臺(tái) *核心可用的fileType.fileViewProviderFactory
擴(kuò)展點(diǎn)的擴(kuò)展抡驼。
這個(gè)擴(kuò)展點(diǎn)是使用FileTypeExtensionPointbean類聲明的。
訪問這個(gè)擴(kuò)展點(diǎn)需要新建一個(gè)實(shí)現(xiàn)FileViewProviderFactory接口的Java類并在這個(gè)類中重寫createFileViewProvider
方法肿仑。
要聲明fileType.fileViewProviderFactory
擴(kuò)展點(diǎn)的擴(kuò)展致盟,在plugin.xml文件中的<extensions>
部分使用以下語法:
<extensions>
<fileType.fileViewProviderFactory filetype="%file_type%" implementationClass="%class_name%" />
</extensions>
其中%file_type%
指要?jiǎng)?chuàng)建的文件類型(例如"JFS"),%class_name%
指實(shí)現(xiàn)FileViewProviderFactory
接口的類名尤慰。