code: @SuppressWarnings("unchecked")
      public void writeTo(Object object, TreePruner pruner, DataWriter writer) throws IOException {
          TreePruner child = pruner.accept(object, this);
          if (child==null)        return;
  
          Object d = writer.getExportConfig().getExportInterceptor().getValue(this,object, writer.getExportConfig());
  
          if ((d==null && skipNull) || d == ExportInterceptor.SKIP) { // don't write anything
              return;
          }
          if (merge) {
              // merged property will get all its properties written here
              if (d != null) {
                  Class<?> objectType = d.getClass();
                  Model model = owner.getOrNull(objectType, parent.type, name);
                  if (model == null && !writer.getExportConfig().isSkipIfFail()) {
                      throw new NotExportableException(objectType);
                  } else if (model != null) {
                      model.writeNestedObjectTo(d, new FilteringTreePruner(parent.HAS_PROPERTY_NAME_IN_ANCESTRY,child), writer);
                  }
              }
          } else {
              writer.name(name);
              writeValue(type, d, child, writer);
          }
      }
docs: Writes one property of the given object to {@link DataWriter}.
  
  @param pruner
  Determines how to prune the object graph tree.