@Override
  public void reduce() {
    myAnyOfGroup.add(mySourceNode);

    for (Operation op : myChildOperations) {
      if (!op.myState.equals(SchemaResolveState.normal)) continue;

      final List<JsonSchemaObject> mergedAny = andGroups(op.myAnyOfGroup, myAnyOfGroup);
      if (mergedAny.isEmpty() && !op.myAnyOfGroup.isEmpty()) {
        mergedAny.addAll(op.myAnyOfGroup);
      }

      final List<List<JsonSchemaObject>> mergedExclusive =
        new ArrayList<>(op.myAnyOfGroup.size() * maxSize(myOneOfGroup) +
                        myAnyOfGroup.size() * maxSize(op.myOneOfGroup) +
                        maxSize(myOneOfGroup) * maxSize(op.myOneOfGroup));

      for (var objects : myOneOfGroup) {
        mergedExclusive.add(andGroups(op.myAnyOfGroup, objects));
      }
      for (var objects : op.myOneOfGroup) {
        mergedExclusive.add(andGroups(objects, myAnyOfGroup));
      }
      for (var group : op.myOneOfGroup) {
        for (var otherGroup : myOneOfGroup) {
          mergedExclusive.add(andGroups(group, otherGroup));
        }
      }

      myAnyOfGroup.clear();
      myOneOfGroup.clear();
      myAnyOfGroup.addAll(mergedAny);
      myOneOfGroup.addAll(mergedExclusive);
    }
  }
@Override
  public void reduce()