文件查看器

走着路睡觉大约 1 分钟

文件查看器

文件查看器 (FileViewProvideropen in new window )为单个文件管理了多个PSI树,例如:JSPX页面中JAVA代码封装成了一个PSI树(PsiJavaFile),XML代码封装成了一个PSI树(XmlFile),JSP代码封装一个PSI树(JspFile)。

提示

结构化存储的PSI元素,称之为PSI树

每个PSI树都包括文件的全部内容,在文件内容中有其它编程语言的地方,会封装相应编程语言的元素。

一个 FileViewProvider 实例对应一个 VirtualFile,一个 Document,可以检索多个 PsiFile实例(如上文,一个文件可能有多个PSI实例)。

如何获取 FileViewProvider

ContextAPI
PSI FilePsiFile.getViewProvider()open in new window
Virtual FilePsiManager.getInstance(project).findViewProvider()open in new window

FileViewProvider可以干啥

  • 可以获取文件中的PSI树包含哪些编程语言:fileViewProvider.getLanguages()

  • 获取指定编程语言的PSI树: fileViewProvider.getPsi(language) ,例如:获取文件中的XML语言的PSI树:fileViewProvider.getPsi(XMLLanguage.INSTANCE)

  • 获取文件中指定位置,指定编程语言的PSI树:fileViewProvider.findElementAt(offset, language)

如何继承FileViewProvider

实现 FileViewProviderFactoryopen in new window 接口,在createFileViewProvider() 方法中返回你的 FileViewProvider

plugin.xml 里注册

<extensions defaultExtensionNs="com.intellij">
    <!--       $FILE_TYPE$ 就是要创建的类型,例如 “JAVA”   -->
    <fileType.fileViewProviderFactory
      filetype="$FILE_TYPE$"
      implementationClass="FileViewProviderFactory 实现类"/>
</extensions>
上次编辑于:
贡献者: zhaojingbo
Loading...