dkandalov / live-plugin

IntelliJ plugin for writing IntelliJ plugins at runtime ⚡️
https://plugins.jetbrains.com/plugin/7282
Apache License 2.0
839 stars 66 forks source link

Severe performance degradation in 2024.1, 2024.2 #184

Open endorh opened 1 month ago

endorh commented 1 month ago

Hi, I've been using this plugin from time to time for a while now to build quick macros, but recently I've noticed some severe performance degradations in IDEA, and I managed to pinpoint it to LivePlugin, without any live plugins loaded.

The Activity Monitor reveals an unusually high CPU usage for what seems to be a thread from the LivePlugin plugin. Activity levels similar to those in the following snapshot are consistently observed, even after deleting all live plugins and restarting the IDE. All it takes is performing an action like Find Usages:

 %CPU  Subsystem

445,5  <Process total CPU usage>
351,6  Plugin LivePlugin: liveplugin.implementation.common
 25,6  <unidentified: JobScheduler FJ pool>
  7,7  workspaceModel.core.fileIndex.impl (in com.intellij)
  7,0  <infrastructure: AWT-Windows>
  5,4  <unidentified: UI thread>
  4,6  Plugin Grazie Lite: grazie.text (in com.intellij)
  3,9  <unidentified: DefaultDispatcher-worker->

With LivePlugin disabled, finding usages is almost instantaneous, but with it enabled, even with no live plugins, it takes easily over 15s, even when restricted to Project Files/repeating the same search multiple times in a row. It is a deal breaker for my productivity.

Platform information

I have a lot of plugins installed, but I don't think they should be a cofactor. I could try reproducing on a fresh installation if you believe it might make a difference.

