public static <OT, NT> void diff(@NotNull FlyweightCapableTreeStructure<OT> oldTree,
                                   @NotNull FlyweightCapableTreeStructure<NT> newTree,
                                   @NotNull ShallowNodeComparator<? super OT, ? super NT> comparator,
                                   @NotNull DiffTreeChangeBuilder<? super OT, ? super NT> consumer,
                                   @NotNull CharSequence oldText) {
    DiffTree<OT, NT> tree = new DiffTree<>(oldTree, newTree, comparator, oldText);
    tree.build(oldTree.getRoot(), newTree.getRoot(), 0, consumer);
  }
public static <OT, NT> void diff(@NotNull FlyweightCapableTreeStructure<OT> oldTree,
                                   @NotNull FlyweightCapableTreeStructure<NT> newTree,
                                   @NotNull ShallowNodeComparator<? super OT, ? super NT> comparator,
                                   @NotNull DiffTreeChangeBuilder<? super OT, ? super NT> consumer,
                                   @NotNull CharSequence oldText)