code: private void computeFullStartPositionMinimum(int position)
        throws IOException {
      if (ignoreSpans != null && !minFullStartPosition.containsKey(position)) {
        HashSet<Integer> list = baseStartPositionList.get(position);
        HashSet<Integer> newList = new HashSet<>();
        int minimumStartPosition = position;
        while (list != null && !list.isEmpty()) {
          newList.clear();
          for (int startPosition : list) {
            if (minFullStartPosition.containsKey(startPosition)) {
              minimumStartPosition = Math.min(minimumStartPosition,
                  minFullStartPosition.get(startPosition));
            } else if (baseStartPositionList.containsKey(startPosition)) {
              newList.addAll(baseStartPositionList.get(startPosition));
            } else {
              if (startPosition < minimumStartPosition) {
                minimumStartPosition = startPosition;
              }
            }
          }
          list.clear();
          list.addAll(newList);
        }
        minFullStartPosition.put(position, minimumStartPosition);
      }
    }
docs: Compute full start position minimum.
  
  @param position the position
  @throws IOException Signals that an I/O exception has occurred.