Notable Changes in IntelliJ Platform and Plugins API 2020.*
We've published our roadmap for the IntelliJ Platform for 2020: Part I Part II
2020.3
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 incom.intellij.html.embeddedContentSupport
extension point to embed arbitrary tokens into any tag or attribute. Please note that old API fromcom.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 incom.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 incom.intellij.readerModeProvider
extension point to apply custom settings for files rendered in reader mode. Providecom.intellij.codeInsight.actions.ReaderModeMatcher
to disable Reader Mode for particular set of files.- Text Editor customization
Implement
TextEditorCustomizer
and register incom.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.
2020.2
IntelliJ Platform 2020.2
- Constructor Injection in
Configurable
forbidden Please obtain necessary components only when needed (logged as ERROR now).
VirtualFile
lookup viaPath
Added
VirtualFileManager.findFileByNioPath()
/refreshAndFindFileByNioPath()
. See alsoVirtualFile.toNioPath()
.- Tooltip descriptions for icons
Register resource bundle via
com.intellij.iconDescriptionBundle
extension point to provide tooltips automatically for allSimpleColoredComponent
renderers.- Specify incompatibility with Module
A plugin can mark itself incompatible if IDE contains specified module.
com.intellij.openapi.editor.markup.MarkupModel
methods usingTextAttributesKey
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 incom.intellij.fileType
extension point. Issue- Add information to About dialog
Implement
AboutPopupDescriptionProvider
and register incom.intellij.aboutPopupDescriptionProvider
extension point.- Previewing Intention/Quick Fix
To support preview in intention popup, suitable
FileModifier
must be provided (default implementationFileModifier.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.
2020.1
IntelliJ Platform 2020.1
- Dynamic Plugins
Compatible plugins can be installed, updated and uninstalled without requiring IDE restart.
com.intellij.openapi.application.TransactionGuard
deprecatedUsage 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 testsPlease see
RecursionManager.CachingPreventedException
Javadoc and this issue for details.ResolveCache
usingIdempotenceChecker
in testsReports 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 customRefactoringDialog
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 returntrue
for the folder selected by the user only if it guaranteesdoOpenProject()
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 indoOpenProject()
- 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.