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 0d540421d071..f8bade5a746c 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 @@ -1,9 +1,7 @@ package com.intellij.vcs.log.graph.render; -import com.intellij.vcs.log.Hash; import com.intellij.vcs.log.VcsRef; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.util.Collection; @@ -14,14 +12,8 @@ public class CommitCell { private final String text; private final Collection refsToThisCommit; - private Hash myHash; - /** - * Hash can be null, if, for example, this is a cell which doesn't contain a commit, but contains only a part of the graph - * (such situations may appear, for example, if graph is filtered by branch, as described in IDEA-115442). - */ - public CommitCell(@Nullable Hash hash, @NotNull String text, @NotNull Collection refsToThisCommit) { - myHash = hash; + public CommitCell(@NotNull String text, @NotNull Collection refsToThisCommit) { this.text = text; this.refsToThisCommit = refsToThisCommit; } @@ -34,8 +26,4 @@ public class CommitCell { return refsToThisCommit; } - @Nullable - public Hash getHash() { - return myHash; - } } 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 00a895020589..ae7d35130f25 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 @@ -1,10 +1,8 @@ package com.intellij.vcs.log.graph.render; -import com.intellij.vcs.log.Hash; import com.intellij.vcs.log.VcsRef; import com.intellij.vcs.log.printmodel.GraphPrintCell; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.util.Collection; @@ -16,9 +14,9 @@ public class GraphCommitCell extends CommitCell { private final GraphPrintCell row; - public GraphCommitCell(@Nullable Hash hash, @NotNull GraphPrintCell row, @NotNull String text, + public GraphCommitCell(@NotNull GraphPrintCell row, @NotNull String text, @NotNull Collection refsToThisCommit) { - super(hash, text, refsToThisCommit); + super(text, refsToThisCommit); this.row = row; } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogImpl.java index 7467c47c2c88..e645505dc90d 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogImpl.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogImpl.java @@ -21,7 +21,6 @@ import com.intellij.vcs.log.Hash; import com.intellij.vcs.log.VcsFullCommitDetails; import com.intellij.vcs.log.VcsLog; import com.intellij.vcs.log.data.VcsLogDataHolder; -import com.intellij.vcs.log.graph.render.CommitCell; import com.intellij.vcs.log.ui.VcsLogUI; import com.intellij.vcs.log.ui.tables.AbstractVcsLogTableModel; import org.jetbrains.annotations.NotNull; @@ -57,8 +56,7 @@ public class VcsLogImpl implements VcsLog { List hashes = ContainerUtil.newArrayList(); JBTable table = myUi.getTable(); for (int row : table.getSelectedRows()) { - CommitCell cell = (CommitCell)table.getModel().getValueAt(row, AbstractVcsLogTableModel.COMMIT_COLUMN); - Hash hash = cell.getHash(); + Hash hash = ((AbstractVcsLogTableModel)table.getModel()).getHashAtRow(row); if (hash != null) { hashes.add(hash); } 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 350dbf72968b..e092be5fc456 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 @@ -15,7 +15,6 @@ import com.intellij.vcs.log.VcsFullCommitDetails; import com.intellij.vcs.log.VcsRef; import com.intellij.vcs.log.data.LoadingDetails; import com.intellij.vcs.log.data.VcsLogDataHolder; -import com.intellij.vcs.log.graph.render.CommitCell; import com.intellij.vcs.log.graph.render.PrintParameters; import com.intellij.vcs.log.ui.VcsLogColorManager; import com.intellij.vcs.log.ui.render.RefPainter; @@ -83,8 +82,7 @@ class DetailsPanel extends JPanel implements ListSelectionListener { } else { ((CardLayout)getLayout()).show(this, STANDARD_LAYER); - CommitCell cell = (CommitCell)myGraphTable.getModel().getValueAt(rows[0], AbstractVcsLogTableModel.COMMIT_COLUMN); - Hash hash = cell.getHash(); + Hash hash = ((AbstractVcsLogTableModel)myGraphTable.getModel()).getHashAtRow(rows[0]); if (hash == null) { showMessage("Nothing selected"); return; diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/tables/AbstractVcsLogTableModel.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/tables/AbstractVcsLogTableModel.java index af14fadb9a9c..dcde63dd09fa 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/tables/AbstractVcsLogTableModel.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/tables/AbstractVcsLogTableModel.java @@ -4,6 +4,7 @@ import com.intellij.openapi.vcs.changes.Change; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.newvfs.impl.NullVirtualFile; import com.intellij.util.text.DateFormatUtil; +import com.intellij.vcs.log.Hash; import com.intellij.vcs.log.VcsShortCommitDetails; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -80,6 +81,14 @@ public abstract class AbstractVcsLogTableModel extends AbstractTableModel { @NotNull protected abstract Class getCommitColumnClass(); + /** + * Returns the Hash of the commit displayed in the given row. + * May be null if there is no commit in the row + * (such situations may appear, for example, if graph is filtered by branch, as described in IDEA-115442). + */ + @Nullable + public abstract Hash getHashAtRow(int row); + @Override public Class getColumnClass(int column) { switch (column) { 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 74930db59073..406d4c4fa82c 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 @@ -121,7 +121,7 @@ public class GraphTableModel extends AbstractVcsLogTableModel { message = details.getSubject(); refs = (List)myDataPack.getRefsModel().refsToCommit(details.getHash()); } - return new GraphCommitCell(hash, graphPrintCell, message, refs); + return new GraphCommitCell(graphPrintCell, message, refs); } @NotNull @@ -129,4 +129,12 @@ public class GraphTableModel extends AbstractVcsLogTableModel { protected Class getCommitColumnClass() { return GraphCommitCell.class; } + + @Nullable + @Override + public Hash getHashAtRow(int row) { + Node node = myDataPack.getGraphModel().getGraph().getCommitNodeInRow(row); + return node == null ? null : node.getCommitHash(); + + } } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/tables/NoGraphTableModel.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/tables/NoGraphTableModel.java index 124bd7fc976a..3ce91ac69d4e 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/tables/NoGraphTableModel.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/tables/NoGraphTableModel.java @@ -4,6 +4,7 @@ import com.intellij.openapi.diagnostic.Attachment; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.vcs.changes.Change; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.vcs.log.Hash; import com.intellij.vcs.log.VcsFullCommitDetails; import com.intellij.vcs.log.VcsRef; import com.intellij.vcs.log.VcsShortCommitDetails; @@ -96,7 +97,7 @@ public class NoGraphTableModel extends AbstractVcsLogTableModel { subject = details.getSubject(); refs = myRefsModel.refsToCommit(details.getHash()); } - return new CommitCell(myCommits.get(index).getHash(), subject, refs); + return new CommitCell(subject, refs); } @NotNull @@ -105,4 +106,10 @@ public class NoGraphTableModel extends AbstractVcsLogTableModel { return CommitCell.class; } + @Nullable + @Override + public Hash getHashAtRow(int row) { + return myCommits.get(row).getHash(); + } + }