Technical information ``` IntelliJ IDEA 2024.2 (Community Edition) Build #IC-242.20224.300, built on August 6, 2024 Runtime version: 21.0.3+13-b509.4 amd64 (JCEF 122.1.9) VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Toolkit: sun.awt.windows.WToolkit Windows 10.0 Jenkins Plugin 0.13.20-2023.2 Kotlin analyzer version: 2.0.20-ij242-29 GC: G1 Young Generation, G1 Concurrent GC, G1 Old Generation Memory: 4096M Cores: 12 Registry: actionSystem.playback.typecommand.delay=0 ide.tooltip.initialDelay=400 debugger.click.disable.breakpoints=true debugger.new.tool.window.layout=true run.processes.with.pty=false idea.true.smooth.scrolling.interpolation=true external.system.auto.import.disabled=true enable.compiler.reference.index.test.actions=false ide.experimental.ui=true terminal.new.ui=true pdf.viewer.enableExperimentalFeatures=true Non-Bundled Plugins: com.intellij.ideolog (242.20224.214) com.intellij.plugins.watcher (242.20224.155) idea.plugin.protoeditor (242.20224.155) PythonCore (242.20224.300) name.kropp.intellij.makefile (242.20224.155) com.jetbrains.webstorm.web-assembly-plugin (242.20224.159) com.intellij.javafx (1.0.4) com.jetbrains.plugins.ini4idea (242.20224.203) com.intellij.grazie.pro (0.3.325) DevKit (242.20224.159) com.jetbrains.edu (2024.7-2024.2-317) com.mnw.tabmover (1.5.2) lermitage.intellij.battery.status (2.4) com.ddoong2.gitautolink (0.5.0) net.seesharpsoft.intellij.plugins.csv (2.21.0) lermitage.jetbrains.darcula.sombre (1.11.0.192) de.docs_as_co.intellij.plugin.diagramsnet (0.2.6) com.layoutmanager (1.4.0) CMD Support (1.0.5) dev.j-a.swift (1.1.0.354-242) lermitage.intellij.iconviewer (1.30.0) com.khmelyuk.multirun (1.14.1) com.chesterccw.excelreader (2024.8.1-242) co.anbora.labs.pdn-viewer (1.6.0) gdscript (0.35.0) com.notime.intellijPlugin.backgroundImagePlus (1.0.3) com.mnw.stickyselection (3.1.1) com.vexus2.intellij.openingithub (1.0.6) awesome.console (0.1337.12) com.jetbrains.space (242.20224.155) com.github.b3er.idea.plugins.arc.browser (0.32) com.pandocker (0.7.3) de.cmm.side_nodes (1.2) com.github.tth05.minecraft-nbt-intellij-plugin (1.5.2) lermitage.intellij.extratci (2024.3.1) org.antlr.intellij.plugin (1.23.1) com.alexey-anufriev.scopes-manager-intellij-plugin (1.9.10) com.github.lppedd.idea-conventional-commit (0.23.1) nl.rubensten.texifyidea (0.9.7) endorh.intellij.pdf.viewer.intellij-pdf-viewer (0.16.2) GrepConsole (13.1.0-IJ2023.3) gherkin (242.20224.159) com.intellij.lang.jsgraphql (242.20224.155) ChatGPT (3.3.4-241.242) com.intellij.mermaid (0.0.22+IJ.232) CheckStyle-IDEA (5.92.0) Jenkins Control Plugin (0.13.20-2023.2) String Manipulation (9.14.1) cucumber-java (242.20224.159) com.zt.json-editor (2.9.1) org.jetbrains.idea.grammar (2022.3.2) manifold.ij (2024.1.6) com.dsoftware.ghtoolbar (2024.2.6) cz.daku.intellij.extraActions (1.2.1) Docker (242.20224.237) com.hotswap.agent.plugin (1.3.0) com.utopia-rise.godotjvmideaplugin (0.9.0-4.2.2-IJ2023.2) me.shedaniel.architectury (1.6.3) com.github.lppedd.kotlin-additional-highlighting (0.2.2) org.jetbrains.compose.desktop.ide (1.6.2) dev.turingcomplete.intellijbytecodeplugin (4.2.1) com.demonwav.minecraft-dev (2024.2-1.8.0) no.tornado.tornadofx.idea (1.7.20.1) com.kakao.git-new-tag-extended (1.2.7) mobi.hsz.idea.gitignore (4.5.3) zielu.gitworktree (1.0.6+231) com.virtuslab.git-machete (5.0.1) org.intellij.scala (2024.2.20) de.endrullis.idea.postfixtemplates (2.20.4.242) zielu.gittoolbox (500.2.13+242) com.github.copilot (1.5.17.6356) com.mallowigi.colorHighlighter (18.0.0) cn.yiiguxing.plugin.translate (3.6.4) Kotlin: 242.20224.300-IJ ```

I experience these issues in all my projects, but in case you want one to reproduce, you could clone endorh/smart-completion.

If there's any information I may provide to narrow the issue, please let me know, as I find this plugin very useful and I regret having to disable it.

dkandalov commented 1 month ago

Hi. Thank you for reporting the issue. I haven't noticed any performance recently 🤔 Could you do a thread dump or two (it's Dump Threads action) because the line in activity monitor "Plugin LivePlugin: liveplugin.implementation.common" does mean it's liveplugin but it's hard to guess which part of the code is running.

endorh commented 1 month ago

Hi, sorry for the delay. I've managed to capture a thread dump where the liveplugin.implementation.common does show up several times:

An excerpt looks like this:

