# Incompatible Changes in IntelliJ Platform and Plugins API 2021.*

> For the complete documentation index, see [llms.txt](https://plugins.jetbrains.com/docs/intellij/llms.txt).

Please see [Verifying Plugin Compatibility](verifying-plugin-compatibility.html) on how to use Plugin Verifier and IDE inspections to check such problems.

Early Access Program (EAP) releases of upcoming versions are available [here](https://eap.jetbrains.com).

> **Note: Non-listed changes**
> Changes from API marked with `@Deprecated(forRemoval=true)` or any of [ApiStatus](https://github.com/JetBrains/java-annotations/tree/24.0.0/common/src/main/java/org/jetbrains/annotations/ApiStatus.java) `@Experimental`, `@ScheduledForRemoval`, or `@Internal` are not listed here, as incompatible changes are to be expected.
>
>
>
> For API annotated with `@ApiStatus.Internal`, see [Internal API Migration](api-internal.html) for more details and replacements.

> **Note: IDE and Java Versions**
> Java version must be set depending on the target [platform version](build-number-ranges.html#platformVersions).
>
>
>
>
> 2026.2+
> : Java 25
>
>
> 2024.2+
> : Java 21

## 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.

`com.intellij.openapi.wm.ToolWindow.getEmptyText()` method removed
: Please safe-cast and use `com.intellij.openapi.wm.ex.ToolWindowEx.getEmptyText()`.

`com.intellij.openapi.actionSystem.ex.CustomComponentAction#createCustomComponent(Presentation, String, DataContext)` method removed
: Please use `createCustomComponent(Presentation, String)`, one shall not depend on `dataContext` there.

`com.intellij.ui.EditorTextField.addNotify()` method marked final
: Please use `addSettingsProvider(EditorSettingsProvider)` to configure `Editor` as editor creation may be postponed now.

### 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<String, String>, PyConsoleOptions.PyConsoleSettings, Consumer<? super String>, String[])` constructor parameter type `com.intellij.util.Consumer<? super String>` 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.

### Database Plugin 2021.3

`com.intellij.database.model.ModelLightCopierUtils` class removed
: Internal class not to be used by 3rd party.

## 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.

`com.intellij.openapi.actionSystem.ActionPlaces.isMainMenuOrShortcut(String)` method removed
: Use `isMainMenuOrActionSearch(String)` method instead.

Add implementation for `com.intellij.openapi.fileEditor.FileEditor.getFile()`
: Implementations should return non-null `VirtualFile` instance.

### 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 the Python plugin infers `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<SearchEverywhereFoundElementInfo>`
: 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 [com.intellij.json.jsonWidgetSuppressor](https://jb.gg/ipe?extensions=com.intellij.json.jsonWidgetSuppressor) extension point
: Override new method [JsonWidgetSuppressor.isCandidateForSuppress(VirtualFile, Project)](https://github.com/JetBrains/intellij-community/tree/idea/263.7307.200/json/backend/src/com/jetbrains/jsonSchema/extension/JsonWidgetSuppressor.java) for quick check in [EDT](threading-model.html) before `suppressSwitcherWidget()` is called on a 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.

