From f4e8b5008069bc246eab22c8a2aa86236f8cb618 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Tue, 30 Apr 2013 14:33:00 +0400 Subject: [PATCH] [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 --- .../src/git4idea/merge/GitMergeProvider.java | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/plugins/git4idea/src/git4idea/merge/GitMergeProvider.java b/plugins/git4idea/src/git4idea/merge/GitMergeProvider.java index 6f8d8953e51d..3e5dcd92cf8b 100644 --- a/plugins/git4idea/src/git4idea/merge/GitMergeProvider.java +++ b/plugins/git4idea/src/git4idea/merge/GitMergeProvider.java @@ -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 myReverseMap; + @NotNull private final Set myReverseRoots; - private GitMergeProvider(@NotNull Project project, @NotNull Map reverseMap) { + private GitMergeProvider(@NotNull Project project, @NotNull Set 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 buildReverseMap(@NotNull Project project, @Nullable Boolean reverseOrDetect) { - Map reverseMap = ContainerUtil.newHashMap(); + private static Set findReverseRoots(@NotNull Project project, @Nullable Boolean reverseOrDetect) { + Set 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) {