boolean update(boolean thisSuper, boolean thatSuper, Supplier<MergePatch> singleDiff) {
      if (thisSuper && thatSuper) return true;
      MergePatch diff = null;
      if (myMaybeThatSuper && myMaybeThisSuper) {
        assert mySingleDiff == null;
        diff = singleDiff.get();
      }
      else if (mySingleDiff != null) {
        diff = tryMergeDiffs(singleDiff);
      }
      myMaybeThisSuper &= thisSuper;
      myMaybeThatSuper &= thatSuper;
      if (!myMaybeThisSuper && !myMaybeThatSuper && diff == null) return false;
      mySingleDiff = diff;
      return true;
    }
boolean update(boolean thisSuper, boolean thatSuper, Supplier<MergePatch> singleDiff)