Verifying Plugin Compatibility
Please see Incompatible Changes in IntelliJ Platform and Plugins API for known breaking changes.
For API annotated with ApiStatus.@Internal
, see Internal API Migration for more details and replacements.
Plugin Verifier
Compatibility with newer IDEs can easily be verified for plugins hosted on the JetBrains Marketplace using the built-in Plugin Verifier.
Integration in Gradle build is available using the runPluginVerifier
task, please see Gradle IntelliJ Plugin - Plugin Verifier for details.
You can easily integrate it in Continuous Integration (CI) environments by running this task as another quality check step. Check the IntelliJ Platform Plugin Template GitHub workflow configuration file as sample.
If your plugin is hosted on GitHub and you are not using Gradle, consider using third-party GitHub Actions IntelliJ Platform Plugin Verifier or IntelliJ Plugin Verifier.
In other cases, intellij-plugin-verifier can be used standalone as well.
IDE Support
The status of an API is marked using various annotations defined in ApiStatus
, please see their Javadoc for more details. Use highlighting available via dedicated IDE inspections as noted below to prevent problems as early as possible.
Unstable API
ApiStatus.@Experimental
is considered unstable and may break or be removed.ApiStatus.@Internal
must not be used by plugins, see Internal API Migration for more details and replacements.ApiStatus.@ScheduledForRemoval
denotes API that will be removed in a future version.
Inspection: JVM languages | Unstable API Usage and JVM languages | Unstable type is used in signature
Obsolete API
API annotated with ApiStatus.@Obsolete
has been replaced with a better alternative and must not be used for new code.
Inspection: Plugin DevKit | Code | Usages of ApiStatus.@Obsolete (2023.1)
Non-Extendable API
API annotated with ApiStatus.@NonExtendable
must not be extended, implemented or overridden.
Inspection: JVM languages | Class, interface, or method should not be extended
Override-Only API
API annotated with ApiStatus.@OverrideOnly
must not be called directly by the client.
Inspection: JVM languages | Method can only be overridden
plugin.xml
Usage of Extension Points which are deprecated or annotated with ApiStatus.@Experimental
or ApiStatus.@Internal
is also highlighted in plugin.xml files.
Inspection: Plugin DevKit | Plugin descriptor | Plugin.xml validity
API Compatibility
A plugin might specify a compatibility range including releases where some API is not available. Under the hood, it uses an artifact containing generated data via ApiStatus.@AvailableSince
, which is automatically attached to the project.
NOTE: If values are not specified directly in plugin.xml (e.g., when providing values via patchPluginXml Gradle task), they must be set explicitly in the inspection's settings.
Inspection: Plugin DevKit | Code | Usage of IntelliJ API not available in older IDEs