IDEA Plugin Dev - File View Providers (Multiple PSI Tree in one file)

Card Puncher Data Processing


A file view provider (see the FileViewProvider class) manage 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.

A FileViewProvider instance corresponds to:

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.



  • From a VirtualFile: PsiManager.getInstance(project).findViewProvider()
  • From a PSI file: psiFile.getViewProvider()


  • To get the list 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), where the language parameter can take values of the Language type defined in StdLanguages class. For example, to get the PSI tree for XML, use fileViewProvider.getPsi(StdLanguages.XML).
  • To find an element of a particular language at the specified offset in the file: fileViewProvider.findElementAt(offset,language)


To create a file type that has multiple interspersing trees for different languages, your plugin must contain an extension to the fileType.fileViewProviderFactory extension point available in the IntelliJ Platform core.

This extension point is declared using the FileTypeExtensionPoint bean class.

To access this extension point, create a Java class that implements the FileViewProviderFactory interface, and in this class, override the createFileViewProvider method.

To declare the extension to the fileType.fileViewProviderFactory extension point, to the

section of the plugin.xml file, add the following syntax: <fileType.fileViewProviderFactory filetype=“%file_type%” implementationClass=“%class_name%” />

Where %file_type% refers to the type of the file being created (for example, “JFS”), and the %class_name% refers to the name of your Java class that implements the FileViewProviderFactory interface. ===== Documentation / Reference ===== *

Discover More
Card Puncher Data Processing
Idea Plugin dev - PSI File (Program Structure Interface - Tree Structured Content)

A PSI (Program Structure Interface) file is the root of a structure representing the contents of a file as a hierarchy of elements in a particular programming language. It represents a hierarchy of PSI...

Share this page:
Follow us:
Task Runner