code: private static final boolean isRequired(DataObject data, Field field, String prefix, String name, int present)
      throws MissingParameterException {
          if (field.getAnnotation(required.class) != null) {
              //if (present == 0) {
              if (present == 0 && prefix != null) { // Brian 3/9/2012
                  // hold the exception report as long as the data object is empty
                  Trace.g.std.note(Reifier.class, "Hold the exception report on field " + name);
                  return true;
              } else {
                  Trace.g.std.note(Reifier.class, "Data object already has " + present + " member values");
                  throw new MissingParameterException(
                      name, (prefix != null ? prefix : "") + '(' + data.getClass().getName() + ')'
                  );
              }
          } else {
              return false;
          }
      }
docs: /*!
  Tests whether the specified field is a required field.
  
  @param data - the containing data object
  @param field - the field
  @param prefix - the current prefix indicating the name of the containing data object
  @param name - the cached name of the field
  @param present - the number of data members already having values
  
  @throws MissingParameterException if the field is required and there's already another member present (present > 0)
  @return true if the field is required, false otherwise