docs: public static <T> FilterOperation createEnumeratedFilter( NavigableMap<T, Set<String>> keySetByEnumeratedValue,
                                                                Converter<T> converter,
                                                                Collection<Constraint> constraints,
                                                                Map<String, Object> variables ) {
          if (keySetByEnumeratedValue.isEmpty()) return EMPTY_FILTER_OPERATION;
          NodeKeysAccessor<T, Set<String>> nodeKeysAccessor = new NodeKeysAccessor<T, Set<String>>() {
              @Override
              public Iterator<String> getNodeKeys( NavigableMap<T, Set<String>> keysByValue ) {
                  if (keysByValue.isEmpty()) return new EmptyIterator<String>();
                  if (keysByValue.size() == 1) return keysByValue.values().iterator().next().iterator();
                  return MultiIterator.fromIterables(keysByValue.values());
              }
  
              @Override
              public void addAllTo( NavigableMap<T, Set<String>> keysByValue,
                                    Set<String> matchedKeys ) {
                  for (Map.Entry<T, Set<String>> entry : keysByValue.entrySet()) {
                      matchedKeys.addAll(entry.getValue());
                  }
              }
          };
          OperationBuilder<T> builder = new BasicOperationBuilder<>(keySetByEnumeratedValue, converter, nodeKeysAccessor, variables);
          for (Constraint constraint : constraints) {
              OperationBuilder<T> newBuilder = builder.apply(constraint, false);
              if (newBuilder != null) builder = newBuilder;
          }
          return builder;
      }