diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/render/CommitCell.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/render/CommitCell.java index ca3282d79af9..677975b5f020 100644 --- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/render/CommitCell.java +++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/render/CommitCell.java @@ -2,7 +2,7 @@ package com.intellij.vcs.log.graph.render; import com.intellij.vcs.log.VcsRef; -import java.util.List; +import java.util.Collection; /** * @author erokhins @@ -10,9 +10,9 @@ import java.util.List; public class CommitCell { private final String text; - private final List refsToThisCommit; + private final Collection refsToThisCommit; - public CommitCell(String text, List refsToThisCommit) { + public CommitCell(String text, Collection refsToThisCommit) { this.text = text; this.refsToThisCommit = refsToThisCommit; } @@ -21,7 +21,7 @@ public class CommitCell { return text; } - public List getRefsToThisCommit() { + public Collection getRefsToThisCommit() { return refsToThisCommit; } diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/render/GraphCommitCell.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/render/GraphCommitCell.java index 09bf3c51904b..eaf8c35a7780 100644 --- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/render/GraphCommitCell.java +++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/render/GraphCommitCell.java @@ -3,7 +3,7 @@ package com.intellij.vcs.log.graph.render; import com.intellij.vcs.log.VcsRef; import com.intellij.vcs.log.printmodel.GraphPrintCell; -import java.util.List; +import java.util.Collection; /** @@ -22,7 +22,7 @@ public class GraphCommitCell extends CommitCell { private final GraphPrintCell row; private final Kind kind; - public GraphCommitCell(GraphPrintCell row, Kind kind, String text, List refsToThisCommit) { + public GraphCommitCell(GraphPrintCell row, Kind kind, String text, Collection refsToThisCommit) { super(text, refsToThisCommit); this.kind = kind; this.row = row; diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/DataPack.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/DataPack.java index a1335118eeb4..c40e62ff2b0a 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/DataPack.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/DataPack.java @@ -182,16 +182,6 @@ public class DataPack { return new ArrayList(all); } - @Nullable - public VcsRef findRefOfNode(Node node) { - for (VcsRef ref : getRefsModel().getAllRefs()) { - if (ref.getCommitHash().equals(node.getCommitHash())) { - return ref; - } - } - return null; - } - public List getCommitsInBranchAboveBase(Node base, Node branchHead) { List result = new ArrayList(); Node node = branchHead; diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/RefsModel.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/RefsModel.java index 0ca36d30c6cd..cb82767f747c 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/RefsModel.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/RefsModel.java @@ -2,6 +2,7 @@ package com.intellij.vcs.log.data; import com.intellij.openapi.util.Condition; import com.intellij.util.containers.ContainerUtil; +import com.intellij.util.containers.MultiMap; import com.intellij.vcs.log.Hash; import com.intellij.vcs.log.VcsRef; import org.jetbrains.annotations.NotNull; @@ -13,24 +14,27 @@ import java.util.*; */ public class RefsModel { - @NotNull private final Collection myRefs; @NotNull private final Collection myBranches; - @NotNull private final Set myRefHashes; + @NotNull private final MultiMap myRefsToHashes; public RefsModel(@NotNull Collection allRefs) { - myRefs = allRefs; - - myBranches = ContainerUtil.filter(myRefs, new Condition() { + myBranches = ContainerUtil.filter(allRefs, new Condition() { @Override public boolean value(VcsRef ref) { return ref.getType().isBranch(); } }); - myRefHashes = new HashSet(); - for (VcsRef ref : myRefs) { - myRefHashes.add(ref.getCommitHash()); + myRefsToHashes = prepareRefsMap(allRefs); + } + + @NotNull + private static MultiMap prepareRefsMap(@NotNull Collection refs) { + MultiMap map = MultiMap.create(); + for (VcsRef ref : refs) { + map.putValue(ref.getCommitHash(), ref); } + return map; } public boolean isBranchRef(@NotNull Hash commitHash) { @@ -43,21 +47,11 @@ public class RefsModel { } @NotNull - public List refsToCommit(@NotNull Hash hash) { - List refs = new ArrayList(); - if (myRefHashes.contains(hash)) { - for (VcsRef ref : myRefs) { - if (ref.getCommitHash().equals(hash)) { - refs.add(ref); - } - } + public Collection refsToCommit(@NotNull Hash hash) { + if (myRefsToHashes.containsKey(hash)) { + return myRefsToHashes.get(hash); } - return refs; - } - - @NotNull - public Collection getAllRefs() { - return Collections.unmodifiableCollection(myRefs); + return Collections.emptyList(); } @NotNull diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/DetailsPanel.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/DetailsPanel.java index c35459c4f457..036326820f8c 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/DetailsPanel.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/DetailsPanel.java @@ -27,6 +27,7 @@ import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import java.awt.*; import java.awt.datatransfer.StringSelection; +import java.util.Collection; import java.util.Collections; import java.util.List; @@ -108,7 +109,7 @@ class DetailsPanel extends JPanel implements ListSelectionListener { @NotNull private List sortRefs(@NotNull Hash hash, @NotNull VirtualFile root) { - List refs = myLogDataHolder.getDataPack().getRefsModel().refsToCommit(hash); + Collection refs = myLogDataHolder.getDataPack().getRefsModel().refsToCommit(hash); return myLogDataHolder.getLogProvider(root).getReferenceManager().sort(refs); } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/GraphCommitCellRender.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/GraphCommitCellRender.java index 200063f6ac86..0c4014f060e7 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/GraphCommitCellRender.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/GraphCommitCellRender.java @@ -19,7 +19,7 @@ import javax.swing.table.TableCellRenderer; import java.awt.*; import java.awt.font.FontRenderContext; import java.awt.image.BufferedImage; -import java.util.List; +import java.util.Collection; import static com.intellij.vcs.log.graph.render.PrintParameters.HEIGHT_CELL; import static com.intellij.vcs.log.graph.render.PrintParameters.WIDTH_NODE; @@ -85,7 +85,7 @@ public class GraphCommitCellRender implements TableCellRenderer { int countCells = cell.getPrintCell().countCell(); int padding = countCells * WIDTH_NODE; - List refs = cell.getRefsToThisCommit(); + Collection refs = cell.getRefsToThisCommit(); if (!refs.isEmpty()) { VirtualFile root = refs.iterator().next().getRoot(); // all refs are from the same commit => they have the same root refs = myDataHolder.getLogProvider(root).getReferenceManager().sort(refs); diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/RefPainter.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/RefPainter.java index 759f568793a7..6d167de007aa 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/RefPainter.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/RefPainter.java @@ -7,8 +7,8 @@ import org.jetbrains.annotations.NotNull; import java.awt.*; import java.awt.font.FontRenderContext; import java.awt.geom.RoundRectangle2D; +import java.util.Collection; import java.util.HashMap; -import java.util.List; import java.util.Map; import static com.intellij.vcs.log.graph.render.PrintParameters.HEIGHT_CELL; @@ -95,7 +95,7 @@ public class RefPainter { g2.drawPolygon(polygon); } - public int padding(@NotNull List refs, @NotNull FontRenderContext renderContext) { + public int padding(@NotNull Collection refs, @NotNull FontRenderContext renderContext) { float p = 0; for (VcsRef ref : refs) { p += paddingStr(ref.getName(), renderContext); @@ -103,7 +103,7 @@ public class RefPainter { return Math.round(p); } - public Map draw(@NotNull Graphics2D g2, @NotNull List refs, int startPadding, int maxWidth) { + public Map draw(@NotNull Graphics2D g2, @NotNull Collection refs, int startPadding, int maxWidth) { float currentPadding = startPadding; g2.setFont(DEFAULT_FONT); g2.setStroke(new BasicStroke(1.5f)); diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/tables/GraphTableModel.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/tables/GraphTableModel.java index d3537a6d23c4..b82d9f49c681 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/tables/GraphTableModel.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/tables/GraphTableModel.java @@ -12,8 +12,8 @@ import com.intellij.vcs.log.printmodel.GraphPrintCell; import org.jetbrains.annotations.NotNull; import javax.swing.table.AbstractTableModel; +import java.util.Collection; import java.util.Collections; -import java.util.List; /** * @author erokhins @@ -67,7 +67,7 @@ public class GraphTableModel extends AbstractTableModel { case COMMIT_COLUMN: GraphPrintCell graphPrintCell = myDataPack.getPrintCellModel().getGraphPrintCell(rowIndex); String message = ""; - List refs = Collections.emptyList(); + Collection refs = Collections.emptyList(); if (data != null) { message = data.getSubject(); refs = myDataPack.getRefsModel().refsToCommit(data.getHash());