I had updated a plugin for an early build of 2026.2, which worked okay.
Now I’m updating for 2026.2 rc and it’s ugly (and I’m quite frustrated with this EAP cycle).
PluginManager was made @Internal while there are still active users and without any period of deprecation. In my experience, that’s quite unusual. And it’s causing a lot of friction.
I expect that other plugin will only notice this when their build with an open until-build is flagged to be incompatible with 2026.2…
I know about the new PluginDetailsService.
But since it’s new in 2026.2, every plugin accessing plugin metadata (even its own) must create separate build for <2026.2 and >=2026.2 now. AFAIK most plugins have just one build for all major versions.
There’s no reliable way to fetch the own PluginDescriptor. There’s PluginAwareClassloader to access it, but it does not work in unit test mode, where a different classloader is used. Making (more) assumptions about test mode in code is IMHO a code smell.
How can I fetch my own plugin’s PluginDescriptor?
Without a PluginDescriptor the following properties are not available anymore (they are not in PluginDetails):
PluginDescriptor.getReleaseVersion()PluginDescriptor.getReleaseDate()PluginDescriptor.isLicenseOptional()
Similar, IdeaPluginDescriptor.getDependencies() is not accessible anymore.
I’m using it to prevent the dynamic unload of dependencies of my plugin to work around 5 years old platform bugs https://youtrack.jetbrains.com/issue/IJPL-1892 and https://youtrack.jetbrains.com/issue/IJPL-1115.
The “fix” would probably be to move to a v2 plugin descriptor, but it’s only good with 2025.3 and I’m currently supporting earlier versions. I can’t just migrate to v2 and drop support for older IDEs in a patch release. Besides, moving to v2 is a lot of work and adds more complexity to the build.
I also used PluginDescriptor.getPluginPath() a lot. Without a PluginDescriptor, there are new methods in PluginPathManager, but because there’s no migration etc. a separate build is required to use them.
Edit: I’m also using PluginManagerCore.disablePlugin() to disable a plugin after the user confirmed it in UI. The JavaDoc just says “don’t use it”, but mentions no alternative API or a replacement. How can I disable a plugin, with or without any further interaction by the user?
If I’m missing something obvious, I’d be glad to know.
Thanks!