DynamicPluginListener doesn't detect updates correctly
Hello all,
I'm Yoni from Tabnine, we're developing a plugin for JetBrains IDEs and would appreciate your help with the following:
I want to know when the plugin is being uninstalled, but I'm getting the event on plugin updates as well - I want to distinguish between updates and uninstalls.
Some details:
SDK version: 2021.3
My Intellij details:
IntelliJ IDEA 2021.3.2 (Ultimate Edition)
Build #IU-213.6777.52, built on January 28, 2022
Licensed to Codota / Yoni Peleg
Subscription is active until August 3, 2022.
Runtime version: 11.0.13+7-b1751.25 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Linux 5.13.0-30-generic
GC: G1 Young Generation, G1 Old Generation
Memory: 2048M
Cores: 12
Registry:
ide.balloon.shadow.size=0Non-Bundled Plugins:
org.toml.lang (213.5744.224)
name.kropp.intellij.makefile (213.5744.224)
li.barlog.oceanic-primal (0.0.11)
com.tabnine.TabNine (0.5.22-alpha.20220224121954)
com.intellij.nativeDebug (213.6461.6)
org.jetbrains.kotlin (213-1.6.10-release-961-IJ6777.52)
google-java-format (1.14.0.0)
com.github.jef.forest-night (1.3.0)
org.rust.lang (0.4.165.4438-213)
intellij.prettierJS (213.6461.6)
Pythonid (213.6777.52)
ru.adelf.idea.dotenv (2022.1)
com.chrisrm.idea.MaterialThemeUI (6.13.0)Kotlin: 213-1.6.10-release-961-IJ6777.52
Current Desktop: ubuntu:GNOME
Attempts
I tried implementing `PluginStateListener`:
public class TabNinePluginStateListener implements PluginStateListener {
// ...
@Override
public void uninstall(@NotNull IdeaPluginDescriptor descriptor) {
// ...
}
}
But it seems like the `uninstall` method is being called upon plugin updates as well, and there's no way to distinguish between the 2 events.
Then, I tried `DynamicPluginListener`:
public class TabNineDynamicListener implements DynamicPluginListener {
// ...
@Override
public void beforePluginUnload(@NotNull IdeaPluginDescriptor descriptor, boolean isUpdate) {
// ...
}
}
But it appears that `isUpdate` is always false - even when I update the plugin.
To check that, I'm running a local plugin repository like described in this readme from our repo: https://github.com/codota/tabnine-intellij/blob/37db20fe8f8f242709ebec21be4885e504549c45/local-repo/README.md
I also made sure that the plugin is indeed dynamic while testing, using the `runPluginVerifier` gradle task.
If you need any more details I'll be happy to answer,
Kind regards
Please sign in to leave a comment.
Could you please clarify how exactly you "update" the plugin?
Sorry for the huge delay, I didn't get any notification and gave up refreshing this page after a week or so :(
"update" == the local plugin repository I'm running has newer version than installed, so I click the upgrade button in the `Plugins` view (just like any normal plugin update)
Could you please provide the thread dump at the moment, when `isUpdate` is false?
A screenshot of debugging session, as well ideally? Thanks
Sadly not atm, when I opened this issue I tried to play around with a mock plugin which I don't have right now.
Our plugin is not dynamic and we currently don't plan on making it dynamic anytime soon, so I think its better to focus on the `PluginStateListener` API - which is firing an uninstall event upon update as well.
When you uninstall the plugin, the code which calls the `PluginStateListener` is:
And when you update the plugin, its called from:
I've asked my colleague to investigate. Please note if by now you're targeting a different IDE version than OP.
Actually I'm targeting all IDE versions since 2019.* till latest stable release :)