code: private static long start(Range<Long> range) {
          if (range.lowerBoundType() == BoundType.OPEN) {
              return DiscreteDomain.longs().next(range.lowerEndpoint());
          } else {
              return range.lowerEndpoint();
          }
      }
docs: Get the start of the range. Always use this method to get the start of a
  range because it respects the bound type.
  @param range
  @return Start of the range