文件查看器
大约 1 分钟
文件查看器
文件查看器 (FileViewProvider )为单个文件管理了多个PSI树,例如:JSPX页面中JAVA代码封装成了一个PSI树(PsiJavaFile),XML代码封装成了一个PSI树(XmlFile),JSP代码封装一个PSI树(JspFile)。
提示
结构化存储的PSI元素,称之为PSI树
每个PSI树都包括文件的全部内容,在文件内容中有其它编程语言的地方,会封装相应编程语言的元素。
一个 FileViewProvider 实例对应一个 VirtualFile,一个 Document,可以检索多个 PsiFile实例(如上文,一个文件可能有多个PSI实例)。
如何获取 FileViewProvider
Context | API |
---|---|
PSI File | PsiFile.getViewProvider() |
Virtual File | PsiManager.getInstance(project).findViewProvider() |
FileViewProvider可以干啥
可以获取文件中的PSI树包含哪些编程语言:fileViewProvider.getLanguages()
获取指定编程语言的PSI树: fileViewProvider.getPsi(language) ,例如:获取文件中的XML语言的PSI树:fileViewProvider.getPsi(XMLLanguage.INSTANCE)
获取文件中指定位置,指定编程语言的PSI树:fileViewProvider.findElementAt(offset, language)
如何继承FileViewProvider
实现 FileViewProviderFactory 接口,在createFileViewProvider() 方法中返回你的 FileViewProvider
在 plugin.xml 里注册
<extensions defaultExtensionNs="com.intellij">
<!-- $FILE_TYPE$ 就是要创建的类型,例如 “JAVA” -->
<fileType.fileViewProviderFactory
filetype="$FILE_TYPE$"
implementationClass="FileViewProviderFactory 实现类"/>
</extensions>
Loading...