[//]: # (title: Incompatible Changes in IntelliJ Platform and Plugins API 2021.*) Please see [Incompatible API Changes](api_changes_list.md) on how to verify compatibility. > Changes from API marked with [`org.jetbrains.annotations.ApiStatus`](https://github.com/JetBrains/java-annotations/blob/master/common/src/main/java/org/jetbrains/annotations/ApiStatus.java) `@Experimental`, `@ScheduledForRemoval`, or `@Internal` are not listed here, as incompatible changes are to be expected. > {type="note"} > Java 11 is required ([blog post](https://blog.jetbrains.com/platform/2020/09/intellij-project-migrates-to-java-11/)) when targeting 2020.3 and later only. > > Please make sure to always upgrade `gradle-intellij-plugin` to the latest version [![GitHub Release](https://img.shields.io/github/release/jetbrains/gradle-intellij-plugin.svg?style=flat-square)](https://github.com/jetbrains/gradle-intellij-plugin/releases) > {type="note"} _Early Access Program_ (EAP) releases of upcoming versions are available [here](https://eap.jetbrains.com). ## 2021.3 ### IntelliJ Platform 2021.3 Running tests fails with `jarFiles is not set for [...]` or `Created extension classloader is not equal to plugin’s one` : Set system property `idea.force.use.core.classloader` to `true`. Running tests fails using Gradle setup : Please use [workarounds](https://youtrack.jetbrains.com/issue/IDEA-278926#focus=Comments-27-5561012.0-0). `com.intellij.ui.mac.MacMessages.showMessageDialog(String, String, String[], boolean, Window, int, int, DialogWrapper.DoNotAskOption)` method removed : Use `com.intellij.ui.mac.MacMessages.showMessageDialog(String, String, String[], boolean, Window, int, int, DoNotAskOption)` instead. `com.intellij.openapi.ui.MessageDialogBuilder.doNotAsk(DialogWrapper.DoNotAskOption)` method removed : Use `com.intellij.openapi.ui.MessageDialogBuilder.doNotAsk(DoNotAskOption)` instead. `com.intellij.ide.util.projectWizard.WizardContext.getWizard()` method removed : Use `com.intellij.ide.util.projectWizard.WizardContext.getUserData(AbstractWizard.KEY)` instead. `com.intellij.openapi.ui.TextComponentAccessor.TEXT_FIELD_WITH_HISTORY_WHOLE_TEXT` field removed : Use `com.intellij.openapi.ui.TextComponentAccessors.TEXT_FIELD_WITH_HISTORY_WHOLE_TEXT` instead. `com.intellij.execution.process.ColoredOutputTypeRegistry.getAnsiColorKey(int)` method removed : Use `com.intellij.execution.process.ColoredOutputTypeRegistryImpl.getAnsiColorKey(int)` instead. `com.intellij.diagnostic.PerformanceWatcher.Snapshot` class now interface : Recompile the dependant code or use `com.intellij.diagnostic.PerformanceWatcherImpl.SnapshotImpl` instead. `com.intellij.openapi.fileEditor.impl.EditorTabPresentationUtil.getEditorTabTitle(Project, VirtualFile, EditorWindow)` method parameter `EditorWindow` removed : This parameter was never needed, but led to code coupling. `com.intellij.openapi.fileEditor.impl.EditorTabPresentationUtil.getUniqueEditorTabTitle(Project, VirtualFile, EditorWindow)` method parameter `EditorWindow` removed : This parameter was never needed, but led to code coupling. `com.intellij.openapi.fileEditor.impl.EditorTabTitleProvider.getEditorTabTitle(Project, VirtualFile, EditorWindow)` method parameter `EditorWindow` removed : This parameter was never needed, but led to code coupling. Constructor `com.intellij.codeInsight.hints.settings.InlayProviderSettingsModel` changed : Added `Language` parameter. `com.intellij.codeInsight.hints.settings.InlayProviderSettingsModel.getDescription()` abstract method added : Provides short description. `com.intellij.codeInsight.hints.settings.InlayProviderSettingsModel.getCaseDescription(ImmediateConfigurable.Case)` abstract method added : Provides description text for given case. `com.intellij.codeInsight.hints.settings.InlayProviderSettingsModel.getCasePreview(ImmediateConfigurable.Case)` abstract method added : Provides preview text for given case. ### VCS Log 2021.3 `com.intellij.vcs.log.ui.frame.CommitPanel` class removed : Removed unnecessary inheritance. ### Git Plugin 2021.3 `git4idea.ui.branch.GitBranchActionsUtilKt.checkoutOrReset(Project, List, String, GitNewBranchOptions)` method removed : Method was dropped to avoid supporting outdated behavior. `git4idea.ui.branch.GitBranchActionsUtilKt.createNewBranch(Project, List, String, GitNewBranchOptions)` method removed : Method was dropped to avoid supporting outdated behavior. ### Python Plugin 2021.3 `com.jetbrains.python.console.PydevConsoleRunnerImpl(Project, Sdk, PyConsoleType, String, Map, PyConsoleOptions.PyConsoleSettings, Consumer, String[])` constructor parameter type `com.intellij.util.Consumer` removed : There is no need to pass a Restart action as a constructor parameter, it should be created inside the `com.jetbrains.python.console.PydevConsoleRunnerImpl#createRerunAction` method ### IntelliJ IDEA Ultimate 2021.3 #### Miscellaneous `com.intellij.util.JavaeeIcons` class renamed to `com.intellij.javaee.JavaeeIcons` : To support dynamic plugins. `icons.RestClientIcons` class renamed to `com.intellij.httpClient.RestClientIcons` : To support dynamic plugins. #### Expression Language (EL) / JSP Expression Language (EL) was extracted from `com.intellij.jsp` (_"Java Server Pages (JSP)"_) plugin to new `com.intellij.javaee.el` (_Java EE: Expression Language (EL)_) plugin. `com.intellij.jsp` has mandatory dependency on `com.intellij.javaee.el`. 10+ Ultimate plugins (Spring, Java EE, Frameworks) now have optional dependency on `com.intellij.javaee.el` plugin (mandatory dependency to `com.intellij.jsp` was removed). `com.intellij.jsp.el.impl.ELResolveUtil.VariableInfoData` class renamed to `com.intellij.jsp.el.impl.JspELResolveUtil.VariableInfoData` : To support dynamic plugins. `com.intellij.jsp.el.impl.ELResolveUtil` class renamed to `com.intellij.javaee.el.util.ELResolveUtil` : Use new class from `com.intellij.javaee.el` plugin instead or `com.intellij.jsp.el.impl.JspELResolveUtil` from `com.intellij.jsp` plugin. `com.intellij.jsp.el.impl.ELElementProcessor` class renamed to `com.intellij.javaee.el.ELElementProcessor` : Use new class from `com.intellij.javaee.el` plugin instead. `com.intellij.psi.jsp.el.ELElementTypes` class renamed to `com.intellij.javaee.el.psi.ELElementTypes` : Use new class from `com.intellij.javaee.el` plugin instead. `com.intellij.psi.jsp.el.ELLiteralExpression` class renamed to `com.intellij.javaee.el.psi.ELLiteralExpression` : Use new class from `com.intellij.javaee.el` plugin instead. `com.intellij.psi.jsp.el.ELElementType` class renamed to `com.intellij.javaee.el.psi.ELElementType` : Use new class from `com.intellij.javaee.el` plugin instead. `com.intellij.psi.jsp.el.ELExpressionHolder` class renamed to `com.intellij.javaee.el.psi.ELExpressionHolder` : Use new class from `com.intellij.javaee.el` plugin instead. `com.intellij.jsp.el.impl.ElVariablesProvider` class renamed to `com.intellij.javaee.el.providers.ElVariablesProvider` : Use new class from `com.intellij.javaee.el` plugin instead. `com.intellij.psi.jsp.el.ELVariable` class renamed to `com.intellij.javaee.el.psi.ELVariable` : Use new class from `com.intellij.javaee.el` plugin instead. `com.intellij.psi.jsp.el.ElLiteralCustomReferenceProvider` class renamed to `com.intellij.javaee.el.psi.ElLiteralCustomReferenceProvider` : Use new class from `com.intellij.javaee.el` plugin instead. `com.intellij.psi.jsp.JspImplicitVariable` class renamed to `com.intellij.javaee.el.util.ELImplicitVariable` : Use new class from `com.intellij.javaee.el` plugin instead. #### Persistence Package `com.intellij.javaee.model.xml.persistence` renamed to `com.intellij.jpa.model.xml.persistence` : To support dynamic plugins. #### Application Servers Various package renames to support dynamic plugins | Old package name | New package name | |---------------------------------------------|--------------------------------------------------------| | `com.intellij.javaee.serverInstances` | `com.intellij.javaee.appServers.serverInstances` | | `com.intellij.javaee.appServerIntegrations` | `com.intellij.javaee.appServers.appServerIntegrations` | | `com.intellij.javaee.deployment` | `com.intellij.javaee.appServers.deployment` | | `com.intellij.javaee.run` | `com.intellij.javaee.appServers.run` | `com.intellij.javaee.deployment.DeploymentModel` class renamed to `com.intellij.javaee.appServers.deployment.DeploymentModel` : To support dynamic plugins. `com.intellij.javaee.deployment.DeploymentSource` class renamed to `com.intellij.javaee.appServers.deployment.DeploymentSource` : To support dynamic plugins. `com.intellij.javaee.deployment.DeploymentProvider` class renamed to `com.intellij.javaee.appServers.deployment.DeploymentProvider` : To support dynamic plugins. `com.intellij.javaee.openapi.ex.AppServerIntegrationsManager` class renamed to `com.intellij.javaee.appServers.openapi.ex.AppServerIntegrationsManager` : To support dynamic plugins. `com.intellij.javaee.appServerIntegrations.AppServerIntegration` class renamed to `com.intellij.javaee.appServers.appServerIntegrations.AppServerIntegration` : To support dynamic plugins. `com.intellij.javaee.appServerIntegrations.ApplicationServerPersistentData` class renamed to `com.intellij.javaee.appServers.appServerIntegrations.ApplicationServerPersistentData` : To support dynamic plugins. `com.intellij.javaee.facet.JavaeeFrameworkSupportInfoCollector` class renamed to `com.intellij.javaee.appServers.facet.JavaeeFrameworkSupportInfoCollector` : To support dynamic plugins. `com.intellij.javaee.appServerIntegrations.ApplicationServer` class renamed to `com.intellij.javaee.appServers.appServerIntegrations.ApplicationServer` : To support dynamic plugins. `com.intellij.javaee.appServerIntegrations.ApplicationServerHelper` class renamed to `com.intellij.javaee.appServers.appServerIntegrations.ApplicationServerHelper` : To support dynamic plugins. `com.intellij.javaee.serverInstances.J2EEServerInstance` class renamed to `com.intellij.javaee.appServers.serverInstances.J2EEServerInstance` : To support dynamic plugins. `com.intellij.javaee.run.configuration.CommonModel` class renamed to `com.intellij.javaee.appServers.run.configuration.CommonModel` : To support dynamic plugins. `com.intellij.javaee.run.localRun.ExecutableObjectStartupPolicy` class renamed to `com.intellij.javaee.appServers.run.localRun.ExecutableObjectStartupPolicy` : To support dynamic plugins. ## 2021.2 ### IntelliJ Platform 2021.2 `com.intellij.openapi.editor.impl.event.DocumentEventImpl.translateLineViaDiff(int)` method removed : Use persistent range markers instead, see `com.intellij.openapi.editor.Document.createRangeMarker(int, int, boolean)` with `surviveOnExternalChange=true`. `com.intellij.openapi.editor.impl.event.DocumentEventImpl.translateLineViaDiffStrict(int)` method removed : Use persistent range markers instead, see `com.intellij.openapi.editor.Document.createRangeMarker(int, int, boolean)` with `surviveOnExternalChange=true`. `com.intellij.openapi.file.exclude.EnforcedPlainTextFileType` class removed : Use `com.intellij.openapi.fileTypes.PlainTextFileType` instead. `com.intellij.openapi.updateSettings.impl.CheckForUpdateResult` class removed : Use `com.intellij.openapi.updateSettings.impl.PlatformUpdates` instead. `com.intellij.openapi.updateSettings.impl.UpdateStrategy.checkForUpdates()` method return type changed from `com.intellij.openapi.updateSettings.impl.CheckForUpdateResult` to `com.intellij.openapi.updateSettings.impl.PlatformUpdates` : Use `com.intellij.openapi.updateSettings.impl.PlatformUpdates` instead of `com.intellij.openapi.updateSettings.impl.CheckForUpdateResult`. `com.intellij.openapi.updateSettings.impl.pluginsAdvertisement.PluginsAdvertiser.Plugin` class removed : Use `com.intellij.ide.plugins.advertiser.PluginData` instead. `com.intellij.ide.plugins.DisabledPluginsState.disablePlugin(PluginId)` method removed : Use either `com.intellij.ide.plugins.PluginManagerCore.disablePlugin(PluginId)` or `com.intellij.ide.plugins.PluginEnabler.disablePlugins(Collection)` instead. `com.intellij.ide.plugins.PluginManagerMain.suggestToEnableInstalledDependantPlugins(PluginEnabler, List)` method parameter type changed from `com.intellij.ide.plugins.PluginManagerMain.PluginEnabler` to `com.intellij.ide.plugins.PluginEnabler` : `com.intellij.ide.plugins.PluginManagerMain.PluginEnabler` has been renamed to `com.intellij.ide.plugins.PluginEnabler`. `com.intellij.ssh.ui.unified.SshConfigConfigurable.Visibility` class removed : Use `com.intellij.ssh.ui.unified.SshConfigVisibility` instead. `com.intellij.ssh.ui.unified.SshConfigComboBox.reload(PresentableId, SshConfigConfigurable.Visibility)` method parameter type changed from `com.intellij.ssh.ui.unified.SshConfigConfigurable.Visibility` to `com.intellij.ssh.ui.unified.SshConfigVisibility` : `SshConfigConfigurable.Visibility` has been renamed to `SshConfigVisibility`. `com.intellij.ssh.ui.unified.SshConfigComboBox(Project, Disposable, SshConfigConfigurable.Visibility)` constructor parameter type changed from `com.intellij.ssh.ui.unified.SshConfigConfigurable.Visibility` to `com.intellij.ssh.ui.unified.SshConfigVisibility` : `SshConfigConfigurable.Visibility` has been renamed to `SshConfigVisibility`. `org.jetbrains.uast.UAnnotated.getAnnotations()` method removed : Use `org.jetbrains.uast.UAnnotated.getUAnnotations()` instead. `org.jetbrains.uast.UAnnotated.getUAnnotations()` marked abstract : Previously this circularly referenced `org.jetbrains.uast.UAnnotated.getAnnotations()`, which has been removed. ### Performance Testing Plugin 2021.2 `com.jetbrains.performancePlugin.CommandProvider.getCommands()` method return type changed from `java.util.List` to `java.util.Map` : Use `java.util.List` instead of `java.util.Map`. ### Database Plugin 2021.2 `com.intellij.database.dataSource.DatabaseCredentialsAuthProvider.UserWidget` class removed : Use `com.intellij.database.dataSource.DatabaseCredentialsAuthProviderUi.UserWidget` instead. `com.intellij.database.actions.DdlActions.DeleteProvider1` class removed : Use `com.intellij.database.actions.DbDeleteProvider.getDeleteProvider()` instead. `com.intellij.database.model.RawConnectionConfig.getEffectiveUrl(Project)` method removed : Use `com.intellij.database.model.RawConnectionConfig.getUrl()` instead. Or use `com.intellij.database.dataSource.DatabaseConnectionEstablisher.processInterceptors()`. ### GitHub Plugin 2021.2 `org.jetbrains.plugins.github.util.GithubAuthData` class removed : Use `org.jetbrains.plugins.github.authentication.GithubAuthenticationManager` instead. `org.jetbrains.plugins.github.util.GithubAuthData$BasicAuth` class removed : Use `org.jetbrains.plugins.github.authentication.GithubAuthenticationManager` instead. `org.jetbrains.plugins.github.util.GithubSettings.getAuthData(GithubAuthData)` method removed : Use `org.jetbrains.plugins.github.authentication.GithubAuthenticationManager` instead. `org.jetbrains.plugins.github.util.GithubSettings.getLogin` method removed : Use `org.jetbrains.plugins.github.authentication.GithubAuthenticationManager` instead. `org.jetbrains.plugins.github.util.GithubSettings.isAuthConfigured` method removed : Use `org.jetbrains.plugins.github.authentication.GithubAuthenticationManager` instead. ### Spring Plugin 2021.2 `icons.SpringApiIcons` class moved to package `com.intellij.spring` : Use `com.intellij.spring.SpringApiIcons` instead. `icons.SpringApiIcons.Gutter` class moved to package `com.intellij.spring` : Use `com.intellij.spring.SpringApiIcons.Gutter` instead. ### Python Plugin 2021.2.1 `com.jetbrains.python.psi.types.PyTypedDictType.Companion.match(PyTypedDictType, PyDictLiteralExpression, TypeEvalContext)` method removed : As the result of the refactoring aimed at fixing [PY-48799](https://youtrack.jetbrains.com/issue/PY-48799), for dict literals containing only string keys we infer `PyTypedDictType` now, so there's no need to match dict literals with `TypedDict`s. There's a new method for comparing the inferred `TypedDict`s with the given ones: `com.jetbrains.python.psi.types.PyTypedDictType.Companion.match(PyType, PyTypedDictType, TypeEvalContext)`. ## 2021.1 ### IntelliJ Platform 2021.1 `com.intellij.util.io.PersistentHashMap.isCorrupted` method removed : The storage checks for corruption automatically, there is no need of any explicit additional checks. `com.intellij.lang.StdLanguages.JSPX` field removed : Add a dependency on the `com.intellij.jsp` plugin and replace the reference with `com.intellij.lang.jspx.JspxLanguageImpl.INSTANCE`. `com.intellij.lang.StdLanguages.JSP` field removed : Add a dependency on the `com.intellij.jsp` plugin and replace the reference with `com.intellij.lang.jsp.NewJspLanguage.getInstance()`. `com.intellij.ide.actions.searcheverywhere.SEResultsEqualityProvider.compareItems(alreadyFoundItem)` method parameter type changed from `SearchEverywhereFoundElementInfo` to `List` : New API is more abstract which allows to review all already found items before making "deduplication" decision. Also consider implementing `com.intellij.ide.actions.searcheverywhere.AbstractEqualityProvider` instead of `com.intellij.ide.actions.searcheverywhere.SEResultsEqualityProvider`. `com.intellij.ide.actions.searcheverywhere.SEResultsEqualityProvider.SEEqualElementsActionType.SKIP` field removed : Enum class `SEEqualElementsActionType` was converted to sealed class with the same name. `com.intellij.ide.actions.searcheverywhere.SEResultsEqualityProvider.SEEqualElementsActionType.DO_NOTHING` field removed : Enum class `SEEqualElementsActionType` was converted to sealed class with the same name. `com.intellij.ide.actions.searcheverywhere.SEResultsEqualityProvider.SEEqualElementsActionType.Replace` field removed : Enum class `SEEqualElementsActionType` was converted to sealed class with the same name. `org.sqlite.SQLiteConfig.setBusyTimeout(String)` method parameter type changed from `String` to `int` : Please use updated sqlite-jdbc API. `com.intellij.usages.impl.rules.UsageTypeProvider.getUsageType` method `PsiElement` parameter marked `@NotNull` : This may break source-compatibility with inheritors written in Kotlin if they declare parameter type as nullable. `com.jetbrains.performancePlugin.CommandProvider.getCommands(Project)` method parameter `Project` removed : Project is now only accessible via `com.intellij.openapi.ui.playback.PlaybackContext.getProject()` since it may change during script execution. JSON Widget suppressor EP `com.intellij.json.jsonWidgetSuppressor` : Override new method [`JsonWidgetSuppressor.isCandidateForSuppress(VirtualFile, Project)`](upsource:///json/src/com/jetbrains/jsonSchema/extension/JsonWidgetSuppressor.java) for quick check in EDT before `suppressSwitcherWidget()` is called on background thread. ### HTTP Client Plugin 2021.1 `com.intellij.ws.rest.client` package removed : Replaced by `com.intellij.httpClient.execution` in HTTP Client plugin. `com.intellij.ws.actions` package removed : Replaced by `com.intellij.httpClient.actions` in HTTP Client plugin. `com.intellij.ws.converters` package removed : Replaced by `com.intellij.httpClient.converters` in HTTP Client plugin. `com.intellij.ws.http.request` package removed : Replaced by `com.intellij.httpClient.http.request` in HTTP Client plugin. ### Java UML Plugin 2021.1 Rename of packages to `.java.` specific variants | Old package name | New package name | |----------------------------|---------------------------------| | `com.intellij.uml.utils` | `com.intellij.uml.java.utils` | | `com.intellij.uml.project` | `com.intellij.uml.java.project` | | `com.intellij.uml.jigsaw` | `com.intellij.uml.java.jigsaw` | ### Kotlin Plugin 2021.1 `org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinChangeInfo(KotlinMethodDescriptor, String, KotlinTypeInfo, Visibility, List, KotlinParameterInfo, PsiElement, Collection)` constructor parameter type changed from `org.jetbrains.kotlin.descriptors.Visibility` to `org.jetbrains.kotlin.descriptors.DescriptorVisibility` : `Visibility` has been renamed to `DescriptorVisibility`. ### Go Plugin 2021.1 `com.goide.sdk.combobox.GoSdkChooserCombo.getSdk` method moved to the superclass : Recompile the dependant code. ### CoffeeScript Plugin 2021.1 `icons.CoffeescriptIcons` class renamed to `org.coffeescript.CoffeescriptIcons` : To support dynamic plugins.