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 HtmlBuilder for generating formatted content, e.g., for Documentation.

Extensible HTML Lexer/Parser

Implement 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 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 OSFileIdeAssociation.

Reader Mode customization

Implement 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 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 com.intellij.iconDescriptionBundle extension point 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 AboutPopupDescriptionProvider and register in com.intellij.aboutPopupDescriptionProvider 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 TerminalShellCommandHandler (com.intellij.terminal.shellCommandHandler extension point). 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 Marketplace.


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 com.intellij.statusBarWidgetFactory extension point to provide widgets that can be disabled or reordered, see Status Bar Widgets.

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 chooser 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 Marketplace.

Last modified: 11 January 2023