From 6377dc26e31c08bfef79d23f4be7c1ad76dfef31 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Tue, 29 Oct 2013 19:32:20 +0400 Subject: [PATCH] [log] Allow null roots in the GraphTableModel. Some rows may be empty (contain no commits): for instance, in the case of graph filtered by branch, when there will be just graph fragments drawn. Therefore it is not an error to have a null node, and therefore it is not an error to receive the FAKE_ROOT in the color manager. Supply correct root to the LoadingDetails (the root is known because is taken from the Branch of a Node). --- .../impl/src/com/intellij/vcs/log/data/DataGetter.java | 4 ++-- .../src/com/intellij/vcs/log/data/LoadingDetails.java | 7 +++---- .../com/intellij/vcs/log/ui/VcsLogColorManagerImpl.java | 4 ++++ .../vcs/log/ui/tables/AbstractVcsLogTableModel.java | 2 +- .../com/intellij/vcs/log/ui/tables/GraphTableModel.java | 8 +------- .../com/intellij/vcs/log/ui/tables/NoGraphTableModel.java | 2 +- 6 files changed, 12 insertions(+), 15 deletions(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/DataGetter.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/DataGetter.java index 8105e758d292..dca343bed358 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/DataGetter.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/DataGetter.java @@ -80,7 +80,7 @@ public abstract class DataGetter implements Dis @NotNull private T loadingDetails(Node node, Hash hash) { TaskDescriptor descriptor = runLoadAroundCommitData(node); - T loadingDetails = (T)new LoadingDetails(hash, descriptor.getTaskNum()); + T loadingDetails = (T)new LoadingDetails(hash, descriptor.getTaskNum(), node.getBranch().getRepositoryRoot()); return loadingDetails; } @@ -145,7 +145,7 @@ public abstract class DataGetter implements Dis // fill the cache with temporary "Loading" values to avoid producing queries for each commit that has not been cached yet, // even if it will be loaded within a previous query if (!myCache.isKeyCached(hash)) { - myCache.put(hash, (T)new LoadingDetails(hash, taskNumber)); + myCache.put(hash, (T)new LoadingDetails(hash, taskNumber, commitNode.getBranch().getRepositoryRoot())); } } } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/LoadingDetails.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/LoadingDetails.java index e907a47f8585..11db6c8db62b 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/LoadingDetails.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/LoadingDetails.java @@ -1,9 +1,9 @@ package com.intellij.vcs.log.data; import com.intellij.openapi.vcs.changes.Change; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.vcs.log.Hash; import com.intellij.vcs.log.impl.VcsFullCommitDetailsImpl; -import com.intellij.vcs.log.ui.tables.AbstractVcsLogTableModel; import org.jetbrains.annotations.NotNull; import java.util.Collections; @@ -18,9 +18,8 @@ public class LoadingDetails extends VcsFullCommitDetailsImpl { private final long myLoadingTaskIndex; - public LoadingDetails(@NotNull Hash hash, long loadingTaskIndex) { - super(hash, Collections.emptyList(), -1, AbstractVcsLogTableModel.UNKNOWN_ROOT, - "Loading...", "", "", "", "", "", -1, Collections.emptyList()); + public LoadingDetails(@NotNull Hash hash, long loadingTaskIndex, @NotNull VirtualFile root) { + super(hash, Collections.emptyList(), -1, root, "Loading...", "", "", "", "", "", -1, Collections.emptyList()); myLoadingTaskIndex = loadingTaskIndex; } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogColorManagerImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogColorManagerImpl.java index 43d678da496d..27acafd31052 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogColorManagerImpl.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogColorManagerImpl.java @@ -5,6 +5,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.JBColor; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.UIUtil; +import com.intellij.vcs.log.ui.tables.AbstractVcsLogTableModel; import org.jetbrains.annotations.NotNull; import java.awt.*; @@ -51,6 +52,9 @@ public class VcsLogColorManagerImpl implements VcsLogColorManager { @NotNull @Override public Color getRootColor(@NotNull VirtualFile root) { + if (root == AbstractVcsLogTableModel.FAKE_ROOT) { + return UIUtil.getTableBackground(); + } Color color = myRoots2Colors.get(root); if (color == null) { LOG.error("No color record for root " + root + ". All roots: " + myRoots2Colors); 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 dcde63dd09fa..bee2ed6e0ef7 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 @@ -17,7 +17,7 @@ import java.util.List; */ public abstract class AbstractVcsLogTableModel extends AbstractTableModel { - public static final VirtualFile UNKNOWN_ROOT = NullVirtualFile.INSTANCE; + public static final VirtualFile FAKE_ROOT = NullVirtualFile.INSTANCE; public static final int ROOT_COLUMN = 0; public static final int COMMIT_COLUMN = 1; 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 406d4c4fa82c..8cd09242275d 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 @@ -100,13 +100,7 @@ public class GraphTableModel extends AbstractVcsLogTableModel { @Override protected VirtualFile getRoot(int rowIndex) { Node commitNode = myDataPack.getGraphModel().getGraph().getCommitNodeInRow(rowIndex); - if (commitNode != null) { - return commitNode.getBranch().getRepositoryRoot(); - } - else { - LOG.error("Couldn't identify commit node at " + rowIndex); - return UNKNOWN_ROOT; - } + return commitNode != null ? commitNode.getBranch().getRepositoryRoot() : FAKE_ROOT; } @NotNull 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 3ce91ac69d4e..f39d548edd3d 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 @@ -84,7 +84,7 @@ public class NoGraphTableModel extends AbstractVcsLogTableModel { } else { LOG.error("Couldn't identify root for commit at " + rowIndex, new Attachment("loaded_commits", myCommits.toString())); - return UNKNOWN_ROOT; + return FAKE_ROOT; } }