vcs: migrate GitStageTree to AsyncChangesTree

GitOrigin-RevId: 38cb861dff4d504ff88cb6289c97368f5ad944db
This commit is contained in:
Aleksey Pivovarov
2023-03-13 19:42:21 +00:00
committed by intellij-monorepo-bot
parent df3c76b47b
commit db4cb88dc6
2 changed files with 28 additions and 22 deletions
@@ -311,9 +311,11 @@ internal class GitStagePanel(private val tracker: GitStageTracker,
fun editedCommitChanged() {
rebuildTree()
commitPanel.editedCommit?.let {
val node = TreeUtil.findNodeWithObject(root, it)
node?.let { expandPath(TreeUtil.getPathFromRoot(node)) }
invokeAfterRefresh {
commitPanel.editedCommit?.let {
val node = TreeUtil.findNodeWithObject(root, it)
node?.let { expandPath(TreeUtil.getPathFromRoot(node)) }
}
}
}
@@ -45,7 +45,7 @@ import javax.swing.tree.DefaultTreeModel
abstract class GitStageTree(project: Project,
private val settings: GitStageUiSettings,
parentDisposable: Disposable) :
ChangesTree(project, false, true) {
AsyncChangesTree(project, false, true) {
protected abstract val state: GitStageTracker.State
protected abstract val ignoredFilePaths: Map<VirtualFile, List<FilePath>>
@@ -88,26 +88,30 @@ abstract class GitStageTree(project: Project,
protected abstract fun createHoverIcon(node: ChangesBrowserGitFileStatusNode): HoverIcon?
override fun rebuildTree() {
val builder = MyTreeModelBuilder(myProject, groupingSupport.grouping)
builder.createKindNode(NodeKind.STAGED)
builder.createKindNode(NodeKind.UNSTAGED)
state.forEachStatus(*NodeKind.values()) { root, status, kind ->
builder.insertStatus(root, status, kind)
}
if (settings.ignoredFilesShown()) {
builder.insertIgnoredPaths(ignoredFilePaths)
}
customizeTreeModel(builder)
updateTreeModel(builder.build())
}
protected open fun customizeTreeModel(builder: TreeModelBuilder) = Unit
override val changesTreeModel: AsyncChangesTreeModel = GitStateTreeModel()
private inner class GitStateTreeModel : SimpleAsyncChangesTreeModel() {
override fun buildTreeModelSync(grouping: ChangesGroupingPolicyFactory): DefaultTreeModel {
val builder = MyTreeModelBuilder(myProject, grouping)
builder.createKindNode(NodeKind.STAGED)
builder.createKindNode(NodeKind.UNSTAGED)
state.forEachStatus(*NodeKind.values()) { root, status, kind ->
builder.insertStatus(root, status, kind)
}
if (settings.ignoredFilesShown()) {
builder.insertIgnoredPaths(ignoredFilePaths)
}
customizeTreeModel(builder)
return builder.build()
}
}
override fun getData(dataId: String): Any? {
return when {
GitStageDataKeys.GIT_STAGE_TREE.`is`(dataId) -> this