"JobScheduler FJ pool 1/11" prio=0 tid=0x0 nid=0x0 runnable ``` java.lang.Thread.State: RUNNABLE at java.base@21.0.3/java.io.WinNTFileSystem.getBooleanAttributes0(Native Method) at java.base@21.0.3/java.io.WinNTFileSystem.getBooleanAttributes(WinNTFileSystem.java:479) at java.base@21.0.3/java.io.FileSystem.hasBooleanAttributes(FileSystem.java:125) at java.base@21.0.3/java.io.File.isDirectory(File.java:867) at liveplugin.implementation.common.FilePath.(file-path.kt:28) at liveplugin.implementation.common.File_pathKt.toFilePath(file-path.kt:11) at liveplugin.implementation.common.FilePath.getParent(file-path.kt:30) at liveplugin.implementation.LivePluginKt.isPluginFolder(LivePlugin.kt:37) at liveplugin.implementation.FindUsageInLivePlugin$UseScopeExtension$LivePluginsSearchScope.contains(ide-extensions.kt:114) at com.intellij.psi.search.GlobalSearchScope$UnionScope.lambda$contains$0(GlobalSearchScope.java:544) at com.intellij.psi.search.GlobalSearchScope$UnionScope$$Lambda/0x00000008027156f0.value(Unknown Source) at com.intellij.util.containers.ContainerUtil.find(ContainerUtil.java:807) at com.intellij.psi.search.GlobalSearchScope$UnionScope.contains(GlobalSearchScope.java:544) at com.intellij.psi.search.GlobalSearchScope$IntersectionScope.contains(GlobalSearchScope.java:394) at org.jetbrains.plugins.scala.finder.FilterScope.contains(ScalaFilterScope.scala:32) at com.intellij.psi.search.GlobalSearchScope$IntersectionScope.contains(GlobalSearchScope.java:394) at com.intellij.psi.search.DelegatingGlobalSearchScope.contains(DelegatingGlobalSearchScope.java:45) at com.intellij.psi.search.GlobalSearchScope$FileTypeRestrictionScope.contains(GlobalSearchScope.java:644) at com.intellij.psi.search.GlobalSearchScope$UnionScope.lambda$contains$0(GlobalSearchScope.java:544) at com.intellij.psi.search.GlobalSearchScope$UnionScope$$Lambda/0x00000008027156f0.value(Unknown Source) at com.intellij.util.containers.ContainerUtil.find(ContainerUtil.java:807) at com.intellij.psi.search.GlobalSearchScope$UnionScope.contains(GlobalSearchScope.java:544) at com.intellij.util.indexing.FileBasedIndexEx.processVirtualFiles(FileBasedIndexEx.java:583) at com.intellij.util.indexing.FileBasedIndexEx.processFilesContainingAllKeysInPhysicalFiles(FileBasedIndexEx.java:453) at com.intellij.util.indexing.FileBasedIndexEx.processFilesContainingAllKeys(FileBasedIndexEx.java:462) at com.intellij.util.indexing.FileBasedIndexImpl.processFilesContainingAllKeys(FileBasedIndexImpl.java:1186) at com.intellij.psi.impl.search.PsiSearchHelperImpl.computeQueries(PsiSearchHelperImpl.java:1261) at com.intellij.psi.impl.search.PsiSearchHelperImpl.processFilesContainingAllKeys(PsiSearchHelperImpl.java:1251) at com.intellij.psi.impl.search.PsiSearchHelperImpl.collectFiles(PsiSearchHelperImpl.java:1041) at com.intellij.psi.impl.search.PsiSearchHelperImpl.processGlobalRequests(PsiSearchHelperImpl.java:923) at com.intellij.psi.impl.search.PsiSearchHelperImpl.processGlobalRequestsOptimized(PsiSearchHelperImpl.java:904) at com.intellij.psi.impl.search.PsiSearchHelperImpl.processRequests(PsiSearchHelperImpl.java:829) at com.intellij.psi.search.SearchRequestQuery.processResults(SearchRequestQuery.java:21) at com.intellij.util.AbstractQuery.doProcessResults(AbstractQuery.java:83) at com.intellij.util.AbstractQuery.delegateProcessResults(AbstractQuery.java:100) at com.intellij.util.MergeQuery.processResults(MergeQuery.java:22) at com.intellij.util.AbstractQuery.doProcessResults(AbstractQuery.java:83) at com.intellij.util.AbstractQuery.delegateProcessResults(AbstractQuery.java:100) at com.intellij.util.UniqueResultsQuery.processResults(UniqueResultsQuery.java:37) at com.intellij.util.AbstractQuery.doProcessResults(AbstractQuery.java:83) at com.intellij.util.AbstractQuery.forEach(AbstractQuery.java:75) at com.intellij.find.findUsages.JavaFindUsagesHelper.addElementUsages(JavaFindUsagesHelper.java:474) at com.intellij.find.findUsages.JavaFindUsagesHelper.processElementUsages(JavaFindUsagesHelper.java:116) at com.intellij.codeInsight.daemon.impl.UnusedSymbolUtil.lambda$processUsages$1(UnusedSymbolUtil.java:315) at com.intellij.codeInsight.daemon.impl.UnusedSymbolUtil$$Lambda/0x0000000804bb9440.process(Unknown Source) at com.intellij.util.containers.ContainerUtil.process(ContainerUtil.java:814) at com.intellij.codeInsight.daemon.impl.UnusedSymbolUtil.processUsages(UnusedSymbolUtil.java:315) at com.intellij.codeInsight.daemon.impl.UnusedSymbolUtil.processUsages(UnusedSymbolUtil.java:246) at com.intellij.codeInspection.visibility.AccessCanBeTightenedInspection$MyVisitor.suggestLevel(AccessCanBeTightenedInspection.java:216) at com.intellij.codeInspection.visibility.AccessCanBeTightenedInspection$MyVisitor.checkMember(AccessCanBeTightenedInspection.java:101) at com.intellij.codeInspection.visibility.AccessCanBeTightenedInspection$MyVisitor.visitMethod(AccessCanBeTightenedInspection.java:84) at com.intellij.psi.impl.source.PsiMethodImpl.accept(PsiMethodImpl.java:285) at com.intellij.codeInsight.daemon.impl.InspectionRunner$InspectionProblemHolder.visitElement(InspectionRunner.java:598) at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$processContext$20(InspectionRunner.java:415) at com.intellij.codeInsight.daemon.impl.InspectionRunner$$Lambda/0x000000080284f000.accept(Unknown Source) at com.intellij.codeInsight.daemon.impl.InspectionVisitorOptimizer.acceptElements(InspectionVisitorOptimizer.java:207) at com.intellij.codeInsight.daemon.impl.InspectionRunner.processContext(InspectionRunner.java:413) at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$inspect$7(InspectionRunner.java:192) at com.intellij.codeInsight.daemon.impl.InspectionRunner$$Lambda/0x0000000802841948.run(Unknown Source) at com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.tryRunReadAction(AnyThreadWriteThreadingSupport.kt:291) at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:965) at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$executeInImpatientReadAction$17(InspectionRunner.java:394) at com.intellij.codeInsight.daemon.impl.InspectionRunner$$Lambda/0x0000000802843448.compute(Unknown Source) at com.intellij.util.AstLoadingFilter.forceAllowTreeLoading(AstLoadingFilter.java:158) at com.intellij.util.AstLoadingFilter.forceAllowTreeLoading(AstLoadingFilter.java:150) at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$executeInImpatientReadAction$18(InspectionRunner.java:385) at com.intellij.codeInsight.daemon.impl.InspectionRunner$$Lambda/0x00000008028426c8.compute(Unknown Source) at com.intellij.util.AstLoadingFilter.disallowTreeLoading(AstLoadingFilter.java:129) at com.intellij.util.AstLoadingFilter.disallowTreeLoading(AstLoadingFilter.java:118) at com.intellij.codeInsight.daemon.impl.InspectionRunner.executeInImpatientReadAction(InspectionRunner.java:385) at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$inspect$8(InspectionRunner.java:191) at com.intellij.codeInsight.daemon.impl.InspectionRunner$$Lambda/0x0000000802841238.process(Unknown Source) at com.intellij.concurrency.JobLauncherImpl$2MyProcessQueueTask.lambda$call$0(JobLauncherImpl.java:494) at com.intellij.concurrency.JobLauncherImpl$2MyProcessQueueTask$$Lambda/0x000000080238ee08.run(Unknown Source) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$13(CoreProgressManager.java:660) at com.intellij.openapi.progress.impl.CoreProgressManager$$Lambda/0x0000000801340698.compute(Unknown Source) at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:735) at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:691) at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:659) at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:79) at com.intellij.concurrency.JobLauncherImpl$2MyProcessQueueTask.call(JobLauncherImpl.java:483) at com.intellij.concurrency.JobLauncherImpl$2MyProcessQueueTask.call(JobLauncherImpl.java:471) at java.base@21.0.3/java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1602) at java.base@21.0.3/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:507) at java.base@21.0.3/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1491) at java.base@21.0.3/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:2073) at java.base@21.0.3/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:2035) at java.base@21.0.3/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:187) ```

The entry point for the plugin in these threads appears to be the liveplugin.implementation.FindUsageInLivePlugin$UseScopeExtension$LivePluginsSearchScope.contains method, which appears to get called when I perform a search for usages of a method in Project Files.

Interestingly, earlier on the stack trace the Scala plugin appears, though I don't know if that's due to how the FilterScope API works, or if it might really be another factor. I decided to capture another thread dump with the Scala plugin disabled, but it seems the same method still gets called in a similar way:

"JobScheduler FJ pool 10/11" prio=0 tid=0x0 nid=0x0 runnable ``` java.lang.Thread.State: RUNNABLE at java.base@21.0.3/java.io.WinNTFileSystem.getBooleanAttributes0(Native Method) at java.base@21.0.3/java.io.WinNTFileSystem.getBooleanAttributes(WinNTFileSystem.java:479) at java.base@21.0.3/java.io.FileSystem.hasBooleanAttributes(FileSystem.java:125) at java.base@21.0.3/java.io.File.exists(File.java:836) at liveplugin.implementation.common.FilePath.exists(file-path.kt:38) at liveplugin.implementation.LivePluginKt.isPluginFolder(LivePlugin.kt:36) at liveplugin.implementation.FindUsageInLivePlugin$UseScopeExtension$LivePluginsSearchScope.contains(ide-extensions.kt:114) at com.intellij.psi.search.GlobalSearchScope$UnionScope.lambda$contains$0(GlobalSearchScope.java:544) at com.intellij.psi.search.GlobalSearchScope$UnionScope$$Lambda/0x0000000802474000.value(Unknown Source) at com.intellij.util.containers.ContainerUtil.find(ContainerUtil.java:807) at com.intellij.psi.search.GlobalSearchScope$UnionScope.contains(GlobalSearchScope.java:544) at com.intellij.util.indexing.FileBasedIndexEx.processVirtualFiles(FileBasedIndexEx.java:583) at com.intellij.util.indexing.FileBasedIndexEx.processFilesContainingAllKeysInPhysicalFiles(FileBasedIndexEx.java:453) at com.intellij.util.indexing.FileBasedIndexEx.processFilesContainingAllKeys(FileBasedIndexEx.java:462) at com.intellij.util.indexing.FileBasedIndexImpl.processFilesContainingAllKeys(FileBasedIndexImpl.java:1186) at com.intellij.psi.impl.search.PsiSearchHelperImpl.computeQueries(PsiSearchHelperImpl.java:1261) at com.intellij.psi.impl.search.PsiSearchHelperImpl.processFilesContainingAllKeys(PsiSearchHelperImpl.java:1251) at com.intellij.psi.impl.search.PsiSearchHelperImpl.isCheapEnoughToSearch(PsiSearchHelperImpl.java:352) at com.intellij.codeInsight.daemon.impl.UnusedSymbolUtil.processUsages(UnusedSymbolUtil.java:263) at com.intellij.codeInsight.daemon.impl.UnusedSymbolUtil.processUsages(UnusedSymbolUtil.java:246) at com.intellij.codeInspection.visibility.AccessCanBeTightenedInspection$MyVisitor.suggestLevel(AccessCanBeTightenedInspection.java:216) at com.intellij.codeInspection.visibility.AccessCanBeTightenedInspection$MyVisitor.checkMember(AccessCanBeTightenedInspection.java:101) at com.intellij.codeInspection.visibility.AccessCanBeTightenedInspection$MyVisitor.visitMethod(AccessCanBeTightenedInspection.java:84) at com.intellij.psi.impl.source.PsiMethodImpl.accept(PsiMethodImpl.java:285) at com.intellij.codeInsight.daemon.impl.InspectionRunner$InspectionProblemHolder.visitElement(InspectionRunner.java:598) at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$processContext$20(InspectionRunner.java:415) at com.intellij.codeInsight.daemon.impl.InspectionRunner$$Lambda/0x00000008034718c0.accept(Unknown Source) at com.intellij.codeInsight.daemon.impl.InspectionVisitorOptimizer.acceptElements(InspectionVisitorOptimizer.java:207) at com.intellij.codeInsight.daemon.impl.InspectionRunner.processContext(InspectionRunner.java:413) at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$inspect$7(InspectionRunner.java:192) at com.intellij.codeInsight.daemon.impl.InspectionRunner$$Lambda/0x0000000803442fd0.run(Unknown Source) at com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.tryRunReadAction(AnyThreadWriteThreadingSupport.kt:291) at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:965) at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$executeInImpatientReadAction$17(InspectionRunner.java:394) at com.intellij.codeInsight.daemon.impl.InspectionRunner$$Lambda/0x0000000803470480.compute(Unknown Source) at com.intellij.util.AstLoadingFilter.forceAllowTreeLoading(AstLoadingFilter.java:158) at com.intellij.util.AstLoadingFilter.forceAllowTreeLoading(AstLoadingFilter.java:150) at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$executeInImpatientReadAction$18(InspectionRunner.java:385) at com.intellij.codeInsight.daemon.impl.InspectionRunner$$Lambda/0x0000000803443b10.compute(Unknown Source) at com.intellij.util.AstLoadingFilter.disallowTreeLoading(AstLoadingFilter.java:129) at com.intellij.util.AstLoadingFilter.disallowTreeLoading(AstLoadingFilter.java:118) at com.intellij.codeInsight.daemon.impl.InspectionRunner.executeInImpatientReadAction(InspectionRunner.java:385) at com.intellij.codeInsight.daemon.impl.InspectionRunner.lambda$inspect$8(InspectionRunner.java:191) at com.intellij.codeInsight.daemon.impl.InspectionRunner$$Lambda/0x0000000803442250.process(Unknown Source) at com.intellij.concurrency.JobLauncherImpl$2MyProcessQueueTask.lambda$call$0(JobLauncherImpl.java:494) at com.intellij.concurrency.JobLauncherImpl$2MyProcessQueueTask$$Lambda/0x0000000802371000.run(Unknown Source) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$13(CoreProgressManager.java:660) at com.intellij.openapi.progress.impl.CoreProgressManager$$Lambda/0x000000080131e2e8.compute(Unknown Source) at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:735) at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:691) at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:659) at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:79) at com.intellij.concurrency.JobLauncherImpl$2MyProcessQueueTask.call(JobLauncherImpl.java:483) at com.intellij.concurrency.JobLauncherImpl$2MyProcessQueueTask.call(JobLauncherImpl.java:471) at java.base@21.0.3/java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1602) at java.base@21.0.3/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:507) at java.base@21.0.3/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1491) at java.base@21.0.3/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:2073) at java.base@21.0.3/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:2035) at java.base@21.0.3/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:187) ```

From my limited understanding of the stack traces, I would guess that the liveplugin.implementation.LivePluginKt.isPluginFolder method is perhaps getting blocked in some IO checks that slow the whole Usage Search for some reason, but I couldn't say for sure. With my very limited knowledge of the IntelliJ API, it occurs to me that maybe these checks could be done through the VFS instead to avoid this issue, but I don't really know much to tell. Don't take me too seriously.

In any case, I hope this helps. Feel free to ask if there's anything else I can do to help narrow down the issue :)