Cannot create applicationListener in optional plugin dependency because of a ClassNotFoundException

Answered

I am using application-level Listeners (https://www.jetbrains.org/intellij/sdk/docs/basics/plugin_structure/plugin_listeners.html) to listen to VFS events in my plugin.

This works well when I define the <applicationListener> in my plugin.xml. However some listeners should only run if a specific plugin dependency is present, so I used optional plugin dependencies in my plugin.xml (https://www.jetbrains.org/intellij/sdk/docs/basics/plugin_structure/plugin_dependencies.html#optional-plugin-dependencies). When I declare a <applicationListener> in a separate file I get an exception when my plugin is loaded. Any idea what is causing this and how I can fix it?

 

Example code:

 

plugin.xml

<depends optional="true" config-file="jsp.xml">com.intellij.jsp</depends>

 

jsp.xml

<applicationListeners>
<listener class="my.JspListener" topic="com.intellij.openapi.vfs.newvfs.BulkFileListener" />
</applicationListeners>

 

When running that plugin I get the following exception:

 

com.intellij.diagnostic.PluginException: Cannot create listener my.JspListener
at com.intellij.serviceContainer.ComponentManagerImpl.createListener(ComponentManagerImpl.kt:716)
at com.intellij.util.messages.impl.MessageBusImpl.subscribeLazyListeners(MessageBusImpl.java:204)
at com.intellij.util.messages.impl.MessageBusImpl.calcSubscribers(MessageBusImpl.java:320)
at com.intellij.util.messages.impl.MessageBusImpl.getTopicSubscribers(MessageBusImpl.java:366)
at com.intellij.util.messages.impl.MessageBusImpl.postMessage(MessageBusImpl.java:344)
at com.intellij.util.messages.impl.MessageBusImpl.sendMessage(MessageBusImpl.java:396)
at com.intellij.util.messages.impl.MessageBusImpl.lambda$createTopicHandler$3(MessageBusImpl.java:237)
at com.sun.proxy.$Proxy143.before(Unknown Source)
at com.intellij.openapi.vfs.newvfs.persistent.PersistentFSImpl.processEvents(PersistentFSImpl.java:987)
at com.intellij.openapi.vfs.newvfs.AsyncEventSupport.processEvents(AsyncEventSupport.java:124)
...
Caused by: java.lang.ClassNotFoundException: my.JspListener
at com.intellij.util.lang.UrlClassLoader.findClass(UrlClassLoader.java:328)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:398)
at com.intellij.serviceContainer.ComponentManagerImpl.createListener(ComponentManagerImpl.kt:713)

I am using IntelliJ 2020.1.2 Ultimate Edition.

0
1 comment

Dominik,

Thanks for reporting.

It's a known issue tracked with IDEA-231568. It is fixed and will be released with 2020.2

0

Please sign in to leave a comment.