code: public ObjectAccessor<T> getDefaultValuesAccessor(TypeTag enclosingType, Set<String> nonnullFields, AnnotationCache annotationCache) {
          ObjectAccessor<T> result = buildObjectAccessor();
          for (Field field : FieldIterable.of(type)) {
              if (NonnullAnnotationVerifier.fieldIsNonnull(field, annotationCache) || nonnullFields.contains(field.getName())) {
                  FieldAccessor accessor = result.fieldAccessorFor(field);
                  accessor.changeField(prefabValues, enclosingType);
              }
          }
          return result;
      }
docs: Returns an {@link ObjectAccessor} for an instance of T where all the
  fields are initialized to their default values. I.e., 0 for ints, and
  null for objects (except when the field is marked with a NonNull
  annotation).
  
  @param enclosingType Describes the type that contains this object as a
  field, to determine any generic parameters it may
  contain.
  @param nonnullFields Fields which are not allowed to be set to null.
  @param annotationCache To check for any NonNull annotations.
  @return An {@link ObjectAccessor} for an instance of T where all the
  fields are initialized to their default values.