[threading] IJPL-190260: Remove blockingContext #4

GitOrigin-RevId: f4c7e6b93b7ffec26c0f6702baf2c691342fb516
This commit is contained in:
Konstantin Nisht
2025-06-03 17:12:13 +02:00
committed by intellij-monorepo-bot
parent f56f2f22d5
commit 2b56c468e9
15 changed files with 78 additions and 130 deletions

View File

@@ -6,7 +6,6 @@ import com.intellij.openapi.application.EDT
import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.diagnostic.logger
import com.intellij.openapi.extensions.ExtensionPointName import com.intellij.openapi.extensions.ExtensionPointName
import com.intellij.openapi.externalSystem.model.ProjectSystemId import com.intellij.openapi.externalSystem.model.ProjectSystemId
import com.intellij.openapi.progress.blockingContext
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@@ -32,10 +31,8 @@ interface ExternalSystemUnlinkedProjectAware {
suspend fun linkAndLoadProjectAsync(project: Project, externalProjectPath: String) { suspend fun linkAndLoadProjectAsync(project: Project, externalProjectPath: String) {
withContext(Dispatchers.EDT) { withContext(Dispatchers.EDT) {
blockingContext { @Suppress("DEPRECATION")
@Suppress("DEPRECATION") linkAndLoadProject(project, externalProjectPath)
linkAndLoadProject(project, externalProjectPath)
}
} }
} }

View File

@@ -14,7 +14,6 @@ import com.intellij.openapi.externalSystem.service.project.manage.ExternalProjec
import com.intellij.openapi.externalSystem.util.ExternalSystemActivityKey import com.intellij.openapi.externalSystem.util.ExternalSystemActivityKey
import com.intellij.openapi.externalSystem.util.ExternalSystemInProgressService import com.intellij.openapi.externalSystem.util.ExternalSystemInProgressService
import com.intellij.openapi.externalSystem.util.ExternalSystemUtil import com.intellij.openapi.externalSystem.util.ExternalSystemUtil
import com.intellij.openapi.progress.blockingContext
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.startup.ProjectActivity import com.intellij.openapi.startup.ProjectActivity
import com.intellij.openapi.startup.StartupActivity import com.intellij.openapi.startup.StartupActivity
@@ -29,9 +28,7 @@ internal class ExternalSystemStartupActivity : ProjectActivity {
val esProjectsManager = readAction { val esProjectsManager = readAction {
ExternalProjectsManagerImpl.getInstance(project) ExternalProjectsManagerImpl.getInstance(project)
} }
blockingContext { esProjectsManager.init()
esProjectsManager.init()
}
// do not compute in EDT // do not compute in EDT
val managers = ExternalSystemManager.EP_NAME.extensionList val managers = ExternalSystemManager.EP_NAME.extensionList
@@ -39,9 +36,7 @@ internal class ExternalSystemStartupActivity : ProjectActivity {
for (manager in managers) { for (manager in managers) {
runCatching { runCatching {
if (manager is StartupActivity) { if (manager is StartupActivity) {
blockingContext { manager.runActivity(project)
manager.runActivity(project)
}
} }
else if (manager is ProjectActivity) { else if (manager is ProjectActivity) {
manager.execute(project) manager.execute(project)
@@ -54,16 +49,12 @@ internal class ExternalSystemStartupActivity : ProjectActivity {
if (!isNewlyImportedProject && isNewlyCreatedProject) { if (!isNewlyImportedProject && isNewlyCreatedProject) {
for (manager in managers) { for (manager in managers) {
runCatching { runCatching {
blockingContext { ExternalSystemUtil.refreshProjects(ImportSpecBuilder(project, manager.systemId).createDirectoriesForEmptyContentRoots())
ExternalSystemUtil.refreshProjects(ImportSpecBuilder(project, manager.systemId).createDirectoriesForEmptyContentRoots())
}
}.getOrLogException(logger<ExternalSystemStartupActivity>()) }.getOrLogException(logger<ExternalSystemStartupActivity>())
} }
} }
blockingContext { ProjectRenameAware.beAware(project)
ProjectRenameAware.beAware(project)
}
} }
} }
} }

View File

@@ -5,7 +5,6 @@ import com.intellij.ide.actions.cache.RecoveryScope
import com.intellij.openapi.externalSystem.settings.workspaceModel.ExternalProjectsBuildClasspathEntity import com.intellij.openapi.externalSystem.settings.workspaceModel.ExternalProjectsBuildClasspathEntity
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
import com.intellij.openapi.externalSystem.util.ExternalSystemUtil import com.intellij.openapi.externalSystem.util.ExternalSystemUtil
import com.intellij.openapi.progress.blockingContext
import com.intellij.openapi.progress.blockingContextScope import com.intellij.openapi.progress.blockingContextScope
import com.intellij.openapi.util.io.NioFiles import com.intellij.openapi.util.io.NioFiles
import com.intellij.platform.backend.workspace.workspaceModel import com.intellij.platform.backend.workspace.workspaceModel
@@ -35,12 +34,10 @@ class ExternalProjectDataRecoveryContributor : ExternalSystemRecoveryContributor
} }
private suspend fun invalidateLocalExternalSystemCache(recoveryScope: RecoveryScope) { private suspend fun invalidateLocalExternalSystemCache(recoveryScope: RecoveryScope) {
blockingContext { val project = recoveryScope.project
val project = recoveryScope.project for (manager in ExternalSystemApiUtil.getAllManagers()) {
for (manager in ExternalSystemApiUtil.getAllManagers()) { val localSettings = manager.getLocalSettingsProvider().`fun`(project)
val localSettings = manager.getLocalSettingsProvider().`fun`(project) localSettings.invalidateCaches()
localSettings.invalidateCaches()
}
} }
} }
@@ -52,16 +49,14 @@ class ExternalProjectDataRecoveryContributor : ExternalSystemRecoveryContributor
} }
private suspend fun invalidateExternalSystemDataStorage(recoveryScope: RecoveryScope) { private suspend fun invalidateExternalSystemDataStorage(recoveryScope: RecoveryScope) {
blockingContext { val project = recoveryScope.project
val project = recoveryScope.project val dataStorage = ExternalProjectsDataStorage.getInstance(project)
val dataStorage = ExternalProjectsDataStorage.getInstance(project) for (manager in ExternalSystemApiUtil.getAllManagers()) {
for (manager in ExternalSystemApiUtil.getAllManagers()) { val systemId = manager.getSystemId()
val systemId = manager.getSystemId() val settings = manager.getSettingsProvider().`fun`(project)
val settings = manager.getSettingsProvider().`fun`(project) for (projectSettings in settings.linkedProjectsSettings) {
for (projectSettings in settings.linkedProjectsSettings) { val externalProjectPath = projectSettings.externalProjectPath
val externalProjectPath = projectSettings.externalProjectPath dataStorage.remove(systemId, externalProjectPath)
dataStorage.remove(systemId, externalProjectPath)
}
} }
} }
} }

View File

@@ -7,7 +7,6 @@ import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
import com.intellij.openapi.externalSystem.util.ExternalSystemBundle import com.intellij.openapi.externalSystem.util.ExternalSystemBundle
import com.intellij.openapi.externalSystem.util.ExternalSystemUiUtil import com.intellij.openapi.externalSystem.util.ExternalSystemUiUtil
import com.intellij.openapi.fileChooser.FileChooserDescriptor import com.intellij.openapi.fileChooser.FileChooserDescriptor
import com.intellij.openapi.progress.blockingContext
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.getCanonicalPath import com.intellij.openapi.ui.getCanonicalPath
@@ -27,22 +26,20 @@ class ExternalSystemWorkingDirectoryInfo(
override val emptyFieldError: String = ExternalSystemBundle.message("run.configuration.project.path.empty.error", readableName) override val emptyFieldError: String = ExternalSystemBundle.message("run.configuration.project.path.empty.error", readableName)
override suspend fun collectExternalProjects(): List<ExternalProject> { override suspend fun collectExternalProjects(): List<ExternalProject> {
return blockingContext { val externalProjects = ArrayList<ExternalProject>()
val externalProjects = ArrayList<ExternalProject>() val localSettings = ExternalSystemApiUtil.getLocalSettings<AbstractExternalSystemLocalSettings<*>>(project, externalSystemId)
val localSettings = ExternalSystemApiUtil.getLocalSettings<AbstractExternalSystemLocalSettings<*>>(project, externalSystemId) val uiAware = ExternalSystemUiUtil.getUiAware(externalSystemId)
val uiAware = ExternalSystemUiUtil.getUiAware(externalSystemId) for ((parent, children) in localSettings.availableProjects) {
for ((parent, children) in localSettings.availableProjects) { val parentPath = getCanonicalPath(parent.path)
val parentPath = getCanonicalPath(parent.path) val parentName = uiAware.getProjectRepresentationName(project, parentPath, null)
val parentName = uiAware.getProjectRepresentationName(project, parentPath, null) externalProjects.add(ExternalProject(parentName, parentPath))
externalProjects.add(ExternalProject(parentName, parentPath)) for (child in children) {
for (child in children) { val childPath = getCanonicalPath(child.path)
val childPath = getCanonicalPath(child.path) if (parentPath == childPath) continue
if (parentPath == childPath) continue val childName = uiAware.getProjectRepresentationName(project, childPath, parentPath)
val childName = uiAware.getProjectRepresentationName(project, childPath, parentPath) externalProjects.add(ExternalProject(childName, childPath))
externalProjects.add(ExternalProject(childName, childPath))
}
} }
return@blockingContext externalProjects
} }
return externalProjects
} }
} }

View File

@@ -2,7 +2,6 @@
package com.intellij.openapi.fileEditor.impl package com.intellij.openapi.fileEditor.impl
import com.intellij.openapi.extensions.ExtensionPointName import com.intellij.openapi.extensions.ExtensionPointName
import com.intellij.openapi.progress.blockingContext
import com.intellij.openapi.project.DumbAware import com.intellij.openapi.project.DumbAware
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.util.NlsContexts import com.intellij.openapi.util.NlsContexts
@@ -35,9 +34,7 @@ interface EditorTabTitleProvider : DumbAware {
// Because it is quite extensively used when tabs are restored during project opening. // Because it is quite extensively used when tabs are restored during project opening.
// While implementations may perform long-running blocking operations, that may block all the threads of the coroutine pool. // While implementations may perform long-running blocking operations, that may block all the threads of the coroutine pool.
return withContext(limitedDispatcher) { return withContext(limitedDispatcher) {
blockingContext { getEditorTabTitle(project, file)
getEditorTabTitle(project, file)
}
} }
} }

View File

@@ -3,7 +3,6 @@ package com.intellij.facet.impl.pointers
import com.intellij.facet.pointers.FacetPointersManager import com.intellij.facet.pointers.FacetPointersManager
import com.intellij.openapi.components.serviceAsync import com.intellij.openapi.components.serviceAsync
import com.intellij.openapi.progress.blockingContext
import com.intellij.openapi.project.DumbService import com.intellij.openapi.project.DumbService
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.startup.ProjectActivity import com.intellij.openapi.startup.ProjectActivity
@@ -12,10 +11,8 @@ private class FacetPointersPostStartupActivity : ProjectActivity {
override suspend fun execute(project: Project) { override suspend fun execute(project: Project) {
val manager = project.serviceAsync<FacetPointersManager>() val manager = project.serviceAsync<FacetPointersManager>()
if (manager is FacetPointersManagerImpl) { if (manager is FacetPointersManagerImpl) {
blockingContext { DumbService.getInstance(project).smartInvokeLater {
DumbService.getInstance(project).smartInvokeLater { manager.refreshPointers()
manager.refreshPointers()
}
} }
} }
} }

View File

@@ -4,13 +4,13 @@ package com.intellij.ide.environment.impl
import com.fasterxml.jackson.core.JsonFactory import com.fasterxml.jackson.core.JsonFactory
import com.fasterxml.jackson.core.util.DefaultIndenter import com.fasterxml.jackson.core.util.DefaultIndenter
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter import com.fasterxml.jackson.core.util.DefaultPrettyPrinter
import com.intellij.ide.environment.EnvironmentKey
import com.intellij.ide.environment.EnvironmentKeyProvider import com.intellij.ide.environment.EnvironmentKeyProvider
import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.EDT import com.intellij.openapi.application.EDT
import com.intellij.openapi.application.ModernApplicationStarter import com.intellij.openapi.application.ModernApplicationStarter
import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.diagnostic.logger
import com.intellij.openapi.diagnostic.thisLogger import com.intellij.openapi.diagnostic.thisLogger
import com.intellij.openapi.progress.blockingContext
import com.intellij.platform.util.ArgsParser import com.intellij.platform.util.ArgsParser
import com.intellij.util.io.createParentDirectories import com.intellij.util.io.createParentDirectories
import com.intellij.util.io.write import com.intellij.util.io.write
@@ -19,6 +19,7 @@ import kotlinx.coroutines.withContext
import java.io.ByteArrayOutputStream import java.io.ByteArrayOutputStream
import java.nio.file.FileAlreadyExistsException import java.nio.file.FileAlreadyExistsException
import java.nio.file.Path import java.nio.file.Path
import java.util.function.Supplier
import kotlin.io.path.Path import kotlin.io.path.Path
import kotlin.io.path.absolute import kotlin.io.path.absolute
import kotlin.io.path.createFile import kotlin.io.path.createFile
@@ -61,9 +62,7 @@ class EnvironmentKeyStubGenerator : ModernApplicationStarter() {
} }
private suspend fun generateKeyConfig(generateDescriptions: Boolean, configuration: EnvironmentConfiguration): ByteArray { private suspend fun generateKeyConfig(generateDescriptions: Boolean, configuration: EnvironmentConfiguration): ByteArray {
val environmentKeys = blockingContext { val environmentKeys = EnvironmentKeyProvider.EP_NAME.extensionList.flatMap { it.knownKeys.toList() }.sortedBy { it.first.id }
EnvironmentKeyProvider.EP_NAME.extensionList.flatMap { it.knownKeys.toList() }
}.sortedBy { it.first.id }
val registeredKeys = environmentKeys.mapTo(HashSet()) { it.first } val registeredKeys = environmentKeys.mapTo(HashSet()) { it.first }
val unregisteredValues = configuration.map.entries.filter { it.key !in registeredKeys } val unregisteredValues = configuration.map.entries.filter { it.key !in registeredKeys }

View File

@@ -15,7 +15,6 @@ import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx
import com.intellij.openapi.fileEditor.impl.EditorWindow import com.intellij.openapi.fileEditor.impl.EditorWindow
import com.intellij.openapi.fileEditor.impl.FileEditorOpenOptions import com.intellij.openapi.fileEditor.impl.FileEditorOpenOptions
import com.intellij.openapi.fileEditor.impl.NonProjectFileWritingAccessProvider import com.intellij.openapi.fileEditor.impl.NonProjectFileWritingAccessProvider
import com.intellij.openapi.progress.blockingContext
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.LocalFileSystem import com.intellij.openapi.vfs.LocalFileSystem
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
@@ -111,18 +110,16 @@ class FileDropManager(
} }
withContext(Dispatchers.EDT) { withContext(Dispatchers.EDT) {
blockingContext { for (vFile in vFiles) {
for (vFile in vFiles) { if (editorWindow != null && !editorWindow.isDisposed) {
if (editorWindow != null && !editorWindow.isDisposed) { val fileEditorManager = FileEditorManager.getInstance(project) as FileEditorManagerEx
val fileEditorManager = FileEditorManager.getInstance(project) as FileEditorManagerEx val pair = fileEditorManager.openFile(vFile, editorWindow, FileEditorOpenOptions(requestFocus = true))
val pair = fileEditorManager.openFile(vFile, editorWindow, FileEditorOpenOptions(requestFocus = true)) if (pair.allEditors.isNotEmpty()) {
if (pair.allEditors.isNotEmpty()) { continue
continue
}
} }
PsiNavigationSupport.getInstance().createNavigatable(project, vFile, -1).navigate(true)
} }
PsiNavigationSupport.getInstance().createNavigatable(project, vFile, -1).navigate(true)
} }
} }
} }
@@ -135,11 +132,9 @@ private class CustomFileDropHandlerBridge : FileDropHandler {
if (extensions.isEmpty()) return false if (extensions.isEmpty()) return false
return withContext(Dispatchers.EDT) { return withContext(Dispatchers.EDT) {
blockingContext { extensions.any {
extensions.any { it.canHandle(e.transferable, e.editor)
it.canHandle(e.transferable, e.editor) && it.handleDrop(e.transferable, e.editor, e.project)
&& it.handleDrop(e.transferable, e.editor, e.project)
}
} }
} }
} }

View File

@@ -8,7 +8,6 @@ import com.intellij.openapi.components.serviceAsync
import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.diagnostic.logger
import com.intellij.openapi.fileTypes.FileTypeManager import com.intellij.openapi.fileTypes.FileTypeManager
import com.intellij.openapi.fileTypes.INativeFileType import com.intellij.openapi.fileTypes.INativeFileType
import com.intellij.openapi.progress.blockingContext
import com.intellij.pom.Navigatable import com.intellij.pom.Navigatable
import com.intellij.util.concurrency.annotations.RequiresEdt import com.intellij.util.concurrency.annotations.RequiresEdt
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@@ -89,9 +88,7 @@ class FileNavigatorImpl : FileNavigator {
} }
withContext(Dispatchers.EDT) { withContext(Dispatchers.EDT) {
blockingContext { OpenFileDescriptor.navigateInEditor(descriptor, e)
OpenFileDescriptor.navigateInEditor(descriptor, e)
}
} }
return true return true
} }

View File

@@ -26,7 +26,6 @@ import com.intellij.openapi.fileEditor.impl.HistoryEntry.Companion.FILE_ATTRIBUT
import com.intellij.openapi.fileEditor.impl.HistoryEntry.Companion.TAG import com.intellij.openapi.fileEditor.impl.HistoryEntry.Companion.TAG
import com.intellij.openapi.fileEditor.impl.text.AsyncEditorLoader import com.intellij.openapi.fileEditor.impl.text.AsyncEditorLoader
import com.intellij.openapi.fileEditor.impl.text.TextEditorImpl import com.intellij.openapi.fileEditor.impl.text.TextEditorImpl
import com.intellij.openapi.progress.blockingContext
import com.intellij.openapi.project.DumbService import com.intellij.openapi.project.DumbService
import com.intellij.openapi.project.PossiblyDumbAware import com.intellij.openapi.project.PossiblyDumbAware
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
@@ -220,12 +219,10 @@ open class EditorComposite internal constructor(
val (goodPublisher, deprecatedPublisher) = deferredPublishers.await() val (goodPublisher, deprecatedPublisher) = deferredPublishers.await()
span("file opening in EDT and repaint", Dispatchers.ui(UiDispatcherKind.RELAX)) { span("file opening in EDT and repaint", Dispatchers.ui(UiDispatcherKind.RELAX)) {
span("beforeFileOpened event executing") { span("beforeFileOpened event executing") {
blockingContext { computeOrLogException(
computeOrLogException( lambda = { beforePublisher!!.beforeFileOpened(fileEditorManager, file) },
lambda = { beforePublisher!!.beforeFileOpened(fileEditorManager, file) }, errorMessage = { "exception during beforeFileOpened notification" },
errorMessage = { "exception during beforeFileOpened notification" }, )
)
}
} }
applyFileEditorsInEdt( applyFileEditorsInEdt(

View File

@@ -32,7 +32,6 @@ import com.intellij.openapi.fileEditor.impl.text.FileEditorDropHandler
import com.intellij.openapi.keymap.Keymap import com.intellij.openapi.keymap.Keymap
import com.intellij.openapi.keymap.KeymapManagerListener import com.intellij.openapi.keymap.KeymapManagerListener
import com.intellij.openapi.keymap.KeymapUtil import com.intellij.openapi.keymap.KeymapUtil
import com.intellij.openapi.progress.blockingContext
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.project.ProjectLocator import com.intellij.openapi.project.ProjectLocator
import com.intellij.openapi.ui.Divider import com.intellij.openapi.ui.Divider
@@ -1090,19 +1089,17 @@ private fun computeFileEntry(
val fileProviderDeferred = compositeCoroutineScope.async(start = if (fileEntry.currentInTab) CoroutineStart.DEFAULT else CoroutineStart.LAZY) { val fileProviderDeferred = compositeCoroutineScope.async(start = if (fileEntry.currentInTab) CoroutineStart.DEFAULT else CoroutineStart.LAZY) {
// https://youtrack.jetbrains.com/issue/IJPL-157845/Incorrect-encoding-of-file-during-project-opening // https://youtrack.jetbrains.com/issue/IJPL-157845/Incorrect-encoding-of-file-during-project-opening
if (notFullyPreparedFile !is VirtualFileWithoutContent && !notFullyPreparedFile.isCharsetSet) { if (notFullyPreparedFile !is VirtualFileWithoutContent && !notFullyPreparedFile.isCharsetSet) {
blockingContext { ProjectLocator.withPreferredProject(notFullyPreparedFile, fileEditorManager.project).use {
ProjectLocator.withPreferredProject(notFullyPreparedFile, fileEditorManager.project).use { try {
try { notFullyPreparedFile.contentsToByteArray(true)
notFullyPreparedFile.contentsToByteArray(true) }
} catch (e: CancellationException) {
catch (e: CancellationException) { throw e
throw e }
} catch (ignore: FileTooBigException) {
catch (ignore: FileTooBigException) { }
} catch (e: Throwable) {
catch (e: Throwable) { LOG.error(e)
LOG.error(e)
}
} }
} }
} }

View File

@@ -19,7 +19,6 @@ import com.intellij.openapi.fileEditor.ex.FileEditorProviderManager
import com.intellij.openapi.fileEditor.ex.FileEditorWithProvider import com.intellij.openapi.fileEditor.ex.FileEditorWithProvider
import com.intellij.openapi.fileTypes.FileType import com.intellij.openapi.fileTypes.FileType
import com.intellij.openapi.fileTypes.FileTypeRegistry import com.intellij.openapi.fileTypes.FileTypeRegistry
import com.intellij.openapi.progress.blockingContext
import com.intellij.openapi.project.DumbAware import com.intellij.openapi.project.DumbAware
import com.intellij.openapi.project.DumbService import com.intellij.openapi.project.DumbService
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
@@ -104,7 +103,7 @@ class FileEditorProviderManagerImpl
val sharedProviders = coroutineScope { val sharedProviders = coroutineScope {
val fileType = async { val fileType = async {
blockingContext { file.fileType } file.fileType
} }
var hasDocument: Boolean? = null var hasDocument: Boolean? = null

View File

@@ -19,7 +19,6 @@ import com.intellij.openapi.components.Service
import com.intellij.openapi.components.service import com.intellij.openapi.components.service
import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.diagnostic.logger
import com.intellij.openapi.progress.blockingContext
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.project.waitForSmartMode import com.intellij.openapi.project.waitForSmartMode
import kotlinx.coroutines.* import kotlinx.coroutines.*
@@ -116,15 +115,13 @@ class FUStateUsagesLogger private constructor(coroutineScope: CoroutineScope) :
val data = mergeWithEventData(groupData, metric.data) val data = mergeWithEventData(groupData, metric.data)
val eventData = data?.build() ?: emptyMap() val eventData = data?.build() ?: emptyMap()
launch { launch {
blockingContext { logger.logAsync(group, metric.eventId, eventData, true) }.asDeferred().join() logger.logAsync(group, metric.eventId, eventData, true).asDeferred().join()
} }
} }
} }
launch { launch {
blockingContext { logger.logAsync(group, EventLogSystemEvents.STATE_COLLECTOR_INVOKED, FeatureUsageData(group.recorder).addProject(project).build(), true).join()
logger.logAsync(group, EventLogSystemEvents.STATE_COLLECTOR_INVOKED, FeatureUsageData(group.recorder).addProject(project).build(), true).join()
}
} }
} }
} }

View File

@@ -8,7 +8,6 @@ import com.intellij.codeWithMe.ClientId
import com.intellij.openapi.Disposable import com.intellij.openapi.Disposable
import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.components.ComponentManagerEx import com.intellij.openapi.components.ComponentManagerEx
import com.intellij.openapi.progress.blockingContext
import com.intellij.openapi.progress.runBlockingMaybeCancellable import com.intellij.openapi.progress.runBlockingMaybeCancellable
import com.intellij.openapi.util.Disposer import com.intellij.openapi.util.Disposer
import com.intellij.platform.util.coroutines.childScope import com.intellij.platform.util.coroutines.childScope
@@ -87,9 +86,7 @@ class CoroutineDispatcherBackedExecutor(coroutineScope: CoroutineScope, name: St
override fun execute(command: Runnable) { override fun execute(command: Runnable) {
childScope.coroutineContext.ensureActive() childScope.coroutineContext.ensureActive()
childScope.launch(ClientId.coroutineContext()) { childScope.launch(ClientId.coroutineContext()) {
blockingContext { command.run()
command.run()
}
} }
} }

View File

@@ -27,24 +27,20 @@ object GitCodeReviewUtils {
suspend fun testRevisionsExist(repository: GitRepository, revisions: List<String>) = suspend fun testRevisionsExist(repository: GitRepository, revisions: List<String>) =
withContext(Dispatchers.IO) { withContext(Dispatchers.IO) {
blockingContext { val h = GitLineHandler(repository.project, repository.root, GitCommand.CAT_FILE)
val h = GitLineHandler(repository.project, repository.root, GitCommand.CAT_FILE) h.setSilent(true)
h.setSilent(true) h.addParameters("--batch-check=%(objecttype)")
h.addParameters("--batch-check=%(objecttype)") h.endOptions()
h.endOptions() h.setInputProcessor(GitHandlerInputProcessorUtil.writeLines(revisions, StandardCharsets.UTF_8))
h.setInputProcessor(GitHandlerInputProcessorUtil.writeLines(revisions, StandardCharsets.UTF_8))
!Git.getInstance().runCommand(h).getOutputOrThrow().contains("missing") !Git.getInstance().runCommand(h).getOutputOrThrow().contains("missing")
}
} }
suspend fun testIsAncestor(repository: GitRepository, potentialAncestorRev: String, rev: String): Boolean = suspend fun testIsAncestor(repository: GitRepository, potentialAncestorRev: String, rev: String): Boolean =
withContext(Dispatchers.IO) { withContext(Dispatchers.IO) {
blockingContext { val h = GitLineHandler(repository.project, repository.root, GitCommand.MERGE_BASE)
val h = GitLineHandler(repository.project, repository.root, GitCommand.MERGE_BASE) h.setSilent(true)
h.setSilent(true) h.addParameters("--is-ancestor", potentialAncestorRev, rev)
h.addParameters("--is-ancestor", potentialAncestorRev, rev) Git.getInstance().runCommand(h).success()
Git.getInstance().runCommand(h).success()
}
} }
} }