2025.3: "Non-cancelable slow operations are prohibited inside read action" when using PasswordSafe in a Task.WithResult

  • 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)