load jps libraries concurrently
[idea/community.git] / plugins / git4idea / src / git4idea / merge / GitChangesViewNodeAction.kt
1 // Copyright 2000-2021 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.
2 package git4idea.merge
3
4 import com.intellij.icons.AllIcons
5 import com.intellij.openapi.project.Project
6 import com.intellij.openapi.vcs.FileStatus
7 import com.intellij.openapi.vcs.changes.Change
8 import com.intellij.openapi.vcs.changes.ChangesUtil
9 import com.intellij.openapi.vcs.changes.ChangesViewNodeAction
10 import com.intellij.openapi.vcs.changes.ui.ChangesBrowserNode
11 import com.intellij.openapi.vcs.changes.ui.HoverIcon
12 import git4idea.conflicts.GitConflictsUtil.showMergeWindow
13 import git4idea.i18n.GitBundle
14 import git4idea.index.ui.createMergeHandler
15 import git4idea.repo.GitRepositoryManager
16
17 class GitChangesViewNodeAction(val project: Project) : ChangesViewNodeAction {
18   override fun createNodeHoverIcon(node: ChangesBrowserNode<*>): HoverIcon? {
19     val change = node.userObject as? Change ?: return null
20     if (change.fileStatus != FileStatus.MERGED_WITH_CONFLICTS) return null
21
22     val path = ChangesUtil.getFilePath(change)
23     val stagingAreaHolder = GitRepositoryManager.getInstance(project).getRepositoryForFileQuick(path)?.stagingAreaHolder
24     if (stagingAreaHolder?.findConflict(path) == null) return null
25
26     return GitMergeHoverIcon(project)
27   }
28
29   private data class GitMergeHoverIcon(val project: Project)
30     : HoverIcon(AllIcons.Vcs.Merge, GitBundle.message("changes.view.merge.action.text")) {
31     override fun invokeAction(node: ChangesBrowserNode<*>) {
32       val change = node.userObject as? Change ?: return
33
34       val path = ChangesUtil.getFilePath(change)
35       val stagingAreaHolder = GitRepositoryManager.getInstance(project).getRepositoryForFileQuick(path)?.stagingAreaHolder
36       val conflict = stagingAreaHolder?.findConflict(path) ?: return
37
38       showMergeWindow(project, createMergeHandler(project), listOf(conflict))
39     }
40   }
41 }