code: private void validateType(Class<?> type, Map<Field, BigqueryFieldMarshaller> marshallers) {
      if (typeToField.containsKey(type)) {
        throw new IllegalArgumentException(this.type
            + " contains cyclic reference for the field with type "
            + type + ". Hence cannot be resolved into bigquery schema.");
      }
      try {
        typeToField.put(type, null);
        validateTypeForSchemaMarshalling(type);
        Set<Field> fieldsToMap = getFieldsToSerialize(type);
        for (Field field : fieldsToMap) {
          if ((marshallers == null || !marshallers.containsKey(field))
              && BigqueryFieldMarshallers.getMarshaller(field.getType()) == null) {
            validateType(field.getType(), marshallers);
          }
        }
      } finally {
        typeToField.remove(type);
      }
    }
docs: Validates that the type can be marshalled by using using the provided marshallers and the
  internal marshallers to determine whether {@link TableSchema} can be generated for the given
  type.
  
  @param type to validate.
  @param marshallers map of field to {@link BigqueryFieldMarshaller} for unsupported fields.