blob: fb1167cf109cafd01e70f653d803e2bb4fc9c7f9 [file] [log] [blame]
package com.intellij.vcs.log.graphmodel.impl;
import com.intellij.util.Function;
import com.intellij.vcs.log.graph.elements.Edge;
import com.intellij.vcs.log.graph.elements.Node;
import com.intellij.vcs.log.graph.mutable.MutableGraph;
import com.intellij.vcs.log.graph.mutable.elements.MutableNode;
import com.intellij.vcs.log.graph.mutable.elements.MutableNodeRow;
import org.jetbrains.annotations.NotNull;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
/**
* @author erokhins
*/
public class BranchVisibleNodes {
private final MutableGraph graph;
private Set<Node> visibleNodes = Collections.emptySet();
public BranchVisibleNodes(MutableGraph graph) {
this.graph = graph;
}
public Set<Node> generateVisibleBranchesNodes(@NotNull Function<Node, Boolean> isStartedNode) {
Set<Node> visibleNodes = new HashSet<Node>();
for (MutableNodeRow row : graph.getAllRows()) {
for (MutableNode node : row.getInnerNodeList()) {
if (isStartedNode.fun(node)) {
visibleNodes.add(node);
}
if (isStartedNode.fun(node) || visibleNodes.contains(node)) {
for (Edge edge : node.getInnerDownEdges()) {
visibleNodes.add(edge.getDownNode());
}
}
}
}
return visibleNodes;
}
public void setVisibleNodes(@NotNull Set<Node> visibleNodes) {
this.visibleNodes = visibleNodes;
}
public Set<Node> getVisibleNodes() {
return Collections.unmodifiableSet(visibleNodes);
}
public boolean isVisibleNode(@NotNull Node node) {
return visibleNodes.contains(node);
}
}