docs: @SuppressWarnings("unchecked")
      public <T> T reducePostOrder(QueryReducer<T> queryReducer, T initialValue) {
          // compiler hack to make acc final and mutable :-)
          final Object[] acc = {initialValue};
          visitPostOrder(new QueryVisitorStub() {
              @Override
              public void visitField(QueryVisitorFieldEnvironment env) {
                  acc[0] = queryReducer.reduceField(env, (T) acc[0]);
              }
          });
          return (T) acc[0];
      }