mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[git] GitMergeProvider: use Set instead of Map<..., Boolean>
Also solves a potential NPE in checking myReverseMap.get(root). Relates to the fix for IDEA-78808
This commit is contained in:
@@ -47,6 +47,7 @@ import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Merge-changes provider for Git, used by IDEA internal 3-way merge tool
|
||||
@@ -63,28 +64,30 @@ public class GitMergeProvider implements MergeProvider2 {
|
||||
* If true the merge provider has a reverse meaning, i. e. yours and theirs are swapped.
|
||||
* It should be used when conflict is resolved after rebase or unstash.
|
||||
*/
|
||||
@NotNull private final Map<VirtualFile, Boolean> myReverseMap;
|
||||
@NotNull private final Set<VirtualFile> myReverseRoots;
|
||||
|
||||
private GitMergeProvider(@NotNull Project project, @NotNull Map<VirtualFile, Boolean> reverseMap) {
|
||||
private GitMergeProvider(@NotNull Project project, @NotNull Set<VirtualFile> reverseRoots) {
|
||||
myProject = project;
|
||||
myReverseMap = reverseMap;
|
||||
myReverseRoots = reverseRoots;
|
||||
}
|
||||
|
||||
public GitMergeProvider(@NotNull Project project, boolean reverse) {
|
||||
this(project, buildReverseMap(project, reverse));
|
||||
this(project, findReverseRoots(project, reverse));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static MergeProvider detect(@NotNull Project project) {
|
||||
return new GitMergeProvider(project, buildReverseMap(project, null));
|
||||
return new GitMergeProvider(project, findReverseRoots(project, null));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static Map<VirtualFile, Boolean> buildReverseMap(@NotNull Project project, @Nullable Boolean reverseOrDetect) {
|
||||
Map<VirtualFile, Boolean> reverseMap = ContainerUtil.newHashMap();
|
||||
private static Set<VirtualFile> findReverseRoots(@NotNull Project project, @Nullable Boolean reverseOrDetect) {
|
||||
Set<VirtualFile> reverseMap = ContainerUtil.newHashSet();
|
||||
for (GitRepository repository : GitUtil.getRepositoryManager(project).getRepositories()) {
|
||||
boolean reverse = reverseOrDetect == null ? repository.getState().equals(GitRepository.State.REBASING) : reverseOrDetect;
|
||||
reverseMap.put(repository.getRoot(), reverse);
|
||||
if (reverse) {
|
||||
reverseMap.add(repository.getRoot());
|
||||
}
|
||||
}
|
||||
return reverseMap;
|
||||
}
|
||||
@@ -126,7 +129,7 @@ public class GitMergeProvider implements MergeProvider2 {
|
||||
|
||||
@Nullable
|
||||
private VcsRevisionNumber findLastRevisionNumber(@NotNull VirtualFile root) {
|
||||
if (myReverseMap.get(root)) {
|
||||
if (myReverseRoots.contains(root)) {
|
||||
return resolveHead(root);
|
||||
}
|
||||
else {
|
||||
@@ -179,7 +182,7 @@ public class GitMergeProvider implements MergeProvider2 {
|
||||
* @param root
|
||||
*/
|
||||
private int yoursRevision(@NotNull VirtualFile root) {
|
||||
return myReverseMap.get(root) ? THEIRS_REVISION_NUM : YOURS_REVISION_NUM;
|
||||
return myReverseRoots.contains(root) ? THEIRS_REVISION_NUM : YOURS_REVISION_NUM;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -187,7 +190,7 @@ public class GitMergeProvider implements MergeProvider2 {
|
||||
* @param root
|
||||
*/
|
||||
private int theirsRevision(@NotNull VirtualFile root) {
|
||||
return myReverseMap.get(root) ? YOURS_REVISION_NUM : THEIRS_REVISION_NUM;
|
||||
return myReverseRoots.contains(root) ? YOURS_REVISION_NUM : THEIRS_REVISION_NUM;
|
||||
}
|
||||
|
||||
public void conflictResolvedForFile(VirtualFile file) {
|
||||
|
||||
Reference in New Issue
Block a user