diff --git a/plugins/devkit/intellij.devkit.gradle/src/GradlePluginConsoleFilterProvider.kt b/plugins/devkit/intellij.devkit.gradle/src/GradlePluginConsoleFilterProvider.kt index abd5d222d3d9..2df81a45e2d8 100644 --- a/plugins/devkit/intellij.devkit.gradle/src/GradlePluginConsoleFilterProvider.kt +++ b/plugins/devkit/intellij.devkit.gradle/src/GradlePluginConsoleFilterProvider.kt @@ -6,6 +6,7 @@ import com.intellij.execution.filters.Filter import com.intellij.openapi.application.ReadAction import com.intellij.openapi.project.DumbService import com.intellij.openapi.project.Project +import com.intellij.util.application import org.jetbrains.idea.devkit.util.PsiUtil import java.util.concurrent.Callable @@ -14,13 +15,22 @@ internal class GradlePluginConsoleFilterProvider : ConsoleFilterProvider { override fun getDefaultFilters(project: Project): Array { if (DumbService.isDumb(project)) return Filter.EMPTY_ARRAY - val isPluginProject = ReadAction - .nonBlocking(Callable { PsiUtil.isPluginProject(project) }) - .expireWhen { project.isDisposed } - .executeSynchronously() + val isPluginProject = runSafeReadAction(project) { + PsiUtil.isPluginProject(project) + } if (!isPluginProject) return Filter.EMPTY_ARRAY return arrayOf(PluginVerifierFilter(project)) } -} + private fun runSafeReadAction(project: Project, action: () -> T): T { + return if (application.isDispatchThread) { + ReadAction.compute(action) + } else { + ReadAction + .nonBlocking(Callable { action() }) + .expireWhen { project.isDisposed } + .executeSynchronously() + } + } +}