IntelliJ Platform Plugin SDK Help

Notable Changes in IntelliJ Platform and Plugins API 2020.*

We've published our roadmap for the IntelliJ Platform for 2020: Part I Part II


IntelliJ Platform 2020.3

IntelliJ Platform migrated to Java 11
Using Java 11 is now required, please see blog post.
Internal changes in Project Model
Internal changes related to a significant redesign of the representation of project models have been made, please see blog post for details. This shouldn’t affect any plugins using the IntelliJ API properly and which don’t access internal classes.
Reparsing of IReparseableLeafElementType
For elements whose IElementType implements this interface, platform attempts reparse when a modification is made right before or after the leaf element preventing reparsing the whole file.
Generating HTML fragments
Use com.intellij.openapi.util.text.HtmlBuilder for generating formatted content, e.g., for Documentation.
Extensible HTML Lexer/Parser
Implement com.intellij.html.embedding.HtmlEmbeddedContentSupport and register in com.intellij.html.embeddedContentSupport extension point to embed arbitrary tokens into any tag or attribute. Please note that old API from com.intellij.lexer.BaseHtmlLexer is no longer working.
Action System
New features in Action System: <override-text> works now for <group> as well, <synonym> provides alternative names when searching for actions, and groups can be excluded from search results.
Welcome Screen customization
To provide additional custom tabs, implement com.intellij.openapi.wm.WelcomeTabFactory and register in com.intellij.welcomeTabFactory extension point.
File Type association with the IDE
To control file type association with the IDE in the operating system, implement com.intellij.openapi.fileTypes.OSFileIdeAssociation.
Reader Mode customization
Implement com.intellij.codeInsight.actions.ReaderModeProvider and register in com.intellij.readerModeProvider extension point to apply custom settings for files rendered in reader mode. Provide com.intellij.codeInsight.actions.ReaderModeMatcher to disable Reader Mode for particular set of files.
Text Editor customization
Implement com.intellij.openapi.fileEditor.impl.text.TextEditorCustomizer and register in com.intellij.textEditorCustomizer extension point to customize created editors.

JavaScript Plugin 2020.3

Published Javascript Testframework
This allows using existing test base classes, see WebStorm Plugin Development page for details.

CLion/AppCode 2020.3

Required changes in project setup
When targeting 2020.3, please see this migration guide.


IntelliJ Platform 2020.2

Constructor Injection in Configurable forbidden
Please obtain necessary components only when needed (logged as ERROR now).
VirtualFile lookup via Path
Added VirtualFileManager.findFileByNioPath()/ refreshAndFindFileByNioPath(). See also VirtualFile.toNioPath().
Tooltip descriptions for icons
Register resource bundle via extension point com.intellij.iconDescriptionBundle to provide tooltips automatically for all SimpleColoredComponent renderers.
Specify incompatibility with Module
A plugin can mark itself incompatible if IDE contains specified module.
com.intellij.openapi.editor.markup.MarkupModel methods using TextAttributesKey
To support on-the-fly Editor color scheme switching, change calls from methods taking TextAttributes.
Support for WebP images
The platform now bundles support for images in WebP format.
FileType mapping via hashbang (#!)
Specify hashBangs attribute in com.intellij.fileType extension point. Issue
Add information to About dialog
Implement com.intellij.ide.AboutPopupDescriptionProvider and register in com.intellij.aboutInfoProvider extension point.
Previewing Intention/Quick Fix
To support preview in intention popup, suitable FileModifier must be provided (default implementation FileModifier.getFileModifierForPreview() works for most cases).
Delegate Run Anything/Terminal commands to IDE features
Switch to matching IDE feature by implementing com.intellij.terminal.TerminalShellCommandHandler (extension point com.intellij.terminal.shellCommandHandler). Blog post
Deprecating JavaFX in favor of JCEF
We recommend switching to JCEF, please see blog post for details.
ASM Library 8.0.1
Updated from 7.0.1.
Validating Lexer for editor highlighting
Lexer is wrapped using ValidatingLexerWrapper to verify it generates a continuous sequence of tokens and doesn't stall during iteration.

IntelliJ IDEA 2020.2

Unbundled plugins
Several plugins (ASP, CFML, Flash/Flex, GWT, JBoss Seam Pageflow, JBoss Seam, JBoss jBPM, OSGi, Play Framework, Resin, Seam Navigation, Tapestry, Virgo/dmServer) for no longer actively maintained technology have been unbundled. If your plugin depends on them, users will need to install them from the JetBrains Plugins Repository.


IntelliJ Platform 2020.1

Dynamic Plugins
Compatible plugins can be installed, updated and uninstalled without requiring IDE restart.
com.intellij.openapi.application.TransactionGuard deprecated
Usage is deprecated and can be replaced with com.intellij.openapi.application.Application.invokeLater() in most cases, please consult Javadoc for more details.
RecursionManager.assertOnMissedCache() enabled by default in tests
Please see RecursionManager.CachingPreventedException Javadoc and this issue for details.
ResolveCache using IdempotenceChecker in tests
Reports when the same reference resolves non-equivalent results in different threads, see IdempotenceChecker.
Refactoring dialog: builtin "Open in editor" option
Set addOpenInEditorCheckbox constructor parameter to enable it in custom RefactoringDialog implementation.
Configurable status bar widgets
Use extension point com.intellij.statusBarWidgetFactory to provide widgets that can be disabled or reordered.
JCEF Support (Experimental Feature)
Allows embedding Chromium-based browser in the IDE.
Override text presentation for actions depending on menu context
Set the <override-text> element within the <action> declaration in plugin.xml.
Changes in Project Open/Import
Import from Existing Sources has been removed from the Welcome Screen, leaving only Open or Import, which calls a different extension than the one previously used to contribute a wizard step to Import from Existing Sources (which is still available in the File menu). To support Open or Import, a plugin must provide ProjectOpenProcessor. ProjectOpenProcessor.canOpenProject() should return true for the folder selected by the user only if it guarantees doOpenProject() can handle it. If there are several matching processors, a simple choice dialog is shown. If additional manual configuration is necessary, a modal dialog can be shown in doOpenProject()- however, it is highly recommended performing all setup automatically (like Maven and Gradle plugins do).

IntelliJ IDEA 2020.1

EOL for JetBrains TFS Plugin
Please use Azure DevOps plugin instead, see blog post for more details.
Unbundled plugins
Several plugins (Cloud Foundry, Google App Engine) for no longer actively maintained technology have been unbundled. If your plugin depends on them, users will need to install them from the JetBrains Plugins Repository.
Last modified: 23 September 2021