# Incompatible Changes in IntelliJ Platform and Plugins API 2023.* List of known Breaking API Changes in 2023.* ## 2023.3 ### IntelliJ Platform 2023.3 Threading Model changes : Please see updated [](general_threading_rules.md). Removal of commons-lang2 and commons-collections libraries : _commons-lang2_ library is going to be removed, a temporary compatibility layer (marked with `@Deprecated(forRemoval = true)` to highlight usages) is bundled. Please consider migrating to either _commons-lang3_ or _commons-text_ libraries and bundle them with your plugin. Library _commons-collections_ is going to be removed. JsonPath library unbundled : Bundle it [explicitly](https://youtrack.jetbrains.com/issue/IDEA-328219) with your plugin. `com.intellij.codeInsight.intention.BaseElementAtCaretIntentionAction.isAvailable` method `Editor` parameter marked `@NotNull` : This may break source-compatibility with inheritors written in Kotlin if they declare it as nullable. `com.intellij.codeInsight.intention.BaseElementAtCaretIntentionAction.invoke` method `Editor` parameter marked `@NotNull` : This may break source-compatibility with inheritors written in Kotlin if they declare it as nullable. `com.intellij.openapi.actionSystem.ex.ActionUtil.showDumbModeWarning(Project, AnActionEvent[])` method removed : Use `showDumbModeWarning(@Nullable Project project, @NotNull AnAction action, AnActionEvent @NotNull ... events)` instead `com.intellij.profiler.eventtrace` package removed : Update code usages. ### Java Plugin 2023.3 `com.siyeh.ipp.base.Intention` class removed : As a part of migration to new experimental [`ModCommand`](%gh-ic%/platform/analysis-api/src/com/intellij/modcommand/ModCommand.java) API, the class was removed completely. It's a part of implementation module and was never intended to be inherited by external plugins. Consider implementing [`LocalInspectionTool`](%gh-ic%/platform/analysis-api/src/com/intellij/codeInspection/LocalInspectionTool.java) directly. `com.intellij.codeInsight.TailTypes` class renamed to `com.intellij.codeInsight.JavaTailTypes` : Update code usages. ### JavaScript Plugin 2023.3 `com.intellij.lang.javascript.buildTools.npm.PackageJsonUtil.createPackageJson(PsiDirectory, boolean)` method removed : Use `com.intellij.lang.javascript.buildTools.npm.PackageJsonFileTemplate.create(PsiDirectory, boolean, Consumer)` instead. ### External System Run Configuration 2023.3 Property `com.intellij.openapi.externalSystem.service.ui.command.line.CompletionTableInfo.completionInfo` replaced by suspend function `CompletionTableInfo.collectCompletionInfo` : Implement the new function to support async completion collecting. Property `com.intellij.openapi.externalSystem.service.ui.command.line.CompletionTableInfo.tableCompletionInfo` replaced by suspend function `CompletionTableInfo.collectTableCompletionInfo` : Implement the new function to support async completion collecting. Function `com.intellij.openapi.externalSystem.service.ui.completion.TextCompletionField.getCompletionVariants` replaced by property `TextCompletionField.completionCollector` : Implement the new function to support async completion collecting. `com.intellij.openapi.externalSystem.service.execution.configuration.SettingsFragmentsContainer` class renamed to `com.intellij.openapi.externalSystem.service.execution.configuration.fragments.SettingsEditorFragmentContainer` : Use new run configuration fragment builders. `com.intellij.openapi.externalSystem.service.execution.configuration.SettingsEditorLabeledComponent` class moved to package `com.intellij.openapi.externalSystem.service.execution.configuration.fragments` : Use the new run configuration fragment builders. Parameter type of fragment builder functions from `ExternalSystemRunConfigurationUtil` file changed from `C` to `(Disposable) -> C` : Use the new run configuration fragment builders. Fragment builder functions from `ExternalSystemRunConfigurationUtil` file moved to `SettingsEditorFragmentBuilders` and `ExternalSystemRunConfigurationFragmentBuilders` files : Use the new run configuration fragment builders. ### Kotlin Plugin 2023.3 `org.jetbrains.kotlin.idea.actions.JavaToKotlinAction.Companion` class renamed to `org.jetbrains.kotlin.idea.actions.JavaToKotlinAction.Handler` : In order to not load additional code eagerly on action instantiation. ### Markdown Plugin 2023.3 `org.intellij.plugins.markdown.editor.images` package removed : Use `org.intellij.plugins.markdown.images` from `intellij.markdown.images` module. `org.intellij.plugins.markdown.lang.psi.MarkdownPsiElementFactory.createHtmlBlockWithImage(Project, MarkdownImageData)` method removed : Use `org.intellij.plugins.markdown.images.editor.ImagePsiElementFactory.createHtmlBlockWithImage` instead. `org.intellij.plugins.markdown.lang.psi.MarkdownPsiElementFactory.createHtmlImageTag(Project, MarkdownImageData)` method removed : Use `org.intellij.plugins.markdown.images.editor.ImagePsiElementFactory.createHtmlImageTag` instead. `org.intellij.plugins.markdown.lang.psi.MarkdownPsiElementFactory.createImage(Project, String, String, String)` method removed : Use `org.intellij.plugins.markdown.images.editor.ImagePsiElementFactory.createImage`. `action.org.intellij.plugins.markdown.ui.actions.styling.InsertImageAction.insert.popup.text` property removed from resource bundle `messages.MarkdownBundle` : Use `org.intellij.plugins.markdown.images.MarkdownImagesBundle` instead. `markdown.configure.image.dialog.browse.image.title` property removed from resource bundle `messages.MarkdownBundle` : Use `org.intellij.plugins.markdown.images.MarkdownImagesBundle` instead. `markdown.configure.image.dialog.convert.to.html.label` property removed from resource bundle `messages.MarkdownBundle` : Use `org.intellij.plugins.markdown.images.MarkdownImagesBundle` instead. `markdown.configure.image.dialog.description.label` property removed from resource bundle `messages.MarkdownBundle` : Use `org.intellij.plugins.markdown.images.MarkdownImagesBundle` instead. `markdown.configure.image.dialog.height.label` property removed from resource bundle `messages.MarkdownBundle` : Use `org.intellij.plugins.markdown.images.MarkdownImagesBundle` instead. `markdown.configure.image.dialog.path.label` property removed from resource bundle `messages.MarkdownBundle` : Use `org.intellij.plugins.markdown.images.MarkdownImagesBundle` instead. `markdown.configure.image.dialog.screen.reader.text.panel.title` property removed from resource bundle `messages.MarkdownBundle` : Use `org.intellij.plugins.markdown.images.MarkdownImagesBundle` instead. `markdown.configure.image.dialog.title.label` property removed from resource bundle `messages.MarkdownBundle` : Use `org.intellij.plugins.markdown.images.MarkdownImagesBundle` instead. `markdown.configure.image.dialog.width.label` property removed from resource bundle `messages.MarkdownBundle` : Use `org.intellij.plugins.markdown.images.MarkdownImagesBundle` instead. `markdown.insert.image.dialog.title` property removed from resource bundle `messages.MarkdownBundle` : Use `org.intellij.plugins.markdown.images.MarkdownImagesBundle` instead. ### Python Plugin 2023.3 `org.jetbrains.plugins.notebooks.jupyter.variables` package removed : It is now part of separate _Jupyter_ plugin. ## 2023.2 ### IntelliJ Platform 2023.2 `com.intellij.openapi.actionSystem.AnActionEvent.getInputEvent()` method return type changed from `InputEvent` to `@Nullable InputEvent` : This may break source-compatibility with inheritors written in Kotlin. Specify `displayName`/`key` for `Configurable` : To improve performance, provide either attribute for `com.intellij.applicationConfigurable` or `com.intellij.projectConfigurable` extension point (see [](settings_guide.md)). `com.intellij.remote.RemoteProcess.setWindowSize(int, int)` abstract method added : Should implement this method. ### Database Plugin 2023.2 `com.intellij.database.dataSource.DataSourceStorageCore` class removed : Use `com.intellij.database.dataSource.DataSourceStorage` instead. `com.intellij.database.dataSource.DataSourceStorageUtil` class removed : Use `com.intellij.database.dataSource.DataSourceStorage` instead. `com.intellij.database.dataSource.DataSourceStorageCore$Listener` class renamed to `com.intellij.database.dataSource.DataSourceStorage$Listener` : `Core` class removed from hierarchy. `com.intellij.database.datagrid.CoreGrid(ModelIndex, ModelIndex)` method parameter type changed from `ModelIndex` to `int` : `ModelIndex` class is used to reference data in the table model. Row indexes in the table model start with 0, even when the table is scrolled to page _N>1_. Parameter type was changed to `int` to indicate that it is an absolute index in the DB table. ### Maven Plugin 2023.2 `org.jetbrains.idea.maven.server.MavenEmbedderWrapper.customizeForResolve(MavenConsole, MavenProgressIndicator)` method removed : Use `resolveProject(Collection, MavenExplicitProfiles, ProgressIndicator, MavenSyncConsole, MavenConsole, MavenWorkspaceMap, boolean)` instead. `org.jetbrains.idea.maven.server.MavenEmbedderWrapper.execute(VirtualFile, Collection, Collection, List)` method removed : Use `executeGoal(Collection, String, MavenProgressIndicator, MavenConsole)` instead. ### Apache Velocity Plugin 2023.2 `com.intellij.velocity.psi.VtlVariable.getPsiType()` method return type changed from `com.intellij.psi.PsiType` to `com.intellij.velocity.psi.VtlVariableType` : Use `com.intellij.velocity.java.reference.VtlPsiType` to wrap Java types to return result from implementations. ### JSON Path Plugin 2023.2 Moved package `com.intellij.jsonpath` : It is now part of separate _JSONPath_ plugin. [Add dependency](plugin_dependencies.md) on `com.intellij.jsonpath` to use its API. ## 2023.1 ### IntelliJ Platform 2023.1 Apache Batik library unbundled : Please bundle and use [echosvg](https://github.com/css4j/echosvg) library instead. `com.intellij.grazie.text.RuleGroup.Companion.getLITERALS() method removed` : Replaced by constant field `LITERALS`. `com.intellij.ui.treeStructure.SimpleNode.doUpdate()` method removed : It was replaced by `doUpdate(PresentationData)` which should now only modify the state of its parameter. `com.intellij.ide.ui.laf.darcula.ui.DarculaProgressBarUI.getFinishedColor()` method removed : Use `getFinishedColor(JComponent c)` overload instead. `com.intellij.openapi.externalSystem.view.ExternalSystemNode.setNameAndTooltip(String, String)` method removed : Use `setNameAndTooltip(PresentationData, String, String)` overload instead. `com.intellij.openapi.externalSystem.view.ExternalSystemNode.setNameAndTooltip(String, String, String)` method removed : Use `setNameAndTooltip(PresentationData, String, String, String)` overload instead. `com.intellij.openapi.externalSystem.view.ExternalSystemNode.setNameAndTooltip(String, String, SimpleTextAttributes)` method removed : Use `setNameAndTooltip(PresentationData, String, String, SimpleTextAttributes)` overload instead. `com.intellij.ssh.config.unified.SshConfigManager.register(boolean, String, String, String, String, AuthType, String, String, boolean, boolean, String, String)` method parameter `String` removed : Local port is the part of the tunnel configuration, not SSH settings. `com.intellij.openapi.fileEditor.impl.HTMLEditorProvider.Companion.getAFFINITY_KEY()` method removed : It was an accidentally exposed internal API. Please use `HTMLEditorProvider.openEditor()` methods, or implement your own file editor provider. `com.intellij.execution.RunnerAndConfigurationSettings.setFocusToolWindowBeforeRun(boolean)` abstract method added : The interface is not intended to be implemented in external plugins. `com.intellij.execution.RunnerAndConfigurationSettings.getFocusToolWindowBeforeRun()` abstract method added : The interface is not intended to be implemented in external plugins. ### Database Plugin 2023.1 `com.intellij.database.dataSource.url.TypeDescriptor.ParamEditor` class moved to package `com.intellij.database.dataSource.url` : The inner interface was moved to upper level. `com.intellij.database.dataSource.url.TypesRegistry.BaseTypeDescriptor` class moved to package `com.intellij.database.dataSource.url.ui` : UI extracted from `TypesRegistry` to `TypesRegistryUi`. Use `com.intellij.database.urlParamEditorProvider` extension point to register parameter descriptor, use `com.intellij.database.urlParamEditorUiProvider` extension point to register parameter editor descriptor. `com.intellij.database.datagrid.DataGrid.setAnonymousColumnName(String)` method removed : Only recompilation needed for classes that implement `DataGrid` and delegate calls to an actual `DataGrid` implementation. `com.intellij.database.datagrid.DataGrid.setResultViewAdditionalRowsCount(int)` method removed : Only recompilation needed for classes that implement `DataGrid` and delegate calls to an actual `DataGrid` implementation. `com.intellij.database.datagrid.DataGrid.setResultViewAllowMultilineColumnLabels(boolean)` method removed : Only recompilation needed for classes that implement `DataGrid` and delegate calls to an actual `DataGrid` implementation. `com.intellij.database.datagrid.DataGrid.setResultViewPaintHorizontalLines(boolean)` method removed : Only recompilation needed for classes that implement `DataGrid` and delegate calls to an actual `DataGrid` implementation. `com.intellij.database.datagrid.DataGrid.setResultViewShowRowNumbers(boolean)` method removed : Only recompilation needed for classes that implement `DataGrid` and delegate calls to an actual `DataGrid` implementation. `com.intellij.database.datagrid.DataGrid.setResultViewTransparentHeaderBackground(boolean)` method removed : Only recompilation needed for classes that implement `DataGrid` and delegate calls to an actual `DataGrid` implementation. `com.intellij.database.datagrid.DataGrid.setResultViewVisibleRowCount(int)` method removed : Only recompilation needed for classes that implement `DataGrid` and delegate calls to an actual `DataGrid` implementation. `com.intellij.database.datagrid.DataGrid.countSortedColumns()` abstract method added : Only recompilation needed for classes that implement `DataGrid` and delegate calls to an actual `DataGrid` implementation. `com.intellij.database.datagrid.DataGrid.getAppearance()` abstract method added : Only recompilation needed for classes that implement `DataGrid` and delegate calls to an actual `DataGrid` implementation. `com.intellij.database.datagrid.DataGrid.getHoveredRowBackground()` abstract method added : Only recompilation needed for classes that implement `DataGrid` and delegate calls to an actual `DataGrid` implementation. `com.intellij.database.datagrid.DataGrid.getStripeRowBackground()` abstract method added : Only recompilation needed for classes that implement `DataGrid` and delegate calls to an actual `DataGrid` implementation. `com.intellij.database.plan.ExplainPlanProvider.createRawExplainTask(LocalDataSource dataSource, boolean analyze)` abstract method added : Should implement this method. ### JavaScript Plugin 2023.1 `com.intellij.lang.javascript.JavascriptParserDefinition.createFile(FileViewProvider)` method return type changed from `com.intellij.lang.javascript.psi.JSFile` to `com.intellij.psi.PsiFile` : Required to support Astro file format. ### JavaScript Debugger Plugin 2023.1 `org.jetbrains.wip.WipVm.initDomains()` method return type changed from `void` to `org.jetbrains.concurrency.Promise<*>` : `initDomains()` is now awaitable to make WIP/CDP domains-dependent initialization logic possible. `org.jetbrains.wip.WipVm.ready()` method return type changed from `void` to `org.jetbrains.concurrency.Promise<*>` : `ready()` is now awaitable to make WIP/CDP connection-dependent initialization logic possible. ### JetBrains Gateway Plugin 2023.1 `com.jetbrains.gateway.ssh.HighLevelHostAccessor.isPathPresentOnRemote(String, FileSystemItem)` method parameter type changed from `String` to `com.jetbrains.gateway.ssh.deploy.RemotePath` : Using strings instead of paths breaks a lot of things when doing cross-platform development, and is generally not a good idea. Use `com.jetbrains.gateway.ssh.HighLevelHostAccessor.makeRemotePath` to prepare a path to pass into any of the methods requiring it. ### PHP Plugin 2023.1 `com.jetbrains.php.config.library.PhpIncludePathManager.getRoots()` method removed : This class no longer handles all paths configured in non-runtime `com.jetbrains.php.config.library.PhpLibraryRootProvider`. Paths configured in Include Path Settings are available with `PhpIncludePathManager.getIncludePaths()`. All additional paths to use as roots for resolving via `PhpIncludePathManager.getAllIncludedRoots()`.