From ad639012d0664b845d8c0ad5d72de91b23a3fda0 Mon Sep 17 00:00:00 2001 From: Uladzislau Kalesnikau Date: Wed, 25 Sep 2024 17:26:58 +0200 Subject: [PATCH] IJMP-1948 Fixed the IDE freeze issues --- .../attributes/MFRemoteAttributesServiceBase.kt | 7 ++----- .../dataops/fetch/RemoteFileFetchProviderBase.kt | 6 ++++-- .../eu/ibagroup/formainframe/utils/openapiUtils.kt | 11 ++++++++--- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/main/kotlin/eu/ibagroup/formainframe/dataops/attributes/MFRemoteAttributesServiceBase.kt b/src/main/kotlin/eu/ibagroup/formainframe/dataops/attributes/MFRemoteAttributesServiceBase.kt index 8489e33f3..ffd5c193a 100644 --- a/src/main/kotlin/eu/ibagroup/formainframe/dataops/attributes/MFRemoteAttributesServiceBase.kt +++ b/src/main/kotlin/eu/ibagroup/formainframe/dataops/attributes/MFRemoteAttributesServiceBase.kt @@ -13,7 +13,6 @@ package eu.ibagroup.formainframe.dataops.attributes import com.intellij.openapi.util.io.FileAttributes import eu.ibagroup.formainframe.config.connect.ConnectionConfigBase import eu.ibagroup.formainframe.dataops.DataOpsManager -import eu.ibagroup.formainframe.utils.runWriteActionInEdtAndWait import eu.ibagroup.formainframe.utils.sendTopic import eu.ibagroup.formainframe.vfs.MFVirtualFile import eu.ibagroup.formainframe.vfs.MFVirtualFileSystem @@ -35,7 +34,7 @@ private fun String.trimUrl(): String { * Base abstract service class to handle attributes on virtual file * @param dataOpsManager data ops manager to get component manager */ -abstract class MFRemoteAttributesServiceBase>( +abstract class MFRemoteAttributesServiceBase>( val dataOpsManager: DataOpsManager ) : AttributesService { @@ -98,9 +97,7 @@ abstract class MFRemoteAttributesServiceBase { val fetched = fetchResponse(query, progressIndicator) - return fetched.mapNotNull { - convertResponseToFile(it) + return runWriteActionInEdtAndWait { + fetched.mapNotNull { + convertResponseToFile(it) + } } } diff --git a/src/main/kotlin/eu/ibagroup/formainframe/utils/openapiUtils.kt b/src/main/kotlin/eu/ibagroup/formainframe/utils/openapiUtils.kt index 742ec3135..5d22d023d 100644 --- a/src/main/kotlin/eu/ibagroup/formainframe/utils/openapiUtils.kt +++ b/src/main/kotlin/eu/ibagroup/formainframe/utils/openapiUtils.kt @@ -11,7 +11,10 @@ package eu.ibagroup.formainframe.utils import com.intellij.openapi.Disposable -import com.intellij.openapi.application.* +import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.application.PathManager +import com.intellij.openapi.application.runInEdt +import com.intellij.openapi.application.runWriteAction import com.intellij.openapi.components.ComponentManager import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.diagnostic.logger @@ -187,10 +190,12 @@ inline fun runWriteActionInEdt(crossinline block: () -> Unit) { } } -inline fun runWriteActionInEdtAndWait(crossinline block: () -> Unit) { +inline fun runWriteActionInEdtAndWait(crossinline block: () -> T): T { + var result: T? = null runInEdtAndWait { - runWriteAction(block) + result = runWriteAction(block) } + return result ?: throw Exception("runWriteAction did not return any result") } /** Return the specified logger instance */