String @NotNull [] calculateMinEditSequence(String newText) {
    synchronized (myLock) {
      String[] result = new String[myShreds.size()];
      String hostText = myDelegate.getText();
      calculateMinEditSequence(hostText, newText, result, 0, result.length - 1);
      for (int i = 0; i < result.length; i++) {
        String change = result[i];
        if (change == null) continue;
        String prefix = myShreds.get(i).getPrefix();
        String suffix = myShreds.get(i).getSuffix();
        assert change.startsWith(prefix) : change + "/" + prefix;
        assert change.endsWith(suffix) : change + "/" + suffix;
        result[i] = StringUtil.trimEnd(StringUtil.trimStart(change, prefix), suffix);
      }
      return result;
    }
  }
String @NotNull [] calculateMinEditSequence(String newText)