From f7655aae1f54140279e64d3a565378653964af57 Mon Sep 17 00:00:00 2001 From: sxhya Date: Fri, 18 Oct 2024 17:27:57 +0200 Subject: [PATCH] Perform refreshAndFindFileByIoFile on a pooled thread --- .../actions/mark/ArendMarkActionUtils.kt | 49 +++++++++++++------ 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/src/main/kotlin/org/arend/actions/mark/ArendMarkActionUtils.kt b/src/main/kotlin/org/arend/actions/mark/ArendMarkActionUtils.kt index c970e4541..b0d833538 100644 --- a/src/main/kotlin/org/arend/actions/mark/ArendMarkActionUtils.kt +++ b/src/main/kotlin/org/arend/actions/mark/ArendMarkActionUtils.kt @@ -5,6 +5,7 @@ import com.intellij.ide.projectView.actions.MarkRootActionBase import com.intellij.openapi.actionSystem.AnActionEvent import com.intellij.openapi.actionSystem.CommonDataKeys import com.intellij.openapi.actionSystem.LangDataKeys +import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.invokeLater import com.intellij.openapi.application.runWriteAction import com.intellij.openapi.module.Module @@ -117,13 +118,27 @@ internal fun isNotOtherDirectionType(e: AnActionEvent): Boolean { val arendModuleConfigService = ArendModuleConfigService.getInstance(module) val localFileSystem = LocalFileSystem.getInstance() - val sourceDir = localFileSystem.refreshAndFindFileByIoFile(File(arendModuleConfigService?.root?.path + File.separator + arendModuleConfigService?.sourcesDir)) - val testDir = localFileSystem.refreshAndFindFileByIoFile(File(arendModuleConfigService?.root?.path + File.separator + arendModuleConfigService?.testsDir)) - val binariesDirectory = localFileSystem.refreshAndFindFileByIoFile(File(arendModuleConfigService?.root?.path + File.separator + arendModuleConfigService?.binariesDirectory)) - return when (dir) { - sourceDir, testDir, binariesDirectory -> false - else -> true - } + return ApplicationManager.getApplication().executeOnPooledThread { + val (sourceDir, testDir, binariesDirectory) = triple(localFileSystem, arendModuleConfigService) + + when (dir) { + sourceDir, testDir, binariesDirectory -> false + else -> true + } + }.get() +} + +private fun triple( + localFileSystem: LocalFileSystem, + arendModuleConfigService: ArendModuleConfigService? +): Triple { + val sourceDir = + localFileSystem.refreshAndFindFileByIoFile(File(arendModuleConfigService?.root?.path + File.separator + arendModuleConfigService?.sourcesDir)) + val testDir = + localFileSystem.refreshAndFindFileByIoFile(File(arendModuleConfigService?.root?.path + File.separator + arendModuleConfigService?.testsDir)) + val binariesDirectory = + localFileSystem.refreshAndFindFileByIoFile(File(arendModuleConfigService?.root?.path + File.separator + arendModuleConfigService?.binariesDirectory)) + return Triple(sourceDir, testDir, binariesDirectory) } internal fun hasSpecialDirectories(e: AnActionEvent): Boolean { @@ -132,16 +147,18 @@ internal fun hasSpecialDirectories(e: AnActionEvent): Boolean { val arendModuleConfigService = ArendModuleConfigService.getInstance(module) val localFileSystem = LocalFileSystem.getInstance() - val sourceDir = localFileSystem.refreshAndFindFileByIoFile(File(arendModuleConfigService?.root?.path + File.separator + arendModuleConfigService?.sourcesDir)) - val testDir = localFileSystem.refreshAndFindFileByIoFile(File(arendModuleConfigService?.root?.path + File.separator + arendModuleConfigService?.testsDir)) - val binariesDirectory = localFileSystem.refreshAndFindFileByIoFile(File(arendModuleConfigService?.root?.path + File.separator + arendModuleConfigService?.binariesDirectory)) - for (file in files) { - when (file) { - sourceDir, testDir, binariesDirectory -> return true - else -> continue + return ApplicationManager.getApplication().executeOnPooledThread { + val (sourceDir, testDir, binariesDirectory) = triple(localFileSystem, arendModuleConfigService) + + var result = false + for (file in files) { + when (file) { + sourceDir, testDir, binariesDirectory -> result = true + else -> continue + } } - } - return false + result + }.get() } internal fun unmarkOldDirectory(e: AnActionEvent, directoryType: DirectoryType) {