- Plugin written in Java, not Kotlin
- Current 2025.3 EAP
I’m using PasswordSafe in a configurable to store settings, but with 2025.3 there’s an exception now.
reset() of the configurable is invoked in a ReadAction and access PasswordSafe. But the PasswordSafe is only used in a Task.WithResult to read the password in a background thread.
With 2025.3 (tested with the current EAP), I get an exception.
This seems to happen because the ReadAction is inherited now by the code executed inside Task.WithResult.
How can I fix this if it’s not possible anymore to move things outside the ReadAction?
I need to return the password retrieved from the password safe.
Code:
if (ApplicationManager.getApplication().isDispatchThread()) {
var title = "...";
cachedSettings = ProgressManager.getInstance().run(new Task.WithResult<CachedSettings, Exception>(null, title, false) {
@Override
protected CachedSettings compute(@NotNull ProgressIndicator indicator) {
// this is invoking PasswordSafe.getInstance().getPassword(...)
return loadSettingsInBackground();
}
});
}
Stacktrace up to the ReadAction setup:
java.lang.Throwable: Non-cancelable slow operations are prohibited inside read action. See SlowOperations.assertNonCancelableSlowOperationsAreAllowed javadoc.
at com.intellij.openapi.diagnostic.Logger.error(Logger.java:375)
at com.intellij.util.SlowOperations.logError(SlowOperations.java:180)
at com.intellij.util.SlowOperations.assertNonCancelableSlowOperationsAreAllowed(SlowOperations.java:148)
at com.intellij.ide.passwordSafe.impl.BasePasswordSafe.get(PasswordSafeImpl.kt:90)
at com.intellij.credentialStore.CredentialStore.getPassword(CredentialStore.kt:17)
at appland.settings.AppMapSecureApplicationSettingsService.loadSettingsInBackground(AppMapSecureApplicationSettingsService.java:141)
at appland.settings.AppMapSecureApplicationSettingsService$1.compute(AppMapSecureApplicationSettingsService.java:123)
at appland.settings.AppMapSecureApplicationSettingsService$1.compute(AppMapSecureApplicationSettingsService.java:120)
at com.intellij.openapi.progress.Task$WithResult.run(Task.java:380)
at com.intellij.openapi.progress.impl.CoreProgressManager.startTask(CoreProgressManager.java:530)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.startTask(ProgressManagerImpl.java:180)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcessWithProgressSynchronously$10(CoreProgressManager.java:620)
at com.intellij.openapi.progress.impl.ProgressRunner.lambda$new$0(ProgressRunner.java:89)
at com.intellij.openapi.progress.impl.ProgressRunner.lambda$submit$4(ProgressRunner.java:268)
at com.intellij.openapi.progress.ProgressManager.lambda$runProcess$0(ProgressManager.java:98)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$1(CoreProgressManager.java:260)
at com.intellij.platform.diagnostic.telemetry.helpers.TraceKt.use(trace.kt:44)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:259)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$14(CoreProgressManager.java:713)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:788)
at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:744)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:712)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:75)
at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:240)
at com.intellij.openapi.progress.ProgressManager.runProcess(ProgressManager.java:98)
at com.intellij.openapi.progress.impl.ProgressRunner.lambda$submit$5(ProgressRunner.java:268)
at com.intellij.openapi.progress.impl.ProgressRunner$ProgressRunnable.run$$$capture(ProgressRunner.java:546)
at com.intellij.openapi.progress.impl.ProgressRunner$ProgressRunnable.run(ProgressRunner.java)
at --- Async.Stack.Trace --- (captured by IntelliJ IDEA debugger)
at com.intellij.openapi.progress.impl.ProgressRunner$ProgressRunnable.<init>(ProgressRunner.java:536)
at com.intellij.openapi.progress.impl.ProgressRunner.lambda$launchTask$21(ProgressRunner.java:493)
at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863)
at java.base/java.util.concurrent.CompletableFuture.uniWhenCompleteStage(CompletableFuture.java:887)
at java.base/java.util.concurrent.CompletableFuture.whenComplete(CompletableFuture.java:2357)
at com.intellij.openapi.progress.impl.ProgressRunner.launchTask(ProgressRunner.java:488)
at com.intellij.openapi.progress.impl.ProgressRunner.execFromEDT(ProgressRunner.java:324)
at com.intellij.openapi.progress.impl.ProgressRunner.submit(ProgressRunner.java:271)
at com.intellij.openapi.progress.impl.ProgressRunner.submitAndGet(ProgressRunner.java:212)
at com.intellij.openapi.application.impl.ApplicationImpl.runProcessWithProgressSynchronously(ApplicationImpl.java:529)
at com.intellij.openapi.progress.impl.CoreProgressManager.runProcessWithProgressSynchronously(CoreProgressManager.java:631)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.runProcessWithProgressSynchronously(ProgressManagerImpl.java:85)
at com.intellij.openapi.progress.impl.CoreProgressManager.run(CoreProgressManager.java:466)
at com.intellij.openapi.progress.ProgressManager.run(ProgressManager.java:307)
at appland.settings.AppMapSecureApplicationSettingsService.updateCachedData(AppMapSecureApplicationSettingsService.java:120)
at appland.settings.AppMapSecureApplicationSettingsService.getOpenAIKey(AppMapSecureApplicationSettingsService.java:87)
at appland.settings.AppMapProjectSettingsPanel.loadSettingsFrom(AppMapProjectSettingsPanel.kt:39)
at appland.settings.AppMapProjectConfigurable.reset(AppMapProjectConfigurable.java:35)
at com.intellij.openapi.options.ex.ConfigurableWrapper.reset(ConfigurableWrapper.java:217)
at com.intellij.openapi.options.ex.ConfigurableCardPanel.reset(ConfigurableCardPanel.java:194)
at com.intellij.openapi.options.ex.ConfigurableCardPanel.lambda$createConfigurableComponent$4(ConfigurableCardPanel.java:126)