@Override
 public void process(
     @NotNull DiffFragment fragment, @NotNull DiffCorrection.FragmentsCollector collector) {
   if (fragment.isEqual()) {
     collector.add(fragment);
     return;
   }
   if (fragment.isOneSide()) {
     FragmentSide side = FragmentSide.chooseSide(fragment);
     DiffString text = side.getText(fragment);
     DiffString trimed = text.trim();
     if (trimed.isEmpty()) {
       collector.add(side.createFragment(text, DiffString.EMPTY, false));
       return;
     }
   }
   collector.add(fragment);
 }
 public int getEnd(@NotNull FragmentSide side) {
   return getStart(side) + StringUtil.length(side.getText(myFragment));
 }
 @NotNull
 public Document getDocument(@NotNull FragmentSide side) {
   return myDocuments[side.getIndex()];
 }
 public int getStart(@NotNull FragmentSide side) {
   return myStarts[side.getIndex()];
 }
 @Override
 @NotNull
 public ChangeSide getChangeSide(@NotNull FragmentSide side) {
   return mySides[side.getIndex()];
 }