diff --git a/platform/diff-impl/src/com/intellij/diff/tools/external/ExternalDiffTool.kt b/platform/diff-impl/src/com/intellij/diff/tools/external/ExternalDiffTool.kt index 7fca450b8742..639e873d0145 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/external/ExternalDiffTool.kt +++ b/platform/diff-impl/src/com/intellij/diff/tools/external/ExternalDiffTool.kt @@ -18,17 +18,16 @@ import com.intellij.openapi.fileTypes.FileType import com.intellij.openapi.fileTypes.FileTypeManager import com.intellij.openapi.fileTypes.UnknownFileType import com.intellij.openapi.progress.ProcessCanceledException -import com.intellij.openapi.progress.ProgressIndicator import com.intellij.openapi.progress.ProgressManager -import com.intellij.openapi.progress.Task +import com.intellij.openapi.progress.coroutineToIndicator import com.intellij.openapi.project.Project import com.intellij.openapi.ui.Messages -import com.intellij.openapi.util.NlsContexts import com.intellij.openapi.util.UserDataHolderBase import com.intellij.openapi.util.registry.Registry import com.intellij.openapi.util.text.HtmlBuilder import com.intellij.openapi.util.text.HtmlChunk -import com.intellij.util.ThrowableConvertor +import com.intellij.platform.ide.progress.ModalTaskOwner +import com.intellij.platform.ide.progress.runWithModalProgressBlocking import com.intellij.util.concurrency.annotations.RequiresEdt import java.io.IOException @@ -125,12 +124,14 @@ object ExternalDiffTool { hints: DiffDialogHints, requestProducer: () -> List): Boolean { try { - val requests: List? = computeWithModalProgress( - project, - DiffBundle.message("progress.title.loading.requests") - ) { indicator -> - val requestProducers = requestProducer() - collectRequests(project, requestProducers, indicator) + val requests: List? = runWithModalProgressBlocking( + owner = if (project != null) ModalTaskOwner.project(project) else ModalTaskOwner.guess(), + title = DiffBundle.message("progress.title.loading.requests") + ) { + coroutineToIndicator { + val requestProducers = requestProducer() + collectRequests(project, requestProducers) + } } if (requests == null) return false @@ -176,8 +177,7 @@ object ExternalDiffTool { } private fun collectRequests(project: Project?, - producers: List, - indicator: ProgressIndicator): List? { + producers: List): List? { if (!wantShowExternalToolFor(producers)) return null if (!checkNotTooManyRequests(project, producers)) return null @@ -186,6 +186,7 @@ object ExternalDiffTool { val context = UserDataHolderBase() val errorRequests = mutableListOf() + val indicator = ProgressManager.getGlobalProgressIndicator() for (producer in producers) { try { requests.add(producer.process(context, indicator)) @@ -210,18 +211,6 @@ object ExternalDiffTool { return requests } - @Throws(Exception::class) - private fun computeWithModalProgress(project: Project?, - title: @NlsContexts.DialogTitle String, - computable: ThrowableConvertor): T { - return ProgressManager.getInstance().run(object : Task.WithResult(project, title, true) { - @Throws(Exception::class) - override fun compute(indicator: ProgressIndicator): T { - return computable.convert(indicator) - } - }) - } - @JvmStatic @Throws(IOException::class) fun showRequest(project: Project?,