# 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.
### Database Plugin 2023.3
`com.intellij.database.datagrid.DataGrid.getName(ModelIndex)` method removed
: Only recompilation is needed for classes that implement `DataGrid` and delegate calls to an actual `DataGrid` implementation.
## 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.
`com.intellij.database.datagrid.DataGrid.getName(ModelIndex)` abstract method added
: Only recompilation is needed for classes that implement `DataGrid` and delegate calls to an actual `DataGrid` implementation.
### 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()`.