mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
PY-79339, IDEA-363117: Run read action safely on EDT
GitOrigin-RevId: fcea125377b4d55281b2ec496a81a7c95140a034
This commit is contained in:
committed by
intellij-monorepo-bot
parent
fe7864ddc5
commit
302cbfb7c6
@@ -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<out Filter?> {
|
||||
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 <T> runSafeReadAction(project: Project, action: () -> T): T {
|
||||
return if (application.isDispatchThread) {
|
||||
ReadAction.compute<T, Throwable>(action)
|
||||
} else {
|
||||
ReadAction
|
||||
.nonBlocking(Callable { action() })
|
||||
.expireWhen { project.isDisposed }
|
||||
.executeSynchronously()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user