java.lang.LinkageError: loader constraint violation - How to debug/fix those?

Answered
I read of several similar issues, here and elsewhere, but so far I could not find any advice that I could apply on how to fix this.
All of a sudden I get this exception:
 
com.intellij.diagnostic.PluginException: Cannot create class com.strumenta.starlasu.starlasuidea.indexing.SmartModeListener (classloader=PluginClassLoader(plugin=PluginDescriptor(name=Starlasu-IDEA, id=com.strumenta.starlasu.starlasu-idea, descriptorPath=plugin.xml, path=~/repos/StarLasuIDEA/build/idea-sandbox/plugins/starlasu-idea, version=0.1.5-SNAPSHOT, package=null, isBundled=false), packagePrefix=null, instanceId=171, state=active))
at com.intellij.serviceContainer.ComponentManagerImpl.instantiateClass(ComponentManagerImpl.kt:1034)
at com.intellij.serviceContainer.ComponentManagerImpl.createListener(ComponentManagerImpl.kt:1072)
at com.intellij.util.messages.impl.CompositeMessageBus.subscribeLazyListeners$lambda$3(CompositeMessageBus.kt:117)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeNonCancelableSection$3(CoreProgressManager.java:222)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:679)
at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:635)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$computeInNonCancelableSection$4(CoreProgressManager.java:230)
at com.intellij.openapi.progress.Cancellation.computeInNonCancelableSection(Cancellation.java:99)
at com.intellij.openapi.progress.impl.CoreProgressManager.computeInNonCancelableSection(CoreProgressManager.java:230)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeNonCancelableSection(CoreProgressManager.java:221)
at com.intellij.util.messages.impl.CompositeMessageBus.subscribeLazyListeners(CompositeMessageBus.kt:111)
at com.intellij.util.messages.impl.CompositeMessageBus.doComputeSubscribers$intellij_platform_core(CompositeMessageBus.kt:92)
at com.intellij.util.messages.impl.MessageBusImpl.computeSubscribers$intellij_platform_core(MessageBusImpl.kt:210)
at com.intellij.util.messages.impl.CompositeMessageBus.computeSubscribers$intellij_platform_core(CompositeMessageBus.kt:87)
at com.intellij.util.messages.impl.MessagePublisher$publish$handlers$1.invoke(MessageBusImpl.kt:460)
at com.intellij.util.messages.impl.MessagePublisher$publish$handlers$1.invoke(MessageBusImpl.kt:460)
at com.intellij.util.messages.impl.MessagePublisher.publish$lambda$0(MessageBusImpl.kt:460)
at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708)
at com.intellij.util.messages.impl.MessagePublisher.publish$intellij_platform_core(MessageBusImpl.kt:460)
at com.intellij.util.messages.impl.MessagePublisher.invoke(MessageBusImpl.kt:451)
at jdk.proxy1/jdk.proxy1.$Proxy100.exitDumbMode(Unknown Source)
at com.intellij.openapi.project.DumbServiceImpl.updateFinished(DumbServiceImpl.java:337)
at com.intellij.openapi.project.TrackedEdtActivityService$TrackedEdtActivity.run(TrackedEdtActivityService.java:66)
at com.intellij.openapi.application.TransactionGuardImpl.runWithWritingAllowed(TransactionGuardImpl.java:209)
at com.intellij.openapi.application.TransactionGuardImpl.access$100(TransactionGuardImpl.java:21)
at com.intellij.openapi.application.TransactionGuardImpl$1.run(TransactionGuardImpl.java:191)
at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:829)
at com.intellij.openapi.application.impl.ApplicationImpl$3.run(ApplicationImpl.java:454)
at com.intellij.openapi.application.impl.FlushQueue.doRun(FlushQueue.java:79)
at com.intellij.openapi.application.impl.FlushQueue.runNextEvent(FlushQueue.java:122)
at com.intellij.openapi.application.impl.FlushQueue.flushNow(FlushQueue.java:41)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:788)
at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:739)
at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:731)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:758)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.kt:667)
at com.intellij.ide.IdeEventQueue._dispatchEvent$lambda$7(IdeEventQueue.kt:571)
at com.intellij.openapi.application.impl.ApplicationImpl.withoutImplicitRead(ApplicationImpl.java:1444)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.kt:571)
at com.intellij.ide.IdeEventQueue.access$_dispatchEvent(IdeEventQueue.kt:68)
at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1$1.compute(IdeEventQueue.kt:349)
at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1$1.compute(IdeEventQueue.kt:348)
at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:787)
at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1.invoke(IdeEventQueue.kt:348)
at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1.invoke(IdeEventQueue.kt:343)
at com.intellij.ide.IdeEventQueueKt.performActivity$lambda$1(IdeEventQueue.kt:995)
at com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:105)
at com.intellij.ide.IdeEventQueueKt.performActivity(IdeEventQueue.kt:995)
at com.intellij.ide.IdeEventQueue.dispatchEvent$lambda$4(IdeEventQueue.kt:343)
at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:829)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.kt:385)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:207)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:92)
Caused by: com.intellij.diagnostic.PluginException: Cannot load class com.intellij.openapi.project.Project (
  error: loader constraint violation: loader com.intellij.ide.plugins.cl.PluginClassLoader @5e35b073 wants to load interface com.intellij.openapi.project.Project. A different interface with the same name was previously loaded by com.intellij.util.lang.PathClassLoader @13b6d03. (com.intellij.openapi.project.Project is in unnamed module of loader com.intellij.util.lang.PathClassLoader @13b6d03),
  classLoader=PluginClassLoader(plugin=PluginDescriptor(name=Starlasu-IDEA, id=com.strumenta.starlasu.starlasu-idea, descriptorPath=plugin.xml, path=~/repos/StarLasuIDEA/build/idea-sandbox/plugins/starlasu-idea, version=0.1.5-SNAPSHOT, package=null, isBundled=false), packagePrefix=null, instanceId=171, state=active)
)
at com.intellij.ide.plugins.cl.PluginClassLoader.loadClassInsideSelf(PluginClassLoader.kt:325)
at com.intellij.ide.plugins.cl.PluginClassLoader.tryLoadingClass(PluginClassLoader.kt:172)
at com.intellij.ide.plugins.cl.PluginClassLoader.loadClass(PluginClassLoader.kt:145)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
at java.base/java.lang.Class.getDeclaredConstructors0(Native Method)
at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3373)
at java.base/java.lang.Class.getDeclaredConstructors(Class.java:2555)
at com.intellij.serviceContainer.ComponentManagerImpl.instantiateClass(ComponentManagerImpl.kt:999)
... 59 more
Caused by: java.lang.LinkageError: loader constraint violation: loader com.intellij.ide.plugins.cl.PluginClassLoader @5e35b073 wants to load interface com.intellij.openapi.project.Project. A different interface with the same name was previously loaded by com.intellij.util.lang.PathClassLoader @13b6d03. (com.intellij.openapi.project.Project is in unnamed module of loader com.intellij.util.lang.PathClassLoader @13b6d03)
at java.base/java.lang.ClassLoader.defineClass2(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1103)
at com.intellij.util.lang.UrlClassLoader.consumeClassData(UrlClassLoader.java:268)
at com.intellij.util.lang.ZipResourceFile.findClass(ZipResourceFile.java:112)
at com.intellij.util.lang.JarLoader.findClass(JarLoader.java:58)
at com.intellij.util.lang.ClassPath.findClassInLoader(ClassPath.java:233)
at com.intellij.util.lang.ClassPath.findClass(ClassPath.java:183)
at com.intellij.ide.plugins.cl.PluginClassLoader.loadClassInsideSelf(PluginClassLoader.kt:320)
... 66 more
```

I am using the intellij gradle plugin, which I configure like this:

intellij {
version.set("2023.1.4")
type.set("IC") // Target IDE Platform

plugins.set(listOf("org.jetbrains.kotlin", "org.antlr.intellij.plugin:1.20"))
}

I need the dependency on the ANTLR plugin to access to its PSI classes.

I read somewhere that this could help:

configurations {
compileClasspath {
resolutionStrategy.sortArtifacts(ResolutionStrategy.SortOrder.DEPENDENCY_FIRST)
}
testCompileClasspath {
resolutionStrategy.sortArtifacts(ResolutionStrategy.SortOrder.DEPENDENCY_FIRST)
}
}

Well, it did not in my case.

I am not sure what is causing the Project interface to be loaded twice, one by a com.intellij.util.lang.PathClassLoader and one by a com.intellij.ide.plugins.cl.PluginClassLoader

0
1 comment

That solution helps with overriding bundled IDE dependencies https://plugins.jetbrains.com/docs/intellij/plugin-class-loaders.html#overriding-ide-dependencies.
Does org.antlr.intellij.plugin:1.20 provide some additional version of com.intellij.openapi.project.Project?

0

Please sign in to leave a comment.