public List build()

in util/base/src/main/java/jetbrains/jetpad/base/diff/DifferenceBuilder.java [30:76]


  public List<DifferenceItem> build() {
    List<DifferenceItem> result = new ArrayList<>();

    List<ItemT> sourceContent = mySourceList;
    List<ItemT> target = new ArrayList<>(myTargetList);

    for (int i = target.size() - 1; i >= 0; i--) {
      ItemT current = target.get(i);
      if (!(sourceContent.contains(current))) {
        result.add(new DifferenceItem(i, current, false));
        target.remove(i);
      }
    }

    for (int i = 0; i < sourceContent.size(); i++) {
      ItemT current = sourceContent.get(i);
      ItemT next = null;
      if (i + 1 < sourceContent.size()) {
        next = sourceContent.get(i + 1);
      }

      if (target.size() <= i) {
        result.add(new DifferenceItem(i, current, true));
        target.add(i, current);
      } else {
        ItemT currentTarget = target.get(i);
        if (currentTarget != current) {
          int currentIndex = target.indexOf(current);
          if (currentIndex != -1) {
            result.add(new DifferenceItem(currentIndex, current, false));
            target.remove(current);
          }

          if (next == currentTarget) {
            result.add(new DifferenceItem(i, current, true));
            target.add(i, current);
          } else {
            result.add(new DifferenceItem(i, currentTarget, false));
            result.add(new DifferenceItem(i, current, true));
            target.set(i, current);
          }
        }
      }
     }

    return result;
  }