@NotNull
  public GreenFragment getGreenFragmentForCollapse(int startNode, int maxWalkSize) {
    if (myRedNodes.value(startNode)) return new GreenFragment(null, null, Collections.emptySet());
    Integer upRedNode = getNearRedNode(startNode, maxWalkSize, true);
    Integer downRedNode = getNearRedNode(startNode, maxWalkSize, false);

    Set<Integer> upPart =
      upRedNode != null ? getMiddleNodes(upRedNode, startNode, false) : getWalkNodes(startNode, true, createStopFunction(maxWalkSize));

    Set<Integer> downPart =
      downRedNode != null ? getMiddleNodes(startNode, downRedNode, false) : getWalkNodes(startNode, false, createStopFunction(maxWalkSize));

    Set<Integer> middleNodes = ContainerUtil.map2SetNotNull(ContainerUtil.union(upPart, downPart), i -> i.equals(upRedNode) ||
                                                                                                        i.equals(downRedNode) ? null : i);
    return new GreenFragment(upRedNode, downRedNode, middleNodes);
  }
@NotNull
  public GreenFragment getGreenFragmentForCollapse(int startNode, int maxWalkSize)