* [webhelp] Fixes for TXP00152, TXP00002, test build 27 Jul 22:26 * [webhelp] Fixes for Part #4 TXP00010, EXCEPT decimal numbers in section titles * [webhelp] Fixes for Part #5 TXP00017 * [webhelp] Fixes for Part #4 TXP00010 - removed numbers from page section titles in "Custom Language Support Tutorial" and "Testing a Custom Language Plugin". * [webhelp] Removed numbers from page section titles in rest of project *.md files. * [new webhelp] Build #44 changes * [new webhelp] Maintenance merge from master * [new webhelp] Add placeholder file for webhelp import. * [webhelp] Correct redirects for file name changes * [webhelp] TOC not needed in webhelp * [format] {:toc} not needed for webhelp * add {:disable-links} to ensure demo links are not interpreted as real links. * Put all badges on the same line to simplify composition. * formatter.md: fix upsource link * fix some links * api_changes_list.md: remove note * migrate to webhelp - initial * fix GH edit URL * remove sdkdocs-template setup in VCS config * remove recently_updated.md * restore COC/CONTRIBUTING.md * api_changes_list.md: remove note * useful_links.md: IPE Co-authored-by: JohnHake <john.hake@jetbrains.com> Co-authored-by: Yann Cébron <yann.cebron@jetbrains.com>
2.3 KiB
A file view provider (FileViewProvider
) manages access to multiple PSI trees within a single file.
For example, a JSPX page has a separate PSI tree for the Java code in it (PsiJavaFile
), a separate tree for the XML code (XmlFile
), and a separate tree for JSP as a whole (JspFile
).
Each of the PSI trees covers the entire contents of the file and contains special "outer language elements" in the places where contents in a different language can be found.
A FileViewProvider
instance corresponds to a single VirtualFile
, a single Document
, and can retrieve multiple PsiFile
instances.
How do I get a FileViewProvider?
- From a
VirtualFile
:PsiManager.getInstance(project).findViewProvider()
- From a
PsiFile
:psiFile.getViewProvider()
What can I do with a FileViewProvider?
- To get the set of all languages for which PSI trees exist in a file:
fileViewProvider.getLanguages()
- To get the PSI tree for a particular language:
fileViewProvider.getPsi(language)
. For example, to get the PSI tree for XML, usefileViewProvider.getPsi(XMLLanguage.INSTANCE)
. - To find an element of a particular language at the specified offset in the file:
fileViewProvider.findElementAt(offset, language)
How do I extend the FileViewProvider?
To create a file type that has multiple interspersing trees for different languages, a plugin must contain an extension to the com.intellij.fileType.fileViewProviderFactory
extension point.
Implement FileViewProviderFactory
and return your FileViewProvider
implementation from createFileViewProvider()
method.
Register as follows in plugin.xml
:
<extensions defaultExtensionNs="com.intellij">
<fileType.fileViewProviderFactory filetype="%file_type%" implementationClass="com.plugin.MyFileViewProviderFactory" />
</extensions>
Where %file_type%
refers to the type of the file being created (for example, "JFS").