summaryrefslogtreecommitdiff
path: root/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/visible/FilterGraphWithHiddenNodes.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/visible/FilterGraphWithHiddenNodes.java')
-rw-r--r--platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/visible/FilterGraphWithHiddenNodes.java21
1 files changed, 20 insertions, 1 deletions
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/visible/FilterGraphWithHiddenNodes.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/visible/FilterGraphWithHiddenNodes.java
index 72f02273d488..667b8c744fc4 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/visible/FilterGraphWithHiddenNodes.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/visible/FilterGraphWithHiddenNodes.java
@@ -19,6 +19,7 @@ package com.intellij.vcs.log.graph.impl.visible;
import com.intellij.openapi.util.Condition;
import com.intellij.util.Consumer;
import com.intellij.util.SmartList;
+import com.intellij.util.containers.MultiMap;
import com.intellij.vcs.log.graph.api.LinearGraph;
import com.intellij.vcs.log.graph.api.LinearGraphWithHiddenNodes;
import com.intellij.vcs.log.graph.api.elements.GraphEdge;
@@ -39,6 +40,9 @@ public class FilterGraphWithHiddenNodes implements LinearGraphWithHiddenNodes {
private final Flags myVisibleNodes;
@NotNull
+ private final DottedEdges myDottedEdges;
+
+ @NotNull
private final SetListenerController<UpdateListener> myListenerController = new SetListenerController<UpdateListener>();
public FilterGraphWithHiddenNodes(@NotNull LinearGraphWithHiddenNodes delegateGraph, @NotNull Condition<Integer> isVisibleNode) {
@@ -47,6 +51,10 @@ public class FilterGraphWithHiddenNodes implements LinearGraphWithHiddenNodes {
for (int i = 0; i < delegateGraph.nodesCount(); i++) {
myVisibleNodes.set(i, delegateGraph.nodeIsVisible(i) && isVisibleNode.value(i)); // todo: think about it: may be drop myVisibleNodes
}
+
+ MultiMap<Integer, Integer> edges = DottedEdgesComputer.compute(myDelegateGraph, myVisibleNodes);
+ myDottedEdges = DottedEdges.newInstance(edges);
+
addUpdateListener();
}
@@ -78,7 +86,10 @@ public class FilterGraphWithHiddenNodes implements LinearGraphWithHiddenNodes {
@NotNull
@Override
public GraphEdge.Type getEdgeType(int upNodeIndex, int downNodeIndex) {
- return GraphEdge.Type.USUAL;
+ if (myDottedEdges.getAdjacentNodes(upNodeIndex).contains(downNodeIndex))
+ return GraphEdge.Type.HIDE;
+ else
+ return GraphEdge.Type.USUAL;
}
@NotNull
@@ -100,6 +111,10 @@ public class FilterGraphWithHiddenNodes implements LinearGraphWithHiddenNodes {
if (nodeIsVisible(upNode))
upNodes.add(upNode);
}
+ for (int adjNode : myDottedEdges.getAdjacentNodes(nodeIndex)) {
+ if (adjNode < nodeIndex)
+ upNodes.add(adjNode);
+ }
return upNodes;
}
@@ -111,6 +126,10 @@ public class FilterGraphWithHiddenNodes implements LinearGraphWithHiddenNodes {
if (downNode != LinearGraph.NOT_LOAD_COMMIT && nodeIsVisible(downNode))
downNodes.add(downNode);
}
+ for (int adjNode : myDottedEdges.getAdjacentNodes(nodeIndex)) {
+ if (adjNode > nodeIndex)
+ downNodes.add(adjNode);
+ }
return downNodes;
}
}