文件視圖提供者

原文鏈接:
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接口的類名。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容