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;
}