diff --git a/platform/collaboration-tools/src/com/intellij/collaboration/async/CoroutineUtil.kt b/platform/collaboration-tools/src/com/intellij/collaboration/async/CoroutineUtil.kt index 54a280e2b927..8b865064c70b 100644 --- a/platform/collaboration-tools/src/com/intellij/collaboration/async/CoroutineUtil.kt +++ b/platform/collaboration-tools/src/com/intellij/collaboration/async/CoroutineUtil.kt @@ -11,6 +11,7 @@ import com.intellij.openapi.extensions.ExtensionPointListener import com.intellij.openapi.extensions.ExtensionPointName import com.intellij.openapi.extensions.PluginDescriptor import com.intellij.openapi.util.Disposer +import com.intellij.platform.util.coroutines.childScope import com.intellij.util.cancelOnDispose import com.intellij.util.containers.HashingStrategy import com.intellij.util.containers.toArray @@ -22,6 +23,18 @@ import kotlinx.coroutines.flow.* import org.jetbrains.annotations.ApiStatus import kotlin.coroutines.CoroutineContext import kotlin.coroutines.EmptyCoroutineContext +import kotlin.reflect.KClass + +/** + * @see com.intellij.platform.util.coroutines.childScope(kotlinx.coroutines.CoroutineScope, java.lang.String, kotlin.coroutines.CoroutineContext, boolean) + */ +fun CoroutineScope.childScope( + owner: KClass<*>, + context: CoroutineContext = EmptyCoroutineContext, + supervisor: Boolean = true, +): CoroutineScope { + return childScope(owner.qualifiedName ?: owner.toString(), context, supervisor) +} /** * Prefer creating a service to supply a parent scope @@ -130,7 +143,7 @@ suspend fun combineAndCollect( } } -fun Flow.inverted() = map { !it } +fun Flow.inverted(): Flow = map { !it } @ApiStatus.Experimental fun StateFlow.mapState( @@ -256,7 +269,7 @@ private fun Flow.mapScoped2(mapper: suspend CoroutineScope.(T) -> R): fun Flow.mapNullableScoped(mapper: CoroutineScope.(T) -> R): Flow = mapScoped2 { if (it == null) null else mapper(it) } @ApiStatus.Experimental -suspend fun Flow.collectScoped(block: suspend CoroutineScope.(T) -> Unit) = mapScoped2(block).collect() +suspend fun Flow.collectScoped(block: suspend CoroutineScope.(T) -> Unit): Unit = mapScoped2(block).collect() @ApiStatus.Experimental suspend fun Flow.collectWithPrevious(initial: T, collector: suspend (prev: T, current: T) -> Unit) { diff --git a/platform/collaboration-tools/src/com/intellij/collaboration/ui/codereview/comment/CodeReviewSubmittableTextViewModel.kt b/platform/collaboration-tools/src/com/intellij/collaboration/ui/codereview/comment/CodeReviewSubmittableTextViewModel.kt index 939221829fd3..5f49b42fa258 100644 --- a/platform/collaboration-tools/src/com/intellij/collaboration/ui/codereview/comment/CodeReviewSubmittableTextViewModel.kt +++ b/platform/collaboration-tools/src/com/intellij/collaboration/ui/codereview/comment/CodeReviewSubmittableTextViewModel.kt @@ -1,10 +1,10 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.collaboration.ui.codereview.comment +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.util.ComputedResult import com.intellij.collaboration.util.SingleCoroutineLauncher import com.intellij.openapi.project.Project -import com.intellij.platform.util.coroutines.childScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.channels.Channel @@ -36,7 +36,7 @@ abstract class CodeReviewSubmittableTextViewModelBase( parentCs: CoroutineScope, initialText: String ) : CodeReviewSubmittableTextViewModel { - protected val cs = parentCs.childScope() + protected val cs: CoroutineScope = parentCs.childScope(this::class) private val taskLauncher = SingleCoroutineLauncher(cs) final override val text: MutableStateFlow = MutableStateFlow(initialText) diff --git a/platform/collaboration-tools/src/com/intellij/collaboration/ui/codereview/details/model/CodeReviewChangeListViewModel.kt b/platform/collaboration-tools/src/com/intellij/collaboration/ui/codereview/details/model/CodeReviewChangeListViewModel.kt index 28990fddfc8f..0c9f5f8fa84e 100644 --- a/platform/collaboration-tools/src/com/intellij/collaboration/ui/codereview/details/model/CodeReviewChangeListViewModel.kt +++ b/platform/collaboration-tools/src/com/intellij/collaboration/ui/codereview/details/model/CodeReviewChangeListViewModel.kt @@ -1,13 +1,13 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.collaboration.ui.codereview.details.model +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.ui.SimpleEventListener import com.intellij.collaboration.ui.codereview.details.model.CodeReviewChangeListViewModel.SelectionRequest import com.intellij.collaboration.util.ChangesSelection import com.intellij.collaboration.util.RefComparisonChange import com.intellij.openapi.actionSystem.DataKey import com.intellij.openapi.project.Project -import com.intellij.platform.util.coroutines.childScope import com.intellij.util.EventDispatcher import com.intellij.util.concurrency.annotations.RequiresEdt import kotlinx.coroutines.CoroutineScope @@ -88,7 +88,7 @@ abstract class CodeReviewChangeListViewModelBase( parentCs: CoroutineScope, protected val changeList: CodeReviewChangeList ) : CodeReviewChangeListViewModel { - protected val cs = parentCs.childScope() + protected val cs: CoroutineScope = parentCs.childScope(this::class) private val _selectionRequests = MutableSharedFlow(replay = 1) override val selectionRequests: SharedFlow = _selectionRequests.asSharedFlow() diff --git a/platform/collaboration-tools/src/com/intellij/collaboration/ui/toolwindow/ReviewToolwindowTabsManager.kt b/platform/collaboration-tools/src/com/intellij/collaboration/ui/toolwindow/ReviewToolwindowTabsManager.kt index 1bbacfa5d39f..b8701f864ed6 100644 --- a/platform/collaboration-tools/src/com/intellij/collaboration/ui/toolwindow/ReviewToolwindowTabsManager.kt +++ b/platform/collaboration-tools/src/com/intellij/collaboration/ui/toolwindow/ReviewToolwindowTabsManager.kt @@ -2,6 +2,7 @@ package com.intellij.collaboration.ui.toolwindow import com.intellij.collaboration.async.cancelledWith +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.async.launchNow import com.intellij.openapi.application.EDT import com.intellij.openapi.util.Disposer @@ -49,7 +50,7 @@ private class ReviewToolwindowTabsManager< ) { private val contentManager = toolwindow.contentManager private val projectVm = reviewToolwindowViewModel.projectVm - private val cs = parentCs.childScope(Dispatchers.EDT) + private val cs = parentCs.childScope(this::class, Dispatchers.EDT) init { contentManager.addUiDataProvider { sink -> diff --git a/plugins/github/github-core/src/org/jetbrains/plugins/github/authentication/accounts/GHCachingAccountInformationProvider.kt b/plugins/github/github-core/src/org/jetbrains/plugins/github/authentication/accounts/GHCachingAccountInformationProvider.kt index 5a22bb890d45..dfcacc017de2 100644 --- a/plugins/github/github-core/src/org/jetbrains/plugins/github/authentication/accounts/GHCachingAccountInformationProvider.kt +++ b/plugins/github/github-core/src/org/jetbrains/plugins/github/authentication/accounts/GHCachingAccountInformationProvider.kt @@ -2,9 +2,9 @@ package org.jetbrains.plugins.github.authentication.accounts import com.github.benmanes.caffeine.cache.Caffeine +import com.intellij.collaboration.async.childScope import com.intellij.openapi.components.Service import com.intellij.openapi.components.service -import com.intellij.platform.util.coroutines.childScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Deferred import kotlinx.coroutines.async @@ -23,7 +23,7 @@ import java.time.temporal.ChronoUnit @ApiStatus.Internal @Service(Service.Level.APP) class GHCachingAccountInformationProvider(serviceCs: CoroutineScope) { - private val cs = serviceCs.childScope() + private val cs = serviceCs.childScope(this::class) private val informationCache = Caffeine.newBuilder() .expireAfterWrite(Duration.of(30, ChronoUnit.MINUTES)) diff --git a/plugins/github/github-core/src/org/jetbrains/plugins/github/extensions/GHGitAuthenticationFailureManager.kt b/plugins/github/github-core/src/org/jetbrains/plugins/github/extensions/GHGitAuthenticationFailureManager.kt index 7dcf4e228f93..6f2a2a9d5dd9 100644 --- a/plugins/github/github-core/src/org/jetbrains/plugins/github/extensions/GHGitAuthenticationFailureManager.kt +++ b/plugins/github/github-core/src/org/jetbrains/plugins/github/extensions/GHGitAuthenticationFailureManager.kt @@ -1,9 +1,9 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.github.extensions +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.util.serviceGet import com.intellij.openapi.components.Service -import com.intellij.platform.util.coroutines.childScope import git4idea.remote.hosting.http.HostedGitAuthenticationFailureManager import kotlinx.coroutines.CoroutineScope import org.jetbrains.plugins.github.authentication.accounts.GHAccountManager @@ -11,4 +11,5 @@ import org.jetbrains.plugins.github.authentication.accounts.GithubAccount @Service(Service.Level.PROJECT) internal class GHGitAuthenticationFailureManager(parentCs: CoroutineScope) - : HostedGitAuthenticationFailureManager(serviceGet(), parentCs.childScope()) \ No newline at end of file + : HostedGitAuthenticationFailureManager(serviceGet(), + parentCs.childScope(GHGitAuthenticationFailureManager::class)) \ No newline at end of file diff --git a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/GHPREditorProvider.kt b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/GHPREditorProvider.kt index 358dbae6973e..3b264542b4c5 100644 --- a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/GHPREditorProvider.kt +++ b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/GHPREditorProvider.kt @@ -1,6 +1,7 @@ // Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package org.jetbrains.plugins.github.pullrequest +import com.intellij.collaboration.async.childScope import com.intellij.openapi.components.Service import com.intellij.openapi.components.service import com.intellij.openapi.fileEditor.FileEditor @@ -10,7 +11,6 @@ import com.intellij.openapi.progress.ProcessCanceledException import com.intellij.openapi.project.DumbAware import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.VirtualFile -import com.intellij.platform.util.coroutines.childScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -30,7 +30,7 @@ internal class GHPREditorProvider : FileEditorProvider, DumbAware { @Service(Service.Level.PROJECT) private class GHPREditorProviderService(parentCs: CoroutineScope) { - private val cs = parentCs.childScope(Dispatchers.Main) + private val cs = parentCs.childScope(this::class, Dispatchers.Main) fun createTimelineEditor(file: GHPRTimelineVirtualFile): FileEditor { val projectVm = file.findProjectVm() ?: throw ProcessCanceledException() diff --git a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/data/provider/GHPRChangesDataProviderImpl.kt b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/data/provider/GHPRChangesDataProviderImpl.kt index 3b18f7ac4f1d..aae35a057bc9 100644 --- a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/data/provider/GHPRChangesDataProviderImpl.kt +++ b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/data/provider/GHPRChangesDataProviderImpl.kt @@ -4,6 +4,7 @@ package org.jetbrains.plugins.github.pullrequest.data.provider import com.google.common.graph.GraphBuilder import com.google.common.graph.ImmutableGraph import com.google.common.graph.Traverser +import com.intellij.collaboration.async.childScope import com.intellij.openapi.diff.impl.patch.FilePatch import com.intellij.platform.util.coroutines.childScope import git4idea.changes.GitBranchComparisonResult @@ -80,7 +81,7 @@ internal class GHPRChangesDataProviderImpl(parentCs: CoroutineScope, } private inner class ChangesDataLoader(parentCs: CoroutineScope, val refs: GHPRBranchesRefs) { - private val cs = parentCs.childScope() + private val cs = parentCs.childScope(this::class) private val referencesRequest = cs.async(start = CoroutineStart.LAZY) { val mergeBaseRef = changesService.loadMergeBaseOid(refs.baseRef, refs.headRef) diff --git a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/data/provider/GHPRViewedStateDataProviderImpl.kt b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/data/provider/GHPRViewedStateDataProviderImpl.kt index 271f01803ac2..7140c953198c 100644 --- a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/data/provider/GHPRViewedStateDataProviderImpl.kt +++ b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/data/provider/GHPRViewedStateDataProviderImpl.kt @@ -1,7 +1,7 @@ // Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package org.jetbrains.plugins.github.pullrequest.data.provider -import com.intellij.platform.util.coroutines.childScope +import com.intellij.collaboration.async.childScope import kotlinx.coroutines.* import kotlinx.coroutines.flow.Flow import org.jetbrains.plugins.github.api.data.pullrequest.GHPullRequestFileViewedState @@ -13,7 +13,7 @@ internal class GHPRViewedStateDataProviderImpl( private val filesService: GHPRFilesService, private val pullRequestId: GHPRIdentifier, ) : GHPRViewedStateDataProvider { - private val cs = parentCs.childScope() + private val cs = parentCs.childScope(this::class) private val loader = LoaderWithMutableCache(cs) { filesService.loadFiles(pullRequestId).associateBy({ it.path }, { it.viewerViewedState }) diff --git a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/GHPRProjectViewModel.kt b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/GHPRProjectViewModel.kt index 4da83b792d57..2cf664580c7a 100644 --- a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/GHPRProjectViewModel.kt +++ b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/GHPRProjectViewModel.kt @@ -1,15 +1,11 @@ // Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.github.pullrequest.ui -import com.intellij.collaboration.async.combineState -import com.intellij.collaboration.async.launchNow -import com.intellij.collaboration.async.mapScoped -import com.intellij.collaboration.async.mapState +import com.intellij.collaboration.async.* import com.intellij.collaboration.util.URIUtil import com.intellij.openapi.components.Service import com.intellij.openapi.components.service import com.intellij.openapi.project.Project -import com.intellij.platform.util.coroutines.childScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.* import kotlinx.coroutines.launch @@ -32,7 +28,7 @@ class GHPRProjectViewModel(private val project: Project, parentCs: CoroutineScop private val settings: GithubPullRequestsProjectUISettings get() = GithubPullRequestsProjectUISettings.getInstance(project) - private val cs = parentCs.childScope() + private val cs = parentCs.childScope(this::class) val isAvailable: StateFlow = repositoriesManager.knownRepositoriesState.mapState(cs) { it.isNotEmpty() diff --git a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/details/GHPRStatusChecksComponentFactory.kt b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/details/GHPRStatusChecksComponentFactory.kt index 87dacb51599d..86dffbd52fab 100644 --- a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/details/GHPRStatusChecksComponentFactory.kt +++ b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/details/GHPRStatusChecksComponentFactory.kt @@ -1,6 +1,7 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.github.pullrequest.ui.details +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.messages.CollaborationToolsBundle import com.intellij.collaboration.ui.VerticalListPanel import com.intellij.collaboration.ui.codereview.avatar.CodeReviewAvatarUtils @@ -13,7 +14,6 @@ import com.intellij.collaboration.ui.util.toAnAction import com.intellij.icons.AllIcons import com.intellij.openapi.actionSystem.DefaultActionGroup import com.intellij.openapi.project.Project -import com.intellij.platform.util.coroutines.childScope import com.intellij.ui.ExperimentalUI import com.intellij.ui.ScrollPaneFactory import com.intellij.ui.components.panels.Wrapper @@ -45,7 +45,7 @@ object GHPRStatusChecksComponentFactory { project: Project, detailsVm: GHPRDetailsViewModel, ): JComponent { - val scope = parentScope.childScope(Dispatchers.Main.immediate) + val scope = parentScope.childScope(this::class, Dispatchers.Main.immediate) val reviewStatusVm = detailsVm.statusVm val reviewFlowVm = detailsVm.reviewFlowVm diff --git a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/details/model/GHPRBranchesViewModel.kt b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/details/model/GHPRBranchesViewModel.kt index fd85bfaa079b..fc0c7ff36d0f 100644 --- a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/details/model/GHPRBranchesViewModel.kt +++ b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/details/model/GHPRBranchesViewModel.kt @@ -1,15 +1,11 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.github.pullrequest.ui.details.model -import com.intellij.collaboration.async.launchNow -import com.intellij.collaboration.async.mapState -import com.intellij.collaboration.async.modelFlow -import com.intellij.collaboration.async.withInitial +import com.intellij.collaboration.async.* import com.intellij.collaboration.ui.codereview.details.model.CodeReviewBranches import com.intellij.collaboration.ui.codereview.details.model.CodeReviewBranchesViewModel import com.intellij.openapi.diagnostic.thisLogger import com.intellij.openapi.project.Project -import com.intellij.platform.util.coroutines.childScope import git4idea.GitStandardRemoteBranch import git4idea.remote.hosting.GitRemoteBranchesUtil import git4idea.remote.hosting.HostedGitRepositoryRemote @@ -31,7 +27,7 @@ class GHPRBranchesViewModel internal constructor( private val mapping: GHGitRepositoryMapping, private val detailsState: StateFlow ) : CodeReviewBranchesViewModel { - private val cs = parentCs.childScope() + private val cs = parentCs.childScope(this::class) private val gitRepository = mapping.remote.repository diff --git a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/details/model/GHPRStatusViewModel.kt b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/details/model/GHPRStatusViewModel.kt index acccb9576d07..d69333cf2dab 100644 --- a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/details/model/GHPRStatusViewModel.kt +++ b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/details/model/GHPRStatusViewModel.kt @@ -1,6 +1,7 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.github.pullrequest.ui.details.model +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.async.launchNow import com.intellij.collaboration.async.modelFlow import com.intellij.collaboration.ui.codereview.details.data.CodeReviewCIJob @@ -8,7 +9,6 @@ import com.intellij.collaboration.ui.codereview.details.model.CodeReviewStatusVi import com.intellij.collaboration.util.getOrNull import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.project.Project -import com.intellij.platform.util.coroutines.childScope import git4idea.repo.GitRepository import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.* @@ -40,7 +40,7 @@ class GHPRStatusViewModelImpl( detailsData: GHPRDetailsDataProvider, detailsState: StateFlow, ) : GHPRStatusViewModel { - private val cs = parentCs.childScope() + private val cs = parentCs.childScope(this::class) override val viewerDidAuthor: Boolean = detailsState.value.viewerDidAuthor diff --git a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/details/model/impl/GHPRChangesViewModel.kt b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/details/model/impl/GHPRChangesViewModel.kt index 95583b949bbd..e749475342a6 100644 --- a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/details/model/impl/GHPRChangesViewModel.kt +++ b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/details/model/impl/GHPRChangesViewModel.kt @@ -1,6 +1,7 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.github.pullrequest.ui.details.model.impl +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.async.modelFlow import com.intellij.collaboration.async.stateInNow import com.intellij.collaboration.async.withInitial @@ -11,7 +12,6 @@ import com.intellij.collaboration.util.ComputedResult import com.intellij.collaboration.util.RefComparisonChange import com.intellij.openapi.diagnostic.thisLogger import com.intellij.openapi.project.Project -import com.intellij.platform.util.coroutines.childScope import kotlinx.coroutines.* import kotlinx.coroutines.flow.* import org.jetbrains.annotations.ApiStatus @@ -41,7 +41,7 @@ internal class GHPRChangesViewModelImpl( private val dataProvider: GHPRDataProvider, private val openPullRequestDiff: (GHPRIdentifier?, Boolean) -> Unit, ) : GHPRChangesViewModel { - private val cs = parentCs.childScope() + private val cs = parentCs.childScope(this::class) override val changesLoadingErrorHandler = GHApiLoadingErrorHandler(project, dataContext.securityService.account, GHLoginSource.PR_CHANGES) { cs.launch { diff --git a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/details/model/impl/GHPRReviewFlowViewModelImpl.kt b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/details/model/impl/GHPRReviewFlowViewModelImpl.kt index 53a4b07aecb6..b2c35815b0bf 100644 --- a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/details/model/impl/GHPRReviewFlowViewModelImpl.kt +++ b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/details/model/impl/GHPRReviewFlowViewModelImpl.kt @@ -1,6 +1,7 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.github.pullrequest.ui.details.model.impl +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.async.modelFlow import com.intellij.collaboration.messages.CollaborationToolsBundle import com.intellij.collaboration.ui.codereview.action.ReviewMergeCommitMessageDialog @@ -18,7 +19,6 @@ import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.project.Project import com.intellij.openapi.util.text.StringUtil -import com.intellij.platform.util.coroutines.childScope import com.intellij.ui.awt.RelativePoint import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -61,7 +61,7 @@ class GHPRReviewFlowViewModelImpl internal constructor( private val changesData: GHPRChangesDataProvider, private val reviewVmHelper: GHPRReviewViewModelHelper ) : GHPRReviewFlowViewModel { - private val cs = parentCs.childScope() + private val cs = parentCs.childScope(this::class) private val taskLauncher = SingleCoroutineLauncher(cs) diff --git a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/review/GHPRReviewViewModel.kt b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/review/GHPRReviewViewModel.kt index 1d392f43d4af..95000b156e0d 100644 --- a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/review/GHPRReviewViewModel.kt +++ b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/review/GHPRReviewViewModel.kt @@ -1,11 +1,11 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.github.pullrequest.ui.review +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.async.stateInNow import com.intellij.collaboration.util.ComputedResult import com.intellij.openapi.actionSystem.DataKey import com.intellij.openapi.diagnostic.logger -import com.intellij.platform.util.coroutines.childScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.cancel import kotlinx.coroutines.currentCoroutineContext @@ -50,7 +50,7 @@ internal class DelegatingGHPRReviewViewModel(private val helper: GHPRReviewViewM } internal class GHPRReviewViewModelHelper(parentCs: CoroutineScope, private val dataProvider: GHPRDataProvider) { - private val cs = parentCs.childScope() + private val cs = parentCs.childScope(this::class) private val reviewData = dataProvider.reviewData val pendingReviewState: StateFlow> = diff --git a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/review/GHPRSubmitReviewViewModel.kt b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/review/GHPRSubmitReviewViewModel.kt index 44359c412b67..e915d85606a2 100644 --- a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/review/GHPRSubmitReviewViewModel.kt +++ b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/review/GHPRSubmitReviewViewModel.kt @@ -1,9 +1,9 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.github.pullrequest.ui.review +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.ui.codereview.review.CodeReviewSubmitViewModel import com.intellij.collaboration.util.SingleCoroutineLauncher -import com.intellij.platform.util.coroutines.childScope import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.MutableStateFlow @@ -42,7 +42,7 @@ internal class GHPRSubmitReviewViewModelImpl(parentCs: CoroutineScope, private val pendingReview: GHPullRequestPendingReview?, private val onDone: suspend () -> Unit) : GHPRSubmitReviewViewModel { - private val cs = parentCs.childScope() + private val cs = parentCs.childScope(this::class) private val taskLauncher = SingleCoroutineLauncher(cs) diff --git a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/timeline/GHPRDetailsTimelineViewModel.kt b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/timeline/GHPRDetailsTimelineViewModel.kt index 121c87090f32..e9d29f53a2ec 100644 --- a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/timeline/GHPRDetailsTimelineViewModel.kt +++ b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/timeline/GHPRDetailsTimelineViewModel.kt @@ -1,6 +1,7 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.github.pullrequest.ui.timeline +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.async.stateInNow import com.intellij.collaboration.ui.codereview.comment.CodeReviewSubmittableTextViewModelBase import com.intellij.collaboration.ui.codereview.comment.CodeReviewTextEditingViewModel @@ -9,7 +10,6 @@ import com.intellij.collaboration.util.ComputedResult import com.intellij.collaboration.util.getOrNull import com.intellij.collaboration.util.map import com.intellij.openapi.project.Project -import com.intellij.platform.util.coroutines.childScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.* @@ -30,7 +30,7 @@ class GHPRDetailsTimelineViewModel internal constructor(private val project: Pro parentCs: CoroutineScope, private val dataContext: GHPRDataContext, private val dataProvider: GHPRDataProvider) { - private val cs = parentCs.childScope() + private val cs = parentCs.childScope(this::class) private val currentUser: GHUser = dataContext.securityService.currentUser private val reactionsService: GHReactionsService = dataContext.reactionsService diff --git a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/toolwindow/model/GHPRInfoViewModel.kt b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/toolwindow/model/GHPRInfoViewModel.kt index e6be69149701..83e004014d6e 100644 --- a/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/toolwindow/model/GHPRInfoViewModel.kt +++ b/plugins/github/github-core/src/org/jetbrains/plugins/github/pullrequest/ui/toolwindow/model/GHPRInfoViewModel.kt @@ -1,6 +1,7 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.github.pullrequest.ui.toolwindow.model +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.async.withInitial import com.intellij.collaboration.util.ComputedResult import com.intellij.openapi.project.Project @@ -47,7 +48,7 @@ class GHPRInfoViewModel internal constructor( pullRequestUrl = details.url val currentVm = vm if (currentVm == null) { - val newVm = GHPRDetailsViewModelImpl(project, cs.childScope(), dataContext, dataProvider, details, openPullRequestDiff) + val newVm = GHPRDetailsViewModelImpl(project, cs.childScope(GHPRDetailsViewModelImpl::class), dataContext, dataProvider, details, openPullRequestDiff) vm = newVm ComputedResult.success(newVm) } diff --git a/plugins/github/github-core/src/org/jetbrains/plugins/github/util/CachingGHUserAvatarLoader.kt b/plugins/github/github-core/src/org/jetbrains/plugins/github/util/CachingGHUserAvatarLoader.kt index 28d7a89cd126..53fefb7ef2c0 100644 --- a/plugins/github/github-core/src/org/jetbrains/plugins/github/util/CachingGHUserAvatarLoader.kt +++ b/plugins/github/github-core/src/org/jetbrains/plugins/github/util/CachingGHUserAvatarLoader.kt @@ -2,12 +2,12 @@ package org.jetbrains.plugins.github.util import com.github.benmanes.caffeine.cache.Caffeine +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.async.nestedDisposable import com.intellij.openapi.components.Service import com.intellij.openapi.components.service import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.util.LowMemoryWatcher -import com.intellij.platform.util.coroutines.childScope import com.intellij.util.ImageLoader import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope @@ -26,7 +26,7 @@ import java.util.concurrent.CompletableFuture @Service class CachingGHUserAvatarLoader internal constructor(serviceCs: CoroutineScope) { - private val cs = serviceCs.childScope() + private val cs = serviceCs.childScope(this::class) private val avatarCache = Caffeine.newBuilder() .expireAfterAccess(Duration.of(5, ChronoUnit.MINUTES)) diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/authentication/accounts/GitLabProjectDefaultAccountHolder.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/authentication/accounts/GitLabProjectDefaultAccountHolder.kt index c6425eb84e7d..e2dbe38aa4ce 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/authentication/accounts/GitLabProjectDefaultAccountHolder.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/authentication/accounts/GitLabProjectDefaultAccountHolder.kt @@ -1,16 +1,16 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.gitlab.authentication.accounts +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.auth.PersistentDefaultAccountHolder import com.intellij.openapi.components.* import com.intellij.openapi.project.Project -import com.intellij.platform.util.coroutines.childScope import kotlinx.coroutines.CoroutineScope @Service(Service.Level.PROJECT) @State(name = "GitLabDefaultAccount", storages = [Storage(StoragePathMacros.WORKSPACE_FILE)], reportStatistic = false) internal class GitLabProjectDefaultAccountHolder(project: Project, parentCs: CoroutineScope) - : PersistentDefaultAccountHolder(project, parentCs.childScope()) { + : PersistentDefaultAccountHolder(project, parentCs.childScope(GitLabProjectDefaultAccountHolder::class)) { override fun accountManager() = service() override fun notifyDefaultAccountMissing() { diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/git/http/GitLabGitAuthenticationFailureManager.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/git/http/GitLabGitAuthenticationFailureManager.kt index 2b265716463a..9f6b3ea647c4 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/git/http/GitLabGitAuthenticationFailureManager.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/git/http/GitLabGitAuthenticationFailureManager.kt @@ -1,9 +1,9 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.gitlab.git.http +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.util.serviceGet import com.intellij.openapi.components.Service -import com.intellij.platform.util.coroutines.childScope import git4idea.remote.hosting.http.HostedGitAuthenticationFailureManager import kotlinx.coroutines.CoroutineScope import org.jetbrains.plugins.gitlab.authentication.accounts.GitLabAccount @@ -11,4 +11,4 @@ import org.jetbrains.plugins.gitlab.authentication.accounts.GitLabAccountManager @Service(Service.Level.PROJECT) class GitLabGitAuthenticationFailureManager(parentCs: CoroutineScope) - : HostedGitAuthenticationFailureManager(serviceGet(), parentCs.childScope()) \ No newline at end of file + : HostedGitAuthenticationFailureManager(serviceGet(), parentCs.childScope(GitLabGitAuthenticationFailureManager::class)) \ No newline at end of file diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/action/GitLabMergeRequestSubmitReviewAction.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/action/GitLabMergeRequestSubmitReviewAction.kt index 1a421f718f34..0d095c4d47e3 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/action/GitLabMergeRequestSubmitReviewAction.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/action/GitLabMergeRequestSubmitReviewAction.kt @@ -1,11 +1,11 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.gitlab.mergerequest.action +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.async.combineAndCollect import com.intellij.collaboration.async.launchNow import com.intellij.collaboration.messages.CollaborationToolsBundle import com.intellij.collaboration.ui.util.name -import com.intellij.platform.util.coroutines.childScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import org.jetbrains.plugins.gitlab.mergerequest.ui.details.model.GitLabMergeRequestReviewFlowViewModel @@ -16,7 +16,7 @@ internal class GitLabMergeRequestSubmitReviewAction( parentCs: CoroutineScope, private val vm: GitLabMergeRequestReviewFlowViewModel ) : AbstractAction(CollaborationToolsBundle.message("review.start.submit.action")) { - private val cs = parentCs.childScope(Dispatchers.Main) + private val cs = parentCs.childScope(this::class, Dispatchers.Main) init { cs.launchNow { diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/data/GitLabDiscussion.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/data/GitLabDiscussion.kt index afb3f55c5920..8ca082745c17 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/data/GitLabDiscussion.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/data/GitLabDiscussion.kt @@ -2,8 +2,6 @@ package org.jetbrains.plugins.gitlab.mergerequest.data import com.intellij.collaboration.async.* -import com.intellij.openapi.diagnostic.logger -import com.intellij.platform.util.coroutines.childScope import kotlinx.coroutines.* import kotlinx.coroutines.flow.* import kotlinx.coroutines.sync.Mutex @@ -43,8 +41,6 @@ interface GitLabMergeRequestDiscussion : GitLabDiscussion { override val notes: StateFlow> } -private val LOG = logger() - @OptIn(ExperimentalCoroutinesApi::class) class LoadedGitLabDiscussion( parentCs: CoroutineScope, @@ -67,7 +63,7 @@ class LoadedGitLabDiscussion( override val id: GitLabGid = discussionData.id override val createdAt: Date = discussionData.createdAt - private val cs = parentCs.childScope(CoroutineExceptionHandler { _, e -> LOG.warn(e) }) + private val cs = parentCs.childScope(this::class) private val operationsGuard = Mutex() diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/data/GitLabMergeRequest.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/data/GitLabMergeRequest.kt index 2c099c1c1c3f..85331c3abd9d 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/data/GitLabMergeRequest.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/data/GitLabMergeRequest.kt @@ -1,14 +1,10 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.gitlab.mergerequest.data -import com.intellij.collaboration.async.mapScoped -import com.intellij.collaboration.async.modelFlow -import com.intellij.collaboration.async.resultOrErrorFlow -import com.intellij.collaboration.async.withInitial +import com.intellij.collaboration.async.* import com.intellij.collaboration.util.ResultUtil.runCatchingUser import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.project.Project -import com.intellij.platform.util.coroutines.childScope import git4idea.GitStandardRemoteBranch import git4idea.remote.hosting.GitRemoteBranchesUtil import git4idea.remote.hosting.changesSignalFlow @@ -102,7 +98,7 @@ internal class LoadedGitLabMergeRequest( private val currentUser: GitLabUserDTO, mergeRequest: GitLabMergeRequestDTO ) : GitLabMergeRequest { - private val cs = parentCs.childScope(Dispatchers.Default + CoroutineExceptionHandler { _, e -> LOG.warn(e) }) + private val cs = parentCs.childScope(this::class, Dispatchers.Default) override val glProject: GitLabProjectCoordinates = projectMapping.repository override val gitRepository: GitRepository = projectMapping.gitRepository diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/data/GitLabMergeRequestChanges.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/data/GitLabMergeRequestChanges.kt index 26f89d2894d5..37dec4c44ab4 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/data/GitLabMergeRequestChanges.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/data/GitLabMergeRequestChanges.kt @@ -3,12 +3,11 @@ package org.jetbrains.plugins.gitlab.mergerequest.data import com.intellij.collaboration.api.page.ApiPageUtil import com.intellij.collaboration.api.page.foldToList -import com.intellij.openapi.diagnostic.logger +import com.intellij.collaboration.async.childScope import com.intellij.openapi.diff.impl.patch.PatchReader import com.intellij.openapi.diff.impl.patch.TextFilePatch import com.intellij.openapi.vcs.FilePath import com.intellij.openapi.vcs.FileStatus -import com.intellij.platform.util.coroutines.childScope import com.intellij.vcsUtil.VcsFileUtil import git4idea.changes.GitBranchComparisonResult import git4idea.changes.GitCommitShaWithPatches @@ -46,8 +45,6 @@ fun GitBranchComparisonResult.findLatestCommitWithChangesTo(gitRepository: GitRe return commits.lastOrNull { commit -> commit.patches.any { it.filePath == relativePath } }?.sha } -private val LOG = logger() - class GitLabMergeRequestChangesImpl( parentCs: CoroutineScope, private val api: GitLabApi, @@ -56,7 +53,7 @@ class GitLabMergeRequestChangesImpl( private val mergeRequestDetails: GitLabMergeRequestFullDetails ) : GitLabMergeRequestChanges { - private val cs = parentCs.childScope(CoroutineExceptionHandler { _, e -> LOG.warn(e) }) + private val cs = parentCs.childScope(this::class) private val glProject = projectMapping.repository diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/data/GitLabMergeRequestDiscussionsContainer.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/data/GitLabMergeRequestDiscussionsContainer.kt index cc95b2308d50..90bc9b0e298a 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/data/GitLabMergeRequestDiscussionsContainer.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/data/GitLabMergeRequestDiscussionsContainer.kt @@ -5,10 +5,12 @@ import com.intellij.collaboration.api.data.GraphQLRequestPagination import com.intellij.collaboration.async.* import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.project.Project -import com.intellij.platform.util.coroutines.childScope -import kotlinx.coroutines.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.flow.* +import kotlinx.coroutines.withContext import org.jetbrains.plugins.gitlab.api.* import org.jetbrains.plugins.gitlab.api.dto.GitLabDiscussionDTO import org.jetbrains.plugins.gitlab.api.dto.GitLabMergeRequestDraftNoteRestDTO @@ -52,7 +54,7 @@ class GitLabMergeRequestDiscussionsContainerImpl( private val mr: GitLabMergeRequest, ) : GitLabMergeRequestDiscussionsContainer { - private val cs = parentCs.childScope(Dispatchers.Default + CoroutineExceptionHandler { _, e -> LOG.warn(e) }) + private val cs = parentCs.childScope(this::class, Dispatchers.Default) override val canAddNotes: Boolean = mr.details.value.userPermissions.createNote override val canAddDraftNotes: Boolean = diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/data/GitLabNote.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/data/GitLabNote.kt index fe6d2fe7d8aa..1e75e0160f4a 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/data/GitLabNote.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/data/GitLabNote.kt @@ -1,16 +1,15 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.gitlab.mergerequest.data -import com.intellij.collaboration.async.Change -import com.intellij.collaboration.async.Deleted -import com.intellij.collaboration.async.mapState -import com.intellij.collaboration.async.modelFlow +import com.intellij.collaboration.async.* import com.intellij.openapi.diagnostic.logger -import com.intellij.platform.util.coroutines.childScope -import kotlinx.coroutines.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.* import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock +import kotlinx.coroutines.withContext import org.jetbrains.plugins.gitlab.api.* import org.jetbrains.plugins.gitlab.api.dto.GitLabAwardEmojiDTO import org.jetbrains.plugins.gitlab.api.dto.GitLabMergeRequestDraftNoteRestDTO @@ -80,7 +79,7 @@ class MutableGitLabMergeRequestNote( noteData: GitLabNoteDTO ) : GitLabMergeRequestNote, MutableGitLabNote { - private val cs = parentCs.childScope(CoroutineExceptionHandler { _, e -> LOG.warn(e) }) + private val cs = parentCs.childScope(this::class) private val operationsGuard = Mutex() @@ -169,7 +168,7 @@ class GitLabMergeRequestDraftNoteImpl( override val author: GitLabUserDTO ) : GitLabMergeRequestDraftNote, MutableGitLabNote { - private val cs = parentCs.childScope(CoroutineExceptionHandler { _, e -> LOG.warn(e) }) + private val cs = parentCs.childScope(this::class) private val operationsGuard = Mutex() diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/data/GitLabProjectMergeRequestsStore.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/data/GitLabProjectMergeRequestsStore.kt index f5ff7b1510ed..b6ecad94a221 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/data/GitLabProjectMergeRequestsStore.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/data/GitLabProjectMergeRequestsStore.kt @@ -3,15 +3,11 @@ package org.jetbrains.plugins.gitlab.mergerequest.data import com.github.benmanes.caffeine.cache.Caffeine import com.intellij.collaboration.api.HttpStatusErrorException -import com.intellij.collaboration.async.ReloadablePotentiallyInfiniteListLoader -import com.intellij.collaboration.async.mapScoped -import com.intellij.collaboration.async.transformConsecutiveSuccesses -import com.intellij.collaboration.async.withInitial +import com.intellij.collaboration.async.* import com.intellij.collaboration.messages.CollaborationToolsBundle import com.intellij.collaboration.util.ResultUtil.runCatchingUser import com.intellij.openapi.project.Project import com.intellij.openapi.util.registry.Registry -import com.intellij.platform.util.coroutines.childScope import kotlinx.coroutines.* import kotlinx.coroutines.flow.* import org.jetbrains.plugins.gitlab.api.GitLabApi @@ -67,7 +63,7 @@ class CachingGitLabProjectMergeRequestsStore(private val project: Project, private val currentUser: GitLabUserDTO, private val tokenRefreshFlow: Flow) : GitLabProjectMergeRequestsStore { - private val cs = parentCs.childScope() + private val cs = parentCs.childScope(this::class) private val glProject: GitLabProjectCoordinates = projectMapping.repository diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/create/model/GitLabMergeRequestCreateViewModel.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/create/model/GitLabMergeRequestCreateViewModel.kt index fd84d38faba2..9ba3ddf5cc01 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/create/model/GitLabMergeRequestCreateViewModel.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/create/model/GitLabMergeRequestCreateViewModel.kt @@ -11,7 +11,6 @@ import com.intellij.collaboration.util.SingleCoroutineLauncher import com.intellij.openapi.diagnostic.thisLogger import com.intellij.openapi.project.Project import com.intellij.openapi.util.Disposer -import com.intellij.platform.util.coroutines.childScope import com.intellij.ui.awt.RelativePoint import com.intellij.vcs.log.Hash import com.intellij.vcs.log.VcsCommitMetadata @@ -78,7 +77,7 @@ internal class GitLabMergeRequestCreateViewModelImpl( override val openReviewTabAction: suspend (mrIid: String) -> Unit, private val onReviewCreated: () -> Unit, ) : GitLabMergeRequestCreateViewModel { - private val cs: CoroutineScope = parentCs.childScope() + private val cs: CoroutineScope = parentCs.childScope(this::class) private val taskLauncher = SingleCoroutineLauncher(cs) override val isBusy: Flow = taskLauncher.busy diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/details/model/GitLabMergeRequestBranchesViewModel.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/details/model/GitLabMergeRequestBranchesViewModel.kt index c32978f1bbdb..682a5a9b797e 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/details/model/GitLabMergeRequestBranchesViewModel.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/details/model/GitLabMergeRequestBranchesViewModel.kt @@ -1,6 +1,7 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.gitlab.mergerequest.ui.details.model +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.async.mapState import com.intellij.collaboration.async.modelFlow import com.intellij.collaboration.async.withInitial @@ -8,7 +9,6 @@ import com.intellij.collaboration.ui.codereview.details.model.CodeReviewBranches import com.intellij.collaboration.ui.codereview.details.model.CodeReviewBranchesViewModel import com.intellij.dvcs.DvcsUtil import com.intellij.openapi.diagnostic.thisLogger -import com.intellij.platform.util.coroutines.childScope import git4idea.remote.hosting.GitRemoteBranchesUtil import git4idea.remote.hosting.changesSignalFlow import git4idea.repo.GitRepository @@ -30,7 +30,7 @@ internal class GitLabMergeRequestBranchesViewModel( ) : CodeReviewBranchesViewModel { private val gitRepository: GitRepository = mapping.remote.repository - private val cs: CoroutineScope = parentCs.childScope() + private val cs: CoroutineScope = parentCs.childScope(this::class) override val sourceBranch: StateFlow = mergeRequest.details.mapState(cs, ::getSourceBranchName) diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/details/model/GitLabMergeRequestDetailsLoadingViewModel.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/details/model/GitLabMergeRequestDetailsLoadingViewModel.kt index 13e7cdb0da9c..dbc97c535ce9 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/details/model/GitLabMergeRequestDetailsLoadingViewModel.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/details/model/GitLabMergeRequestDetailsLoadingViewModel.kt @@ -1,7 +1,7 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.gitlab.mergerequest.ui.details.model -import com.intellij.platform.util.coroutines.childScope +import com.intellij.collaboration.async.childScope import com.intellij.util.asSafely import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -31,7 +31,7 @@ class GitLabMergeRequestDetailsLoadingViewModelImpl( override val mergeRequestId: String, detailsVm: Flow> ) : GitLabMergeRequestDetailsLoadingViewModel { - private val scope = parentScope.childScope(Dispatchers.Default) + private val scope = parentScope.childScope(this::class, Dispatchers.Default) override val mergeRequestLoadingFlow: Flow = detailsVm.map { vmResult -> vmResult.map { LoadingState.Result(it) }.getOrElse { LoadingState.Error(it) } diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/details/model/GitLabMergeRequestDetailsViewModel.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/details/model/GitLabMergeRequestDetailsViewModel.kt index c5ee66732697..477103526b0f 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/details/model/GitLabMergeRequestDetailsViewModel.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/details/model/GitLabMergeRequestDetailsViewModel.kt @@ -1,6 +1,7 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.gitlab.mergerequest.ui.details.model +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.async.launchNow import com.intellij.collaboration.async.modelFlow import com.intellij.collaboration.ui.codereview.details.data.ReviewRequestState @@ -10,7 +11,6 @@ import com.intellij.collaboration.ui.codereview.issues.processIssueIdsHtml import com.intellij.collaboration.ui.icon.IconsProvider import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.project.Project -import com.intellij.platform.util.coroutines.childScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.* import kotlinx.coroutines.launch @@ -49,7 +49,7 @@ internal class GitLabMergeRequestDetailsViewModelImpl( private val avatarIconsProvider: IconsProvider, ) : GitLabMergeRequestDetailsViewModel { - private val cs = parentCs.childScope() + private val cs = parentCs.childScope(this::class) override val number: String = "!${mergeRequest.iid}" override val url: String = mergeRequest.url diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/details/model/GitLabMergeRequestReviewFlowViewModel.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/details/model/GitLabMergeRequestReviewFlowViewModel.kt index 726a09f0eb11..8fa391bd365c 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/details/model/GitLabMergeRequestReviewFlowViewModel.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/details/model/GitLabMergeRequestReviewFlowViewModel.kt @@ -1,6 +1,7 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.gitlab.mergerequest.ui.details.model +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.async.launchNow import com.intellij.collaboration.async.mapState import com.intellij.collaboration.async.modelFlow @@ -16,7 +17,6 @@ import com.intellij.openapi.application.EDT import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.project.Project import com.intellij.openapi.util.text.StringUtil -import com.intellij.platform.util.coroutines.childScope import com.intellij.ui.awt.RelativePoint import kotlinx.coroutines.* import kotlinx.coroutines.flow.* @@ -102,7 +102,7 @@ internal class GitLabMergeRequestReviewFlowViewModelImpl( private val mergeRequest: GitLabMergeRequest, private val avatarIconsProvider: IconsProvider ) : GitLabMergeRequestReviewFlowViewModel { - private val scope = parentScope.childScope() + private val scope = parentScope.childScope(this::class) private val taskLauncher = SingleCoroutineLauncher(scope) override val isBusy: Flow = taskLauncher.busy diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/details/model/GitLabMergeRequestStatusViewModel.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/details/model/GitLabMergeRequestStatusViewModel.kt index d7088d3c343d..0f0a6d104d79 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/details/model/GitLabMergeRequestStatusViewModel.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/details/model/GitLabMergeRequestStatusViewModel.kt @@ -1,6 +1,7 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.gitlab.mergerequest.ui.details.model +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.async.launchNow import com.intellij.collaboration.async.modelFlow import com.intellij.collaboration.ui.codereview.details.data.CodeReviewCIJob @@ -8,7 +9,6 @@ import com.intellij.collaboration.ui.codereview.details.data.CodeReviewCIJobStat import com.intellij.collaboration.ui.codereview.details.model.CodeReviewStatusViewModel import com.intellij.openapi.diagnostic.thisLogger import com.intellij.openapi.project.Project -import com.intellij.platform.util.coroutines.childScope import com.intellij.util.io.URLUtil import git4idea.repo.GitRepository import kotlinx.coroutines.CoroutineScope @@ -32,7 +32,7 @@ class GitLabMergeRequestStatusViewModelImpl( private val serverPath: GitLabServerPath, mergeRequest: GitLabMergeRequest, ) : GitLabMergeRequestStatusViewModel { - private val cs = parentCs.childScope() + private val cs = parentCs.childScope(this::class) private val pipeline: SharedFlow = mergeRequest.details.map { it.headPipeline }.modelFlow(cs, thisLogger()) diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/review/GitLabMergeRequestSubmitReviewViewModel.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/review/GitLabMergeRequestSubmitReviewViewModel.kt index 96dcd099eb8f..e5d9c5254405 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/review/GitLabMergeRequestSubmitReviewViewModel.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/review/GitLabMergeRequestSubmitReviewViewModel.kt @@ -1,9 +1,9 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.gitlab.mergerequest.ui.review +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.ui.codereview.review.CodeReviewSubmitViewModel import com.intellij.collaboration.util.SingleCoroutineLauncher -import com.intellij.platform.util.coroutines.childScope import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -54,7 +54,7 @@ internal class GitLabMergeRequestSubmitReviewViewModelImpl( currentReview: SubmittableReview, private val onDone: () -> Unit ) : GitLabMergeRequestSubmitReviewViewModel { - private val cs = parentCs.childScope(Dispatchers.Default) + private val cs = parentCs.childScope(this::class, Dispatchers.Default) private val taskLauncher = SingleCoroutineLauncher(cs) override val isBusy: StateFlow = taskLauncher.busy diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/timeline/GitLabDiscussionDiffViewModel.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/timeline/GitLabDiscussionDiffViewModel.kt index 92e1cee18c8b..42568364690e 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/timeline/GitLabDiscussionDiffViewModel.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/timeline/GitLabDiscussionDiffViewModel.kt @@ -1,6 +1,7 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.gitlab.mergerequest.ui.timeline +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.async.modelFlow import com.intellij.collaboration.ui.codereview.diff.DiffLineLocation import com.intellij.collaboration.util.ChangesSelection @@ -9,8 +10,6 @@ import com.intellij.diff.util.Side import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.diff.impl.patch.PatchHunk import com.intellij.openapi.diff.impl.patch.TextFilePatch -import com.intellij.platform.util.coroutines.childScope -import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.channels.BufferOverflow @@ -45,7 +44,7 @@ class GitLabDiscussionDiffViewModelImpl( override val position: GitLabNotePosition ) : GitLabDiscussionDiffViewModel { - private val cs = parentCs.childScope(CoroutineExceptionHandler { _, e -> LOG.warn(e) }) + private val cs = parentCs.childScope(this::class) override val mapping: Flow = mr.changes.mapLatest { try { diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/timeline/GitLabMergeRequestTimelineDiscussionViewModel.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/timeline/GitLabMergeRequestTimelineDiscussionViewModel.kt index f66fdec72dc2..9e29a0b3239c 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/timeline/GitLabMergeRequestTimelineDiscussionViewModel.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/timeline/GitLabMergeRequestTimelineDiscussionViewModel.kt @@ -8,9 +8,7 @@ import com.intellij.collaboration.ui.codereview.timeline.thread.CodeReviewResolv import com.intellij.collaboration.util.SingleCoroutineLauncher import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.project.Project -import com.intellij.platform.util.coroutines.childScope import kotlinx.coroutines.CancellationException -import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.* @@ -53,7 +51,7 @@ class GitLabMergeRequestTimelineDiscussionViewModelImpl( private val discussion: GitLabMergeRequestDiscussion ) : GitLabMergeRequestTimelineDiscussionViewModel { - private val cs = parentCs.childScope(CoroutineExceptionHandler { _, e -> LOG.warn(e) }) + private val cs = parentCs.childScope(this::class) private val taskLauncher = SingleCoroutineLauncher(cs) override val mainNote: Flow = discussion.notes diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/timeline/GitLabMergeRequestTimelineItemViewModel.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/timeline/GitLabMergeRequestTimelineItemViewModel.kt index 654fd20f842e..b2c24d2aa603 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/timeline/GitLabMergeRequestTimelineItemViewModel.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/timeline/GitLabMergeRequestTimelineItemViewModel.kt @@ -1,12 +1,11 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.gitlab.mergerequest.ui.timeline +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.async.mapStateInNow import com.intellij.collaboration.async.modelFlow import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.project.Project -import com.intellij.platform.util.coroutines.childScope -import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow @@ -101,7 +100,7 @@ sealed interface GitLabMergeRequestTimelineItemViewModel { mr: GitLabMergeRequest, note: GitLabMergeRequestNote ) : GitLabMergeRequestTimelineItemViewModel, GitLabNoteViewModel { - private val cs = parentCs.childScope(CoroutineExceptionHandler { _, e -> LOG.warn(e) }) + private val cs = parentCs.childScope(this::class) override val id: GitLabId = note.id override val author: GitLabUserDTO = note.author diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/timeline/GitLabMergeRequestTimelineViewModel.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/timeline/GitLabMergeRequestTimelineViewModel.kt index e945d35fb28b..e633a537bf2d 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/timeline/GitLabMergeRequestTimelineViewModel.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/timeline/GitLabMergeRequestTimelineViewModel.kt @@ -1,15 +1,10 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.gitlab.mergerequest.ui.timeline -import com.intellij.collaboration.async.launchNow -import com.intellij.collaboration.async.mapDataToModel -import com.intellij.collaboration.async.modelFlow -import com.intellij.collaboration.async.transformConsecutiveSuccesses -import com.intellij.collaboration.async.withInitial +import com.intellij.collaboration.async.* import com.intellij.collaboration.util.ChangesSelection import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.project.Project -import com.intellij.platform.util.coroutines.childScope import kotlinx.coroutines.* import kotlinx.coroutines.flow.* import org.jetbrains.plugins.gitlab.api.dto.GitLabUserDTO @@ -47,7 +42,7 @@ internal class LoadAllGitLabMergeRequestTimelineViewModel( private val mergeRequest: GitLabMergeRequest ) : GitLabMergeRequestTimelineViewModel { - private val cs = parentCs.childScope(Dispatchers.Default) + private val cs = parentCs.childScope(this::class, Dispatchers.Default) override val number: String = "!${mergeRequest.iid}" override val author: GitLabUserDTO = mergeRequest.author diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/toolwindow/GitLabToolWindowFactory.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/toolwindow/GitLabToolWindowFactory.kt index adbb48a9bec4..55e66642c6e3 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/toolwindow/GitLabToolWindowFactory.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/toolwindow/GitLabToolWindowFactory.kt @@ -1,6 +1,7 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.gitlab.mergerequest.ui.toolwindow +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.ui.toolwindow.ReviewToolwindowViewModel import com.intellij.collaboration.ui.toolwindow.dontHideOnEmptyContent import com.intellij.collaboration.ui.toolwindow.manageReviewToolwindowTabs @@ -17,7 +18,6 @@ import com.intellij.openapi.wm.ToolWindow import com.intellij.openapi.wm.ToolWindowFactory import com.intellij.openapi.wm.ToolWindowManager import com.intellij.openapi.wm.impl.content.ToolWindowContentUi -import com.intellij.platform.util.coroutines.childScope import com.intellij.platform.util.coroutines.flow.mapStateIn import com.intellij.util.cancelOnDispose import com.intellij.util.concurrency.annotations.RequiresEdt @@ -46,7 +46,7 @@ internal class GitLabToolWindowFactory : ToolWindowFactory, DumbAware { @Service(Service.Level.PROJECT) private class GitLabMergeRequestsToolWindowController(private val project: Project, parentCs: CoroutineScope) { - private val cs = parentCs.childScope(Dispatchers.Main) + private val cs = parentCs.childScope(this::class, Dispatchers.Main) suspend fun manageToolWindow(toolWindow: ToolWindow) { val vm = project.serviceAsync() diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/toolwindow/model/GitLabReviewTabViewModel.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/toolwindow/model/GitLabReviewTabViewModel.kt index 81896071b2da..cbe483d40fa6 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/toolwindow/model/GitLabReviewTabViewModel.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/toolwindow/model/GitLabReviewTabViewModel.kt @@ -2,12 +2,12 @@ package org.jetbrains.plugins.gitlab.mergerequest.ui.toolwindow.model import com.intellij.collaboration.async.cancelledWith +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.ui.icon.IconsProvider import com.intellij.collaboration.ui.toolwindow.ReviewTabViewModel import com.intellij.openapi.Disposable import com.intellij.openapi.project.Project import com.intellij.openapi.util.NlsSafe -import com.intellij.platform.util.coroutines.childScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow import org.jetbrains.plugins.gitlab.GitLabProjectsManager @@ -25,7 +25,7 @@ internal sealed interface GitLabReviewTabViewModel : ReviewTabViewModel { reviewId: String, detailsVm: Flow> ) : GitLabReviewTabViewModel, Disposable { - private val cs = parentCs.childScope().cancelledWith(this) + private val cs = parentCs.childScope(this::class).cancelledWith(this) override val displayName: @NlsSafe String = "!${reviewId}" @@ -43,7 +43,7 @@ internal sealed interface GitLabReviewTabViewModel : ReviewTabViewModel { openReviewTabAction: suspend (mrIid: String) -> Unit, onReviewCreated: () -> Unit ) : GitLabReviewTabViewModel, Disposable { - private val cs = parentCs.childScope().cancelledWith(this) + private val cs = parentCs.childScope(this::class).cancelledWith(this) private val projectPath = projectData.projectMapping.repository.projectPath.fullPath() override val displayName: String = GitLabBundle.message("merge.request.create.tab.title", projectPath) diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/snippets/GitLabCreateSnippetComponentFactory.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/snippets/GitLabCreateSnippetComponentFactory.kt index 6b020df08592..e2a412f7ee7b 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/snippets/GitLabCreateSnippetComponentFactory.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/snippets/GitLabCreateSnippetComponentFactory.kt @@ -1,6 +1,7 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.gitlab.snippets +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.async.mapState import com.intellij.collaboration.messages.CollaborationToolsBundle import com.intellij.collaboration.snippets.PathHandlingMode @@ -11,7 +12,6 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.ui.ComboBox import com.intellij.openapi.ui.DialogWrapper import com.intellij.openapi.ui.ValidationInfo -import com.intellij.platform.util.coroutines.childScope import com.intellij.ui.MutableCollectionComboBoxModel import com.intellij.ui.components.JBLabel import com.intellij.ui.components.JBTextArea @@ -41,7 +41,7 @@ internal object GitLabCreateSnippetComponentFactory { createSnippetVm: GitLabCreateSnippetViewModel): DialogWrapper = object : DialogWrapper(project, false) { private lateinit var titleField: JTextField - private val cs: CoroutineScope = parentCs.childScope(ModalityState.stateForComponent(window).asContextElement()) + private val cs: CoroutineScope = parentCs.childScope(this::class, ModalityState.stateForComponent(window).asContextElement()) init { title = message("snippet.create.dialog.title") diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/snippets/GitLabSnippetService.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/snippets/GitLabSnippetService.kt index 1546016021bd..15790547f269 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/snippets/GitLabSnippetService.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/snippets/GitLabSnippetService.kt @@ -2,7 +2,9 @@ package org.jetbrains.plugins.gitlab.snippets import com.intellij.collaboration.async.cancelAndJoinSilently +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.snippets.PathHandlingMode +import com.intellij.collaboration.snippets.PathHandlingMode.Companion.getFileNameExtractor import com.intellij.collaboration.util.ResultUtil.runCatchingUser import com.intellij.ide.BrowserUtil import com.intellij.notification.NotificationListener @@ -18,7 +20,6 @@ import com.intellij.openapi.vcs.VcsNotifier import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.isFile import com.intellij.platform.ide.progress.withBackgroundProgress -import com.intellij.platform.util.coroutines.childScope import com.intellij.util.asSafely import kotlinx.coroutines.* import org.jetbrains.plugins.gitlab.api.GitLabApi @@ -35,7 +36,6 @@ import org.jetbrains.plugins.gitlab.authentication.accounts.GitLabAccountManager import org.jetbrains.plugins.gitlab.mergerequest.ui.toolwindow.GitLabSelectorErrorStatusPresenter.Companion.isAuthorizationException import org.jetbrains.plugins.gitlab.mergerequest.util.localizedMessageOrClassName import org.jetbrains.plugins.gitlab.snippets.GitLabSnippetService.Companion.GL_SNIPPET_FILES_LIMIT -import com.intellij.collaboration.snippets.PathHandlingMode.Companion.getFileNameExtractor import org.jetbrains.plugins.gitlab.util.GitLabBundle.message import org.jetbrains.plugins.gitlab.util.GitLabStatistics.SnippetAction.* import org.jetbrains.plugins.gitlab.util.GitLabStatistics.logSnippetActionExecuted @@ -249,7 +249,7 @@ internal class GitLabSnippetService(private val project: Project, private val se files.map { file -> extractor(file) }.toSet().size == files.size // Check that there are no duplicates when mapped } - val vmCs = childScope() + val vmCs = childScope(this::class) val vm = GitLabCreateSnippetViewModel( vmCs, project, diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/ui/clone/model/GitLabCloneLoginViewModel.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/ui/clone/model/GitLabCloneLoginViewModel.kt index 93de9537a4e6..2f44f07ce236 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/ui/clone/model/GitLabCloneLoginViewModel.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/ui/clone/model/GitLabCloneLoginViewModel.kt @@ -1,8 +1,8 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.gitlab.ui.clone.model +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.auth.ui.login.LoginModel -import com.intellij.platform.util.coroutines.childScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.collectLatest @@ -21,7 +21,7 @@ internal class GitLabCloneLoginViewModelImpl( parentCs: CoroutineScope, private val accountManager: GitLabAccountManager ) : GitLabCloneLoginViewModel { - private val cs: CoroutineScope = parentCs.childScope() + private val cs: CoroutineScope = parentCs.childScope(this::class) private var selectedAccount: GitLabAccount? = null override val accounts: SharedFlow> = accountManager.accountsState diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/ui/comment/GitLabDiscussionReplyViewModel.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/ui/comment/GitLabDiscussionReplyViewModel.kt index 165043c1c399..000d6932143f 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/ui/comment/GitLabDiscussionReplyViewModel.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/ui/comment/GitLabDiscussionReplyViewModel.kt @@ -1,11 +1,11 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.gitlab.ui.comment +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.async.mapScoped import com.intellij.collaboration.async.modelFlow import com.intellij.openapi.diagnostic.thisLogger import com.intellij.openapi.project.Project -import com.intellij.platform.util.coroutines.childScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow @@ -27,7 +27,7 @@ class GitLabDiscussionReplyViewModelImpl( discussion: GitLabDiscussion ) : GitLabDiscussionReplyViewModel { - private val cs = parentCs.childScope() + private val cs = parentCs.childScope(this::class) private val isWriting = MutableStateFlow(false) override val newNoteVm: Flow = isWriting.mapScoped { diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/ui/comment/GitLabMergeRequestDiscussionViewModel.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/ui/comment/GitLabMergeRequestDiscussionViewModel.kt index a49f896880d2..833582899c33 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/ui/comment/GitLabMergeRequestDiscussionViewModel.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/ui/comment/GitLabMergeRequestDiscussionViewModel.kt @@ -6,9 +6,7 @@ import com.intellij.collaboration.ui.codereview.timeline.thread.CodeReviewResolv import com.intellij.collaboration.util.SingleCoroutineLauncher import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.project.Project -import com.intellij.platform.util.coroutines.childScope import kotlinx.coroutines.CancellationException -import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.* @@ -45,7 +43,7 @@ internal class GitLabMergeRequestDiscussionViewModelBase( private val discussion: GitLabMergeRequestDiscussion ) : GitLabMergeRequestDiscussionViewModel { - private val cs = parentCs.childScope(CoroutineExceptionHandler { _, e -> LOG.warn(e) }) + private val cs = parentCs.childScope(this::class) private val taskLauncher = SingleCoroutineLauncher(cs) override val isBusy: StateFlow = taskLauncher.busy @@ -106,7 +104,7 @@ class GitLabMergeRequestStandaloneDraftNoteViewModelBase internal constructor( mr: GitLabMergeRequest ) : GitLabNoteViewModel { - private val cs = parentCs.childScope(CoroutineExceptionHandler { _, e -> LOG.warn(e) }) + private val cs = parentCs.childScope(this::class) override val id: GitLabId = note.id override val author: GitLabUserDTO = note.author diff --git a/plugins/gitlab/gitlab-core/test/org/jetbrains/plugins/gitlab/mergerequest/ui/toolwindow/GitLabRepositoryAndAccountSelectorViewModelTest.kt b/plugins/gitlab/gitlab-core/test/org/jetbrains/plugins/gitlab/mergerequest/ui/toolwindow/GitLabRepositoryAndAccountSelectorViewModelTest.kt index 12b0f5389418..7e22db6d3ce9 100644 --- a/plugins/gitlab/gitlab-core/test/org/jetbrains/plugins/gitlab/mergerequest/ui/toolwindow/GitLabRepositoryAndAccountSelectorViewModelTest.kt +++ b/plugins/gitlab/gitlab-core/test/org/jetbrains/plugins/gitlab/mergerequest/ui/toolwindow/GitLabRepositoryAndAccountSelectorViewModelTest.kt @@ -1,9 +1,9 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.gitlab.mergerequest.ui.toolwindow +import com.intellij.collaboration.async.childScope import com.intellij.collaboration.util.MainDispatcherRule import com.intellij.openapi.project.Project -import com.intellij.platform.util.coroutines.childScope import io.mockk.coEvery import io.mockk.every import io.mockk.mockk @@ -50,7 +50,7 @@ internal class GitLabRepositoryAndAccountSelectorViewModelTest { coEvery { accountManager.getCredentialsState(any(), any()) } returns MutableStateFlow("") every { accountManager.canPersistCredentials } returns MutableStateFlow(true) - val scope = childScope(Dispatchers.Main) + val scope = childScope(this::class, Dispatchers.Main) val vm = GitLabRepositoryAndAccountSelectorViewModel(project, scope, projectManager, accountManager) { _, _ -> mockk() } assertEquals(projectMapping, vm.repoSelectionState.value) @@ -80,7 +80,7 @@ internal class GitLabRepositoryAndAccountSelectorViewModelTest { coEvery { accountManager.getCredentialsState(any(), any()) } returns MutableStateFlow("") every { accountManager.canPersistCredentials } returns MutableStateFlow(true) - val scope = childScope(Dispatchers.Main) + val scope = childScope(this::class, Dispatchers.Main) val vm = GitLabRepositoryAndAccountSelectorViewModel(project, scope, projectManager, accountManager) { _, _ -> mockk() } assertEquals(null, vm.repoSelectionState.value) diff --git a/plugins/gitlab/gitlab-core/testApi/org/jetbrains/plugins/gitlab/apitests/GitLabApiTest.kt b/plugins/gitlab/gitlab-core/testApi/org/jetbrains/plugins/gitlab/apitests/GitLabApiTest.kt index d92550dc5e2a..16a9916ec516 100644 --- a/plugins/gitlab/gitlab-core/testApi/org/jetbrains/plugins/gitlab/apitests/GitLabApiTest.kt +++ b/plugins/gitlab/gitlab-core/testApi/org/jetbrains/plugins/gitlab/apitests/GitLabApiTest.kt @@ -3,10 +3,8 @@ package org.jetbrains.plugins.gitlab.apitests import com.intellij.collaboration.api.page.ApiPageUtil import com.intellij.collaboration.api.page.foldToList -import com.intellij.collaboration.async.cancelAndJoinSilently import com.intellij.collaboration.async.withInitial import com.intellij.openapi.components.service -import com.intellij.platform.util.coroutines.childScope import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.fold @@ -297,10 +295,9 @@ class GitLabApiTest : GitLabApiTestCase() { fun `GQL getMergeRequestStateEvents works`() = runTest { checkVersion(after(v(13, 2))) - val cs = childScope() requiresAuthentication { api -> val reloadRequest = MutableSharedFlow(1).withInitial(Unit) - val loader = startGitLabRestETagListLoaderIn(cs, + val loader = startGitLabRestETagListLoaderIn(backgroundScope, getMergeRequestStateEventsUri(glTest1Coordinates, "1"), { it.id }, reloadRequest) { uri, eTag -> @@ -313,17 +310,15 @@ class GitLabApiTest : GitLabApiTestCase() { assertNotNull(result) assertEquals(listOf(1), result?.map { it.id }) } - cs.cancelAndJoinSilently() } @Test fun `GQL getMergeRequestLabelEvents works`() = runTest { checkVersion(after(v(11, 4))) - val cs = childScope() requiresAuthentication { api -> val reloadRequest = MutableSharedFlow(1).withInitial(Unit) - val loader = startGitLabRestETagListLoaderIn(cs, + val loader = startGitLabRestETagListLoaderIn(backgroundScope, getMergeRequestLabelEventsUri(glTest1Coordinates, "1"), { it.id }, reloadRequest) { uri, eTag -> @@ -336,17 +331,15 @@ class GitLabApiTest : GitLabApiTestCase() { assertNotNull(result) assertEquals(listOf(3, 4, 5), result?.map { it.id }) } - cs.cancelAndJoinSilently() } @Test fun `GQL getMergeRequestMilestoneEvents works`() = runTest { checkVersion(after(v(13, 1))) - val cs = childScope() requiresAuthentication { api -> val reloadRequest = MutableSharedFlow(1).withInitial(Unit) - val loader = startGitLabRestETagListLoaderIn(cs, + val loader = startGitLabRestETagListLoaderIn(backgroundScope, getMergeRequestMilestoneEventsUri(glTest1Coordinates, "1"), { it.id }, reloadRequest) { uri, eTag -> @@ -359,7 +352,6 @@ class GitLabApiTest : GitLabApiTestCase() { assertNotNull(result) assertEquals(listOf(3, 4), result?.map { it.id }) } - cs.cancelAndJoinSilently() } @Test