mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
fix (vcs): Merge AllowExcludeFromCommitStateHolder into ChangesViewWorkflowManager
Previously `workflowManager.commitWorkflowHandler` with side effect of `updateCommitWorkflowHandler` was called in the constructor blocking EDT. Also, get rid of `ChangesViewEx.isAllowExcludeFromCommit`. Fixes IJPL-219614 GitOrigin-RevId: 22c4b55d2f96d317d3288a2c82fda492d2a1917b
This commit is contained in:
committed by
intellij-monorepo-bot
parent
4f837c4b3a
commit
a866ebb5ea
@@ -758,7 +758,6 @@ f:com.intellij.openapi.vcs.changes.ChangesPreprocess
|
||||
com.intellij.openapi.vcs.changes.ChangesViewEx
|
||||
- com.intellij.openapi.vcs.changes.ChangesViewI
|
||||
- a:getCommitWorkflowHandler():com.intellij.vcs.commit.ChangesViewCommitWorkflowHandler
|
||||
- a:isAllowExcludeFromCommit():Z
|
||||
- a:resetViewImmediatelyAndRefreshLater():V
|
||||
- a:scheduleRefresh(java.lang.Runnable):V
|
||||
com.intellij.openapi.vcs.changes.ChangesViewI
|
||||
@@ -778,7 +777,6 @@ c:com.intellij.openapi.vcs.changes.ChangesViewManager
|
||||
- s:getInstance(com.intellij.openapi.project.Project):com.intellij.openapi.vcs.changes.ChangesViewI
|
||||
- s:getInstanceEx(com.intellij.openapi.project.Project):com.intellij.openapi.vcs.changes.ChangesViewEx
|
||||
- s:getLocalChangesToolWindowName(com.intellij.openapi.project.Project):java.lang.String
|
||||
- isAllowExcludeFromCommit():Z
|
||||
- isDiffPreviewAvailable():Z
|
||||
- resetViewImmediatelyAndRefreshLater():V
|
||||
- scheduleRefresh():V
|
||||
@@ -798,6 +796,7 @@ c:com.intellij.openapi.vcs.changes.ChangesViewManager$DisplayNameSupplier
|
||||
Fa:com.intellij.openapi.vcs.changes.ChangesViewWorkflowManager
|
||||
- sf:Companion:com.intellij.openapi.vcs.changes.ChangesViewWorkflowManager$Companion
|
||||
- sf:TOPIC:com.intellij.util.messages.Topic
|
||||
- a:getAllowExcludeFromCommit():kotlinx.coroutines.flow.StateFlow
|
||||
- f:getCommitWorkflowHandler():com.intellij.vcs.commit.ChangesViewCommitWorkflowHandler
|
||||
- sf:getInstance(com.intellij.openapi.project.Project):com.intellij.openapi.vcs.changes.ChangesViewWorkflowManager
|
||||
com.intellij.openapi.vcs.changes.ChangesViewWorkflowManager$ChangesViewWorkflowListener
|
||||
|
||||
-38
@@ -1,38 +0,0 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.openapi.vcs.changes
|
||||
|
||||
import com.intellij.openapi.components.Service
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.vcs.commit.ChangesViewCommitWorkflowHandler
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
|
||||
@Service(Service.Level.PROJECT)
|
||||
internal class AllowExcludeFromCommitStateHolder(project: Project) {
|
||||
private val _allowExcludeFromCommit = MutableStateFlow(false)
|
||||
val allowExcludeFromCommit: StateFlow<Boolean> = _allowExcludeFromCommit.asStateFlow()
|
||||
|
||||
init {
|
||||
val workflowManager = ChangesViewWorkflowManager.getInstance(project)
|
||||
project.messageBus.connect().subscribe(ChangesViewWorkflowManager.TOPIC, ChangesViewWorkflowManager.ChangesViewWorkflowListener {
|
||||
registerListener(workflowManager.commitWorkflowHandler)
|
||||
})
|
||||
|
||||
val currentWorkflowHandler = workflowManager.commitWorkflowHandler
|
||||
registerListener(currentWorkflowHandler)
|
||||
}
|
||||
|
||||
private fun registerListener(workflowHandler: ChangesViewCommitWorkflowHandler?) {
|
||||
workflowHandler?.addActivityListener(object : ChangesViewCommitWorkflowHandler.ActivityListener {
|
||||
override fun activityStateChanged() {
|
||||
allowExcludeFromCommit(workflowHandler)
|
||||
}
|
||||
})
|
||||
allowExcludeFromCommit(workflowHandler)
|
||||
}
|
||||
|
||||
private fun allowExcludeFromCommit(workflowHandler: ChangesViewCommitWorkflowHandler?) {
|
||||
_allowExcludeFromCommit.value = workflowHandler?.isActive == true
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -89,7 +89,7 @@ class ChangesViewDiffPreviewProcessor(
|
||||
|
||||
fun subscribeOnAllowExcludeFromCommit() {
|
||||
VcsDisposable.getInstance(project).coroutineScope.launch {
|
||||
project.serviceAsync<AllowExcludeFromCommitStateHolder>().allowExcludeFromCommit.collect {
|
||||
project.serviceAsync<ChangesViewWorkflowManager>().allowExcludeFromCommit.collect {
|
||||
withContext(Dispatchers.EDT) {
|
||||
setAllowExcludeFromCommit(it)
|
||||
}
|
||||
|
||||
@@ -16,8 +16,6 @@ interface ChangesViewEx : ChangesViewI {
|
||||
@CalledInAny
|
||||
fun scheduleRefresh(@RequiresBackgroundThread callback: Runnable)
|
||||
|
||||
val isAllowExcludeFromCommit: Boolean
|
||||
|
||||
@get:Deprecated("Use {@link ChangesViewWorkflowManager#getCommitWorkflowHandler}.")
|
||||
val commitWorkflowHandler: ChangesViewCommitWorkflowHandler?
|
||||
}
|
||||
|
||||
@@ -214,11 +214,6 @@ public class ChangesViewManager implements ChangesViewEx, Disposable {
|
||||
myToolWindowPanel.updateCommitWorkflow();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAllowExcludeFromCommit() {
|
||||
return myProject.getService(AllowExcludeFromCommitStateHolder.class).getAllowExcludeFromCommit().getValue();
|
||||
}
|
||||
|
||||
public void closeEditorPreview(boolean onlyIfEmpty) {
|
||||
if (myToolWindowPanel == null) return;
|
||||
myToolWindowPanel.closeEditorPreview(onlyIfEmpty);
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.util.messages.Topic
|
||||
import com.intellij.vcs.commit.ChangesViewCommitWorkflowHandler
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
import java.util.*
|
||||
|
||||
@@ -13,6 +14,8 @@ abstract class ChangesViewWorkflowManager @ApiStatus.Internal protected construc
|
||||
val commitWorkflowHandler: ChangesViewCommitWorkflowHandler?
|
||||
get() = doGetCommitWorkflowHandler()
|
||||
|
||||
abstract val allowExcludeFromCommit: StateFlow<Boolean>
|
||||
|
||||
@ApiStatus.Internal
|
||||
protected abstract fun doGetCommitWorkflowHandler(): ChangesViewCommitWorkflowHandler?
|
||||
|
||||
|
||||
+22
-6
@@ -10,10 +10,15 @@ import com.intellij.openapi.util.Disposer
|
||||
import com.intellij.util.concurrency.annotations.RequiresEdt
|
||||
import com.intellij.vcs.commit.*
|
||||
import com.intellij.vcs.commit.CommitModeManager.Companion.subscribeOnCommitModeChange
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
|
||||
internal class ChangesViewWorkflowManagerImpl(
|
||||
private val project: Project,
|
||||
) : ChangesViewWorkflowManager(), Disposable {
|
||||
private val _allowExcludeFromCommit = MutableStateFlow(false)
|
||||
override val allowExcludeFromCommit: StateFlow<Boolean> = _allowExcludeFromCommit.asStateFlow()
|
||||
|
||||
private var _commitWorkflowHandler: ChangesViewCommitWorkflowHandler? = null
|
||||
|
||||
@@ -43,9 +48,7 @@ internal class ChangesViewWorkflowManagerImpl(
|
||||
val changesView = (ChangesViewManager.getInstance(project) as ChangesViewManager).initChangesView()
|
||||
val workflow = ChangesViewCommitWorkflow(project)
|
||||
val commitPanel = ChangesViewCommitPanel(project, changesView)
|
||||
_commitWorkflowHandler = ChangesViewCommitWorkflowHandler(workflow, commitPanel)
|
||||
|
||||
project.messageBus.syncPublisher(TOPIC).commitWorkflowChanged()
|
||||
setCommitWorkflowHandler(ChangesViewCommitWorkflowHandler(workflow, commitPanel))
|
||||
|
||||
activity.end()
|
||||
}
|
||||
@@ -56,13 +59,26 @@ internal class ChangesViewWorkflowManagerImpl(
|
||||
else {
|
||||
if (currentHandler != null) {
|
||||
Disposer.dispose(currentHandler)
|
||||
_commitWorkflowHandler = null
|
||||
|
||||
project.messageBus.syncPublisher(TOPIC).commitWorkflowChanged()
|
||||
setCommitWorkflowHandler(null)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun setCommitWorkflowHandler(handler: ChangesViewCommitWorkflowHandler?) {
|
||||
_commitWorkflowHandler = handler
|
||||
if (handler != null) {
|
||||
handler.addActivityListener(object : ChangesViewCommitWorkflowHandler.ActivityListener {
|
||||
override fun activityStateChanged() {
|
||||
_allowExcludeFromCommit.value = handler.isActive
|
||||
}
|
||||
})
|
||||
_allowExcludeFromCommit.value = handler.isActive
|
||||
} else {
|
||||
_allowExcludeFromCommit.value = false
|
||||
}
|
||||
project.messageBus.syncPublisher(TOPIC).commitWorkflowChanged()
|
||||
}
|
||||
|
||||
override fun dispose() {
|
||||
val handler = _commitWorkflowHandler
|
||||
if (handler != null) {
|
||||
|
||||
@@ -56,11 +56,6 @@ class DummyChangesView implements ChangesViewEx {
|
||||
public void scheduleRefresh(@NotNull Runnable callback) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAllowExcludeFromCommit() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable ChangesViewCommitWorkflowHandler getCommitWorkflowHandler() {
|
||||
return null;
|
||||
|
||||
+1
-1
@@ -197,7 +197,7 @@ public class ShowDiffFromLocalChangesActionProvider implements AnActionExtension
|
||||
}
|
||||
|
||||
private static void setAllowExcludeFromCommit(@NotNull Project project, @NotNull DiffRequestChain chain) {
|
||||
boolean allowExcludeFromCommit = ChangesViewManager.getInstanceEx(project).isAllowExcludeFromCommit();
|
||||
boolean allowExcludeFromCommit = ChangesViewWorkflowManager.getInstance(project).getAllowExcludeFromCommit().getValue();
|
||||
chain.putUserData(ALLOW_EXCLUDE_FROM_COMMIT, allowExcludeFromCommit);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,8 +6,8 @@ import com.intellij.openapi.components.serviceAsync
|
||||
import com.intellij.openapi.diagnostic.logger
|
||||
import com.intellij.openapi.diagnostic.trace
|
||||
import com.intellij.openapi.vcs.AbstractVcsHelper
|
||||
import com.intellij.openapi.vcs.changes.AllowExcludeFromCommitStateHolder
|
||||
import com.intellij.openapi.vcs.changes.ChangesUtil
|
||||
import com.intellij.openapi.vcs.changes.ChangesViewWorkflowManager
|
||||
import com.intellij.openapi.vcs.changes.InclusionListener
|
||||
import com.intellij.openapi.vcs.changes.InclusionModel
|
||||
import com.intellij.openapi.vcs.changes.ui.ChangesViewContentManager
|
||||
@@ -56,7 +56,7 @@ internal class ChangesViewApiImpl : ChangesViewApi {
|
||||
}
|
||||
|
||||
override suspend fun canExcludeFromCommit(projectId: ProjectId): Flow<Boolean> = getProjectScoped(projectId) { project ->
|
||||
project.serviceAsync<AllowExcludeFromCommitStateHolder>().allowExcludeFromCommit
|
||||
project.serviceAsync<ChangesViewWorkflowManager>().allowExcludeFromCommit
|
||||
} ?: flowOf(false)
|
||||
|
||||
override suspend fun showResolveConflictsDialog(projectId: ProjectId, changeIds: List<ChangeId>) = projectScoped(projectId) { project ->
|
||||
|
||||
Reference in New Issue
Block a user