Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Is deferred loading / waiting on project possible #197

Open
foto-andreas opened this issue Jan 16, 2025 · 2 comments
Open

Is deferred loading / waiting on project possible #197

foto-andreas opened this issue Jan 16, 2025 · 2 comments

Comments

@foto-andreas
Copy link

Hi Dmitry,

ist it possible to defer the execution or wait in the plugin for the workspace to be loaded? My plugin starts with reading a project file to get some info from it, but sometimes the API is not ready to find the file:

Caused by: java.lang.IllegalStateException: There are no files which match: '/Licence/resources/modules_9.xml'
      at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
      at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
      at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
      at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:72)
      at org.codehaus.groovy.reflection.CachedConstructor.doConstructorInvoke(CachedConstructor.java:59)
      at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrap.callConstructor(ConstructorSite.java:84)
      at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:59)
      at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:263)
      at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:277)
      at liveplugin.implementation.FileSearch.findFileByName(FileSearch.groovy:18)
      at liveplugin.implementation.FileSearch$findFileByName.call(Unknown Source)
      at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
      at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
      at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:157)
      at liveplugin.PluginUtil.findFileByName(PluginUtil.groovy:713)
      at liveplugin.PluginUtil.findFileByName(PluginUtil.groovy)
      at Plugin$virtualModulesFile$1.compute(plugin.kts:47)
      at Plugin$virtualModulesFile$1.compute(plugin.kts:23)
      at com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.runReadAction$lambda$4(AnyThreadWriteThreadingSupport.kt:260)
      at com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.runReadAction(AnyThreadWriteThreadingSupport.kt:314)
      at com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.runReadAction(AnyThreadWriteThreadingSupport.kt:260)
      at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:858)
      at com.intellij.openapi.actionSystem.ex.ActionUtil.underModalProgress$lambda$4(ActionUtil.kt:293)
      at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:857)
      at com.intellij.openapi.actionSystem.ex.ActionUtil.underModalProgress$lambda$5(ActionUtil.kt:294)
      at com.intellij.openapi.progress.impl.CoreProgressManager$1.run(CoreProgressManager.java:313)
      at com.intellij.openapi.progress.impl.CoreProgressManager.startTask(CoreProgressManager.java:491)
      at com.intellij.openapi.progress.impl.ProgressManagerImpl.startTask(ProgressManagerImpl.java:133)
      at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcessWithProgressSynchronously$10(CoreProgressManager.java:581)
      at com.intellij.openapi.progress.impl.ProgressRunner.lambda$new$0(ProgressRunner.java:85)
      at com.intellij.openapi.progress.impl.ProgressRunner.lambda$submit$4(ProgressRunner.java:249)
      at com.intellij.openapi.progress.ProgressManager.lambda$runProcess$0(ProgressManager.java:98)
      at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$1(CoreProgressManager.java:223)
      at com.intellij.platform.diagnostic.telemetry.helpers.TraceKt.use(trace.kt:45)
      at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:222)
      at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$14(CoreProgressManager.java:674)
      at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:749)
      at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:705)
      at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:673)
      at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:79)
      at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:203)
      at com.intellij.openapi.progress.ProgressManager.runProcess(ProgressManager.java:98)
      at com.intellij.openapi.progress.impl.ProgressRunner.lambda$submit$5(ProgressRunner.java:249)
      at com.intellij.openapi.progress.impl.ProgressRunner$ProgressRunnable.run(ProgressRunner.java:502)
      at com.intellij.openapi.progress.impl.ProgressRunner.lambda$launchTask$18(ProgressRunner.java:467)
      at com.intellij.util.concurrency.ChildContext$runInChildContext$1.invoke(propagation.kt:101)
      at com.intellij.util.concurrency.ChildContext$runInChildContext$1.invoke(propagation.kt:101)
      at com.intellij.util.concurrency.ChildContext.runInChildContext(propagation.kt:107)
      at com.intellij.util.concurrency.ChildContext.runInChildContext(propagation.kt:101)
      at com.intellij.openapi.progress.impl.ProgressRunner.lambda$launchTask$19(ProgressRunner.java:463)
      at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
      at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
      at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:735)
      at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:732)
      at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
      at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:732)
      at java.base/java.lang.Thread.run(Thread.java:1583)

Andreas

@dkandalov
Copy link
Owner

dkandalov commented Jan 17, 2025

Hi Andreas,

There isn't a way to delay live-plugin for the workspace to be loaded (I assume you say "workspace" meaning a "project" :)). Plugins are loaded in the postStartupActivity so I'd expect the project to be initialised.

PluginUtil.findFileByName is using com.intellij.psi.search.FilenameIndex so maybe sometimes it's not ready after the project is opened (similar to when IDE start indexing for a while after the project is open).

I haven't seen this issue, but maybe reading directly from java.io.File can help, or implementing something like com.intellij.util.indexing.diagnostic.ProjectIndexingActivityHistoryListener (https://github.com/JetBrains/intellij-community/blob/941d61bcda5d5e4f9fa8cd97b1062c43c7dcaf27/platform/lang-impl/src/com/intellij/util/indexing/diagnostic/ProjectIndexingHistory.kt#L22).

@foto-andreas
Copy link
Author

Hi Dmitry,

Thank you!

My current quickfix ist a busy wait, but I will definitely look the ProjectIndexingActivityHistoryListener.

Andreas

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants