@NotNull
    public List<MergeRange> build() {
      for (MergeRange range : myIterable) {
        int start1 = range.start1;
        int start2 = range.start2;
        int start3 = range.start3;
        int end1 = range.end1;
        int end2 = range.end2;
        int end3 = range.end3;

        if (isLeadingTrailingSpace(myText1, start1)) {
          start1 = trimStart(myText1, start1, end1);
        }
        if (isLeadingTrailingSpace(myText1, end1 - 1)) {
          end1 = trimEnd(myText1, start1, end1);
        }
        if (isLeadingTrailingSpace(myText2, start2)) {
          start2 = trimStart(myText2, start2, end2);
        }
        if (isLeadingTrailingSpace(myText2, end2 - 1)) {
          end2 = trimEnd(myText2, start2, end2);
        }
        if (isLeadingTrailingSpace(myText3, start3)) {
          start3 = trimStart(myText3, start3, end3);
        }
        if (isLeadingTrailingSpace(myText3, end3 - 1)) {
          end3 = trimEnd(myText3, start3, end3);
        }

        MergeRange trimmed = new MergeRange(start1, end1, start2, end2, start3, end3);

        if (!trimmed.isEmpty() &&
            !isEquals(myText1, myText2, myText3, trimmed)) {
          myChanges.add(trimmed);
        }
      }

      return myChanges;
    }
@NotNull
    public List<MergeRange> build()