File View Providers
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 (
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.
FileViewProvider instance corresponds to a single
VirtualFile, a single
Document, and can retrieve multiple
How do I get a FileViewProvider?
What can I do with a FileViewProvider?
To get the set of all languages for which PSI trees exist in a file:
To get the PSI tree for a particular language:
fileViewProvider.getPsi(language). For example, to get the PSI tree for XML, use
To find an element of a particular language at the specified offset in the file:
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.
FileViewProviderFactory and return your
FileViewProvider implementation from
Register as follows in plugin.xml:
$FILE_TYPE$ refers to the type of the file being created (for example, "JSF").