private void addGroup(int[] starts, int[] ends) {
      List<Data.Block> result = new ArrayList<>(3);
      int[] rangeStarts = new int[myCount];
      int[] rangeEnds = new int[myCount];

      for (int number = 0; ; number++) {
        int shift = getRangeShift(mySettings.range, number);
        if (shift == -1) break;

        for (int i = 0; i < myCount; i++) {
          rangeStarts[i] = DiffUtil.bound(starts[i] + shift, 0, myLineCount[i]);
          rangeEnds[i] = DiffUtil.bound(ends[i] - shift, 0, myLineCount[i]);
        }
        ContainerUtil.addIfNotNull(result, createBlock(rangeStarts, rangeEnds));
      }

      if (result.size() > 0) {
        myGroups.add(new Data.Group(result));
      }
    }
private void addGroup(int[] starts, int[] ends)