@Override
    public List<DataRecord> visit(Field field) {
      lastField = field.getFieldMetadata();
      recordProjection.put(
          lastField,
          new ValueBuilder() {

            @Override
            public Object getValue(DataRecord record) {
              return record.get(lastField);
            }
          });
      return records;
    }
 @Override
 public Collection<? extends ComplexTypeMetadata> visit(Field field) {
   closure.add(field.getFieldMetadata().getContainingType());
   return closure;
 }