Apollo-android: Duplicate input argument in generated class methods

Created on 15 Sep 2019  ·  1Comment  ·  Source: apollographql/apollo-android

after update from 1.0.1 to 1.1.3 happen this types error :

error: variable category is already defined in class Product

// AUTO-GENERATED FILE. DO NOT MODIFY.
//
// This class was automatically generated by Apollo GraphQL plugin from the GraphQL queries it found.
// It should not be modified by hand.
//

import com.apollographql.apollo.api.InputFieldMarshaller;
import com.apollographql.apollo.api.InputFieldWriter;
import com.apollographql.apollo.api.Operation;
import com.apollographql.apollo.api.OperationName;
import com.apollographql.apollo.api.Query;
import com.apollographql.apollo.api.ResponseField;
import com.apollographql.apollo.api.ResponseFieldMapper;
import com.apollographql.apollo.api.ResponseFieldMarshaller;
import com.apollographql.apollo.api.ResponseReader;
import com.apollographql.apollo.api.ResponseWriter;
import com.apollographql.apollo.api.internal.UnmodifiableMapBuilder;
import com.apollographql.apollo.api.internal.Utils;
import ir.basalam.app.graphql.type.CustomType;
import java.io.IOException;
import java.lang.Boolean;
import java.lang.Integer;
import java.lang.Object;
import java.lang.Override;
import java.lang.String;
import java.lang.SuppressWarnings;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public final class GetTimelineProductListQuery implements Query<GetTimelineProductListQuery.Data, GetTimelineProductListQuery.Data, GetTimelineProductListQuery.Variables> {
  public static final String OPERATION_ID = "1668540e68fdd04a4b776c2ba4d0f4fdce43b9144c39e8165f98089d4fd73cfc";

  public static final String QUERY_DOCUMENT = "query getTimelineProductList($products: [ID]!) {\n"
      + "  productList(products: $products) {\n"
      + "    __typename\n"
      + "    products {\n"
      + "      __typename\n"
      + "      id\n"
      + "      name\n"
      + "      isLikedByCurrentUser\n"
      + "      price\n"
      + "      primaryPrice\n"
      + "      category {\n"
      + "        __typename\n"
      + "        title\n"
      + "      }\n"
      + "      photo(size: MEDIUM) {\n"
      + "        __typename\n"
      + "        url\n"
      + "      }\n"
      + "      category {\n"
      + "        __typename\n"
      + "        title\n"
      + "      }\n"
      + "      vendor {\n"
      + "        __typename\n"
      + "        identifier\n"
      + "        name\n"
      + "        city {\n"
      + "          __typename\n"
      + "          title\n"
      + "          parent {\n"
      + "            __typename\n"
      + "            title\n"
      + "          }\n"
      + "        }\n"
      + "        logo(size: LARGE) {\n"
      + "          __typename\n"
      + "          url\n"
      + "        }\n"
      + "        cover(size: LARGE) {\n"
      + "          __typename\n"
      + "          url\n"
      + "        }\n"
      + "        owner {\n"
      + "          __typename\n"
      + "          hashId\n"
      + "          name\n"
      + "          isFollowedByCurrentUser\n"
      + "          avatar(size: LARGE) {\n"
      + "            __typename\n"
      + "            url\n"
      + "          }\n"
      + "        }\n"
      + "      }\n"
      + "    }\n"
      + "  }\n"
      + "}";

  public static final OperationName OPERATION_NAME = new OperationName() {
    @Override
    public String name() {
      return "getTimelineProductList";
    }
  };

  private final GetTimelineProductListQuery.Variables variables;

  public GetTimelineProductListQuery(@NotNull List<String> products) {
    Utils.checkNotNull(products, "products == null");
    variables = new GetTimelineProductListQuery.Variables(products);
  }

  @Override
  public String operationId() {
    return OPERATION_ID;
  }

  @Override
  public String queryDocument() {
    return QUERY_DOCUMENT;
  }

  @Override
  public GetTimelineProductListQuery.Data wrapData(GetTimelineProductListQuery.Data data) {
    return data;
  }

  @Override
  public GetTimelineProductListQuery.Variables variables() {
    return variables;
  }

  @Override
  public ResponseFieldMapper<GetTimelineProductListQuery.Data> responseFieldMapper() {
    return new Data.Mapper();
  }

  public static Builder builder() {
    return new Builder();
  }

  @Override
  public OperationName name() {
    return OPERATION_NAME;
  }

  public static final class Builder {
    private @NotNull List<String> products;

    Builder() {
    }

    public Builder products(@NotNull List<String> products) {
      this.products = products;
      return this;
    }

    public GetTimelineProductListQuery build() {
      Utils.checkNotNull(products, "products == null");
      return new GetTimelineProductListQuery(products);
    }
  }

  public static final class Variables extends Operation.Variables {
    private final @NotNull List<String> products;

    private final transient Map<String, Object> valueMap = new LinkedHashMap<>();

    Variables(@NotNull List<String> products) {
      this.products = products;
      this.valueMap.put("products", products);
    }

    public @NotNull List<String> products() {
      return products;
    }

    @Override
    public Map<String, Object> valueMap() {
      return Collections.unmodifiableMap(valueMap);
    }

    @Override
    public InputFieldMarshaller marshaller() {
      return new InputFieldMarshaller() {
        @Override
        public void marshal(InputFieldWriter writer) throws IOException {
          writer.writeList("products", new InputFieldWriter.ListWriter() {
            @Override
            public void write(InputFieldWriter.ListItemWriter listItemWriter) throws IOException {
              for (final String $item : products) {
                listItemWriter.writeCustom(CustomType.ID, $item);
              }
            }
          });
        }
      };
    }
  }

  public static class Data implements Operation.Data {
    static final ResponseField[] $responseFields = {
      ResponseField.forObject("productList", "productList", new UnmodifiableMapBuilder<String, Object>(1)
      .put("products", new UnmodifiableMapBuilder<String, Object>(2)
        .put("kind", "Variable")
        .put("variableName", "products")
        .build())
      .build(), true, Collections.<ResponseField.Condition>emptyList())
    };

    final @Nullable ProductList productList;

    private transient volatile String $toString;

    private transient volatile int $hashCode;

    private transient volatile boolean $hashCodeMemoized;

    public Data(@Nullable ProductList productList) {
      this.productList = productList;
    }

    /**
     * بازگرداندن محصولات با استفاده از شناسه‌های محصول
     */
    public @Nullable ProductList getProductList() {
      return this.productList;
    }

    @SuppressWarnings("unchecked")
    public ResponseFieldMarshaller marshaller() {
      return new ResponseFieldMarshaller() {
        @Override
        public void marshal(ResponseWriter writer) {
          writer.writeObject($responseFields[0], productList != null ? productList.marshaller() : null);
        }
      };
    }

    @Override
    public String toString() {
      if ($toString == null) {
        $toString = "Data{"
          + "productList=" + productList
          + "}";
      }
      return $toString;
    }

    @Override
    public boolean equals(Object o) {
      if (o == this) {
        return true;
      }
      if (o instanceof Data) {
        Data that = (Data) o;
        return ((this.productList == null) ? (that.productList == null) : this.productList.equals(that.productList));
      }
      return false;
    }

    @Override
    public int hashCode() {
      if (!$hashCodeMemoized) {
        int h = 1;
        h *= 1000003;
        h ^= (productList == null) ? 0 : productList.hashCode();
        $hashCode = h;
        $hashCodeMemoized = true;
      }
      return $hashCode;
    }

    public static final class Mapper implements ResponseFieldMapper<Data> {
      final ProductList.Mapper productListFieldMapper = new ProductList.Mapper();

      @Override
      public Data map(ResponseReader reader) {
        final ProductList productList = reader.readObject($responseFields[0], new ResponseReader.ObjectReader<ProductList>() {
          @Override
          public ProductList read(ResponseReader reader) {
            return productListFieldMapper.map(reader);
          }
        });
        return new Data(productList);
      }
    }
  }

  public static class ProductList {
    static final ResponseField[] $responseFields = {
      ResponseField.forString("__typename", "__typename", null, false, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forList("products", "products", null, true, Collections.<ResponseField.Condition>emptyList())
    };

    final @NotNull String __typename;

    final @Nullable List<Product> products;

    private transient volatile String $toString;

    private transient volatile int $hashCode;

    private transient volatile boolean $hashCodeMemoized;

    public ProductList(@NotNull String __typename, @Nullable List<Product> products) {
      this.__typename = Utils.checkNotNull(__typename, "__typename == null");
      this.products = products;
    }

    public @NotNull String get__typename() {
      return this.__typename;
    }

    public @Nullable List<Product> getProducts() {
      return this.products;
    }

    @SuppressWarnings("unchecked")
    public ResponseFieldMarshaller marshaller() {
      return new ResponseFieldMarshaller() {
        @Override
        public void marshal(ResponseWriter writer) {
          writer.writeString($responseFields[0], __typename);
          writer.writeList($responseFields[1], products, new ResponseWriter.ListWriter() {
            @Override
            public void write(List items, ResponseWriter.ListItemWriter listItemWriter) {
              for (Object item : items) {
                listItemWriter.writeObject(((Product) item).marshaller());
              }
            }
          });
        }
      };
    }

    @Override
    public String toString() {
      if ($toString == null) {
        $toString = "ProductList{"
          + "__typename=" + __typename + ", "
          + "products=" + products
          + "}";
      }
      return $toString;
    }

    @Override
    public boolean equals(Object o) {
      if (o == this) {
        return true;
      }
      if (o instanceof ProductList) {
        ProductList that = (ProductList) o;
        return this.__typename.equals(that.__typename)
         && ((this.products == null) ? (that.products == null) : this.products.equals(that.products));
      }
      return false;
    }

    @Override
    public int hashCode() {
      if (!$hashCodeMemoized) {
        int h = 1;
        h *= 1000003;
        h ^= __typename.hashCode();
        h *= 1000003;
        h ^= (products == null) ? 0 : products.hashCode();
        $hashCode = h;
        $hashCodeMemoized = true;
      }
      return $hashCode;
    }

    public static final class Mapper implements ResponseFieldMapper<ProductList> {
      final Product.Mapper productFieldMapper = new Product.Mapper();

      @Override
      public ProductList map(ResponseReader reader) {
        final String __typename = reader.readString($responseFields[0]);
        final List<Product> products = reader.readList($responseFields[1], new ResponseReader.ListReader<Product>() {
          @Override
          public Product read(ResponseReader.ListItemReader listItemReader) {
            return listItemReader.readObject(new ResponseReader.ObjectReader<Product>() {
              @Override
              public Product read(ResponseReader reader) {
                return productFieldMapper.map(reader);
              }
            });
          }
        });
        return new ProductList(__typename, products);
      }
    }
  }

  public static class Product {
    static final ResponseField[] $responseFields = {
      ResponseField.forString("__typename", "__typename", null, false, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forCustomType("id", "id", null, true, CustomType.ID, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forString("name", "name", null, false, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forBoolean("isLikedByCurrentUser", "isLikedByCurrentUser", null, true, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forInt("price", "price", null, false, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forInt("primaryPrice", "primaryPrice", null, true, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forObject("category", "category", null, true, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forObject("photo", "photo", new UnmodifiableMapBuilder<String, Object>(1)
      .put("size", "MEDIUM")
      .build(), true, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forObject("category", "category", null, true, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forObject("vendor", "vendor", null, true, Collections.<ResponseField.Condition>emptyList())
    };

    final @NotNull String __typename;

    final @Nullable String id;

    final @NotNull String name;

    final @Nullable Boolean isLikedByCurrentUser;

    final int price;

    final @Nullable Integer primaryPrice;

    final @Nullable Category1 category;

    final @Nullable Photo photo;

    final @Nullable Category1 category;

    final @Nullable Vendor vendor;

    private transient volatile String $toString;

    private transient volatile int $hashCode;

    private transient volatile boolean $hashCodeMemoized;

    public Product(@NotNull String __typename, @Nullable String id, @NotNull String name,
        @Nullable Boolean isLikedByCurrentUser, int price, @Nullable Integer primaryPrice,
        @Nullable Category1 category, @Nullable Photo photo, @Nullable Category1 category,
        @Nullable Vendor vendor) {
      this.__typename = Utils.checkNotNull(__typename, "__typename == null");
      this.id = id;
      this.name = Utils.checkNotNull(name, "name == null");
      this.isLikedByCurrentUser = isLikedByCurrentUser;
      this.price = price;
      this.primaryPrice = primaryPrice;
      this.category = category;
      this.photo = photo;
      this.category = category;
      this.vendor = vendor;
    }

    public @NotNull String get__typename() {
      return this.__typename;
    }

    public @Nullable String getId() {
      return this.id;
    }

    public @NotNull String getName() {
      return this.name;
    }

    public @Nullable Boolean getIsLikedByCurrentUser() {
      return this.isLikedByCurrentUser;
    }

    public int getPrice() {
      return this.price;
    }

    public @Nullable Integer getPrimaryPrice() {
      return this.primaryPrice;
    }

    public @Nullable Category1 getCategory() {
      return this.category;
    }

    public @Nullable Photo getPhoto() {
      return this.photo;
    }

    public @Nullable Category1 getCategory() {
      return this.category;
    }

    public @Nullable Vendor getVendor() {
      return this.vendor;
    }

    @SuppressWarnings("unchecked")
    public ResponseFieldMarshaller marshaller() {
      return new ResponseFieldMarshaller() {
        @Override
        public void marshal(ResponseWriter writer) {
          writer.writeString($responseFields[0], __typename);
          writer.writeCustom((ResponseField.CustomTypeField) $responseFields[1], id);
          writer.writeString($responseFields[2], name);
          writer.writeBoolean($responseFields[3], isLikedByCurrentUser);
          writer.writeInt($responseFields[4], price);
          writer.writeInt($responseFields[5], primaryPrice);
          writer.writeObject($responseFields[6], category != null ? category.marshaller() : null);
          writer.writeObject($responseFields[7], photo != null ? photo.marshaller() : null);
          writer.writeObject($responseFields[8], category != null ? category.marshaller() : null);
          writer.writeObject($responseFields[9], vendor != null ? vendor.marshaller() : null);
        }
      };
    }

    @Override
    public String toString() {
      if ($toString == null) {
        $toString = "Product{"
          + "__typename=" + __typename + ", "
          + "id=" + id + ", "
          + "name=" + name + ", "
          + "isLikedByCurrentUser=" + isLikedByCurrentUser + ", "
          + "price=" + price + ", "
          + "primaryPrice=" + primaryPrice + ", "
          + "category=" + category + ", "
          + "photo=" + photo + ", "
          + "category=" + category + ", "
          + "vendor=" + vendor
          + "}";
      }
      return $toString;
    }

    @Override
    public boolean equals(Object o) {
      if (o == this) {
        return true;
      }
      if (o instanceof Product) {
        Product that = (Product) o;
        return this.__typename.equals(that.__typename)
         && ((this.id == null) ? (that.id == null) : this.id.equals(that.id))
         && this.name.equals(that.name)
         && ((this.isLikedByCurrentUser == null) ? (that.isLikedByCurrentUser == null) : this.isLikedByCurrentUser.equals(that.isLikedByCurrentUser))
         && this.price == that.price
         && ((this.primaryPrice == null) ? (that.primaryPrice == null) : this.primaryPrice.equals(that.primaryPrice))
         && ((this.category == null) ? (that.category == null) : this.category.equals(that.category))
         && ((this.photo == null) ? (that.photo == null) : this.photo.equals(that.photo))
         && ((this.category == null) ? (that.category == null) : this.category.equals(that.category))
         && ((this.vendor == null) ? (that.vendor == null) : this.vendor.equals(that.vendor));
      }
      return false;
    }

    @Override
    public int hashCode() {
      if (!$hashCodeMemoized) {
        int h = 1;
        h *= 1000003;
        h ^= __typename.hashCode();
        h *= 1000003;
        h ^= (id == null) ? 0 : id.hashCode();
        h *= 1000003;
        h ^= name.hashCode();
        h *= 1000003;
        h ^= (isLikedByCurrentUser == null) ? 0 : isLikedByCurrentUser.hashCode();
        h *= 1000003;
        h ^= price;
        h *= 1000003;
        h ^= (primaryPrice == null) ? 0 : primaryPrice.hashCode();
        h *= 1000003;
        h ^= (category == null) ? 0 : category.hashCode();
        h *= 1000003;
        h ^= (photo == null) ? 0 : photo.hashCode();
        h *= 1000003;
        h ^= (category == null) ? 0 : category.hashCode();
        h *= 1000003;
        h ^= (vendor == null) ? 0 : vendor.hashCode();
        $hashCode = h;
        $hashCodeMemoized = true;
      }
      return $hashCode;
    }

    public static final class Mapper implements ResponseFieldMapper<Product> {
      final Category1.Mapper category1FieldMapper = new Category1.Mapper();

      final Photo.Mapper photoFieldMapper = new Photo.Mapper();

      final Category1.Mapper category1FieldMapper = new Category1.Mapper();

      final Vendor.Mapper vendorFieldMapper = new Vendor.Mapper();

      @Override
      public Product map(ResponseReader reader) {
        final String __typename = reader.readString($responseFields[0]);
        final String id = reader.readCustomType((ResponseField.CustomTypeField) $responseFields[1]);
        final String name = reader.readString($responseFields[2]);
        final Boolean isLikedByCurrentUser = reader.readBoolean($responseFields[3]);
        final int price = reader.readInt($responseFields[4]);
        final Integer primaryPrice = reader.readInt($responseFields[5]);
        final Category1 category = reader.readObject($responseFields[6], new ResponseReader.ObjectReader<Category1>() {
          @Override
          public Category1 read(ResponseReader reader) {
            return category1FieldMapper.map(reader);
          }
        });
        final Photo photo = reader.readObject($responseFields[7], new ResponseReader.ObjectReader<Photo>() {
          @Override
          public Photo read(ResponseReader reader) {
            return photoFieldMapper.map(reader);
          }
        });
        final Category1 category = reader.readObject($responseFields[8], new ResponseReader.ObjectReader<Category1>() {
          @Override
          public Category1 read(ResponseReader reader) {
            return category1FieldMapper.map(reader);
          }
        });
        final Vendor vendor = reader.readObject($responseFields[9], new ResponseReader.ObjectReader<Vendor>() {
          @Override
          public Vendor read(ResponseReader reader) {
            return vendorFieldMapper.map(reader);
          }
        });
        return new Product(__typename, id, name, isLikedByCurrentUser, price, primaryPrice, category, photo, category, vendor);
      }
    }
  }

  public static class Category {
    static final ResponseField[] $responseFields = {
      ResponseField.forString("__typename", "__typename", null, false, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forString("title", "title", null, false, Collections.<ResponseField.Condition>emptyList())
    };

    final @NotNull String __typename;

    final @NotNull String title;

    private transient volatile String $toString;

    private transient volatile int $hashCode;

    private transient volatile boolean $hashCodeMemoized;

    public Category(@NotNull String __typename, @NotNull String title) {
      this.__typename = Utils.checkNotNull(__typename, "__typename == null");
      this.title = Utils.checkNotNull(title, "title == null");
    }

    public @NotNull String get__typename() {
      return this.__typename;
    }

    public @NotNull String getTitle() {
      return this.title;
    }

    @SuppressWarnings("unchecked")
    public ResponseFieldMarshaller marshaller() {
      return new ResponseFieldMarshaller() {
        @Override
        public void marshal(ResponseWriter writer) {
          writer.writeString($responseFields[0], __typename);
          writer.writeString($responseFields[1], title);
        }
      };
    }

    @Override
    public String toString() {
      if ($toString == null) {
        $toString = "Category{"
          + "__typename=" + __typename + ", "
          + "title=" + title
          + "}";
      }
      return $toString;
    }

    @Override
    public boolean equals(Object o) {
      if (o == this) {
        return true;
      }
      if (o instanceof Category) {
        Category that = (Category) o;
        return this.__typename.equals(that.__typename)
         && this.title.equals(that.title);
      }
      return false;
    }

    @Override
    public int hashCode() {
      if (!$hashCodeMemoized) {
        int h = 1;
        h *= 1000003;
        h ^= __typename.hashCode();
        h *= 1000003;
        h ^= title.hashCode();
        $hashCode = h;
        $hashCodeMemoized = true;
      }
      return $hashCode;
    }

    public static final class Mapper implements ResponseFieldMapper<Category> {
      @Override
      public Category map(ResponseReader reader) {
        final String __typename = reader.readString($responseFields[0]);
        final String title = reader.readString($responseFields[1]);
        return new Category(__typename, title);
      }
    }
  }

  public static class Photo {
    static final ResponseField[] $responseFields = {
      ResponseField.forString("__typename", "__typename", null, false, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forString("url", "url", null, false, Collections.<ResponseField.Condition>emptyList())
    };

    final @NotNull String __typename;

    final @NotNull String url;

    private transient volatile String $toString;

    private transient volatile int $hashCode;

    private transient volatile boolean $hashCodeMemoized;

    public Photo(@NotNull String __typename, @NotNull String url) {
      this.__typename = Utils.checkNotNull(__typename, "__typename == null");
      this.url = Utils.checkNotNull(url, "url == null");
    }

    public @NotNull String get__typename() {
      return this.__typename;
    }

    public @NotNull String getUrl() {
      return this.url;
    }

    @SuppressWarnings("unchecked")
    public ResponseFieldMarshaller marshaller() {
      return new ResponseFieldMarshaller() {
        @Override
        public void marshal(ResponseWriter writer) {
          writer.writeString($responseFields[0], __typename);
          writer.writeString($responseFields[1], url);
        }
      };
    }

    @Override
    public String toString() {
      if ($toString == null) {
        $toString = "Photo{"
          + "__typename=" + __typename + ", "
          + "url=" + url
          + "}";
      }
      return $toString;
    }

    @Override
    public boolean equals(Object o) {
      if (o == this) {
        return true;
      }
      if (o instanceof Photo) {
        Photo that = (Photo) o;
        return this.__typename.equals(that.__typename)
         && this.url.equals(that.url);
      }
      return false;
    }

    @Override
    public int hashCode() {
      if (!$hashCodeMemoized) {
        int h = 1;
        h *= 1000003;
        h ^= __typename.hashCode();
        h *= 1000003;
        h ^= url.hashCode();
        $hashCode = h;
        $hashCodeMemoized = true;
      }
      return $hashCode;
    }

    public static final class Mapper implements ResponseFieldMapper<Photo> {
      @Override
      public Photo map(ResponseReader reader) {
        final String __typename = reader.readString($responseFields[0]);
        final String url = reader.readString($responseFields[1]);
        return new Photo(__typename, url);
      }
    }
  }

  public static class Category1 {
    static final ResponseField[] $responseFields = {
      ResponseField.forString("__typename", "__typename", null, false, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forString("title", "title", null, false, Collections.<ResponseField.Condition>emptyList())
    };

    final @NotNull String __typename;

    final @NotNull String title;

    private transient volatile String $toString;

    private transient volatile int $hashCode;

    private transient volatile boolean $hashCodeMemoized;

    public Category1(@NotNull String __typename, @NotNull String title) {
      this.__typename = Utils.checkNotNull(__typename, "__typename == null");
      this.title = Utils.checkNotNull(title, "title == null");
    }

    public @NotNull String get__typename() {
      return this.__typename;
    }

    public @NotNull String getTitle() {
      return this.title;
    }

    @SuppressWarnings("unchecked")
    public ResponseFieldMarshaller marshaller() {
      return new ResponseFieldMarshaller() {
        @Override
        public void marshal(ResponseWriter writer) {
          writer.writeString($responseFields[0], __typename);
          writer.writeString($responseFields[1], title);
        }
      };
    }

    @Override
    public String toString() {
      if ($toString == null) {
        $toString = "Category1{"
          + "__typename=" + __typename + ", "
          + "title=" + title
          + "}";
      }
      return $toString;
    }

    @Override
    public boolean equals(Object o) {
      if (o == this) {
        return true;
      }
      if (o instanceof Category1) {
        Category1 that = (Category1) o;
        return this.__typename.equals(that.__typename)
         && this.title.equals(that.title);
      }
      return false;
    }

    @Override
    public int hashCode() {
      if (!$hashCodeMemoized) {
        int h = 1;
        h *= 1000003;
        h ^= __typename.hashCode();
        h *= 1000003;
        h ^= title.hashCode();
        $hashCode = h;
        $hashCodeMemoized = true;
      }
      return $hashCode;
    }

    public static final class Mapper implements ResponseFieldMapper<Category1> {
      @Override
      public Category1 map(ResponseReader reader) {
        final String __typename = reader.readString($responseFields[0]);
        final String title = reader.readString($responseFields[1]);
        return new Category1(__typename, title);
      }
    }
  }

  public static class Vendor {
    static final ResponseField[] $responseFields = {
      ResponseField.forString("__typename", "__typename", null, false, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forString("identifier", "identifier", null, true, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forString("name", "name", null, true, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forObject("city", "city", null, true, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forObject("logo", "logo", new UnmodifiableMapBuilder<String, Object>(1)
      .put("size", "LARGE")
      .build(), true, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forObject("cover", "cover", new UnmodifiableMapBuilder<String, Object>(1)
      .put("size", "LARGE")
      .build(), true, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forObject("owner", "owner", null, true, Collections.<ResponseField.Condition>emptyList())
    };

    final @NotNull String __typename;

    final @Nullable String identifier;

    final @Nullable String name;

    final @Nullable City city;

    final @Nullable Logo logo;

    final @Nullable Cover cover;

    final @Nullable Owner owner;

    private transient volatile String $toString;

    private transient volatile int $hashCode;

    private transient volatile boolean $hashCodeMemoized;

    public Vendor(@NotNull String __typename, @Nullable String identifier, @Nullable String name,
        @Nullable City city, @Nullable Logo logo, @Nullable Cover cover, @Nullable Owner owner) {
      this.__typename = Utils.checkNotNull(__typename, "__typename == null");
      this.identifier = identifier;
      this.name = name;
      this.city = city;
      this.logo = logo;
      this.cover = cover;
      this.owner = owner;
    }

    public @NotNull String get__typename() {
      return this.__typename;
    }

    public @Nullable String getIdentifier() {
      return this.identifier;
    }

    public @Nullable String getName() {
      return this.name;
    }

    public @Nullable City getCity() {
      return this.city;
    }

    public @Nullable Logo getLogo() {
      return this.logo;
    }

    public @Nullable Cover getCover() {
      return this.cover;
    }

    public @Nullable Owner getOwner() {
      return this.owner;
    }

    @SuppressWarnings("unchecked")
    public ResponseFieldMarshaller marshaller() {
      return new ResponseFieldMarshaller() {
        @Override
        public void marshal(ResponseWriter writer) {
          writer.writeString($responseFields[0], __typename);
          writer.writeString($responseFields[1], identifier);
          writer.writeString($responseFields[2], name);
          writer.writeObject($responseFields[3], city != null ? city.marshaller() : null);
          writer.writeObject($responseFields[4], logo != null ? logo.marshaller() : null);
          writer.writeObject($responseFields[5], cover != null ? cover.marshaller() : null);
          writer.writeObject($responseFields[6], owner != null ? owner.marshaller() : null);
        }
      };
    }

    @Override
    public String toString() {
      if ($toString == null) {
        $toString = "Vendor{"
          + "__typename=" + __typename + ", "
          + "identifier=" + identifier + ", "
          + "name=" + name + ", "
          + "city=" + city + ", "
          + "logo=" + logo + ", "
          + "cover=" + cover + ", "
          + "owner=" + owner
          + "}";
      }
      return $toString;
    }

    @Override
    public boolean equals(Object o) {
      if (o == this) {
        return true;
      }
      if (o instanceof Vendor) {
        Vendor that = (Vendor) o;
        return this.__typename.equals(that.__typename)
         && ((this.identifier == null) ? (that.identifier == null) : this.identifier.equals(that.identifier))
         && ((this.name == null) ? (that.name == null) : this.name.equals(that.name))
         && ((this.city == null) ? (that.city == null) : this.city.equals(that.city))
         && ((this.logo == null) ? (that.logo == null) : this.logo.equals(that.logo))
         && ((this.cover == null) ? (that.cover == null) : this.cover.equals(that.cover))
         && ((this.owner == null) ? (that.owner == null) : this.owner.equals(that.owner));
      }
      return false;
    }

    @Override
    public int hashCode() {
      if (!$hashCodeMemoized) {
        int h = 1;
        h *= 1000003;
        h ^= __typename.hashCode();
        h *= 1000003;
        h ^= (identifier == null) ? 0 : identifier.hashCode();
        h *= 1000003;
        h ^= (name == null) ? 0 : name.hashCode();
        h *= 1000003;
        h ^= (city == null) ? 0 : city.hashCode();
        h *= 1000003;
        h ^= (logo == null) ? 0 : logo.hashCode();
        h *= 1000003;
        h ^= (cover == null) ? 0 : cover.hashCode();
        h *= 1000003;
        h ^= (owner == null) ? 0 : owner.hashCode();
        $hashCode = h;
        $hashCodeMemoized = true;
      }
      return $hashCode;
    }

    public static final class Mapper implements ResponseFieldMapper<Vendor> {
      final City.Mapper cityFieldMapper = new City.Mapper();

      final Logo.Mapper logoFieldMapper = new Logo.Mapper();

      final Cover.Mapper coverFieldMapper = new Cover.Mapper();

      final Owner.Mapper ownerFieldMapper = new Owner.Mapper();

      @Override
      public Vendor map(ResponseReader reader) {
        final String __typename = reader.readString($responseFields[0]);
        final String identifier = reader.readString($responseFields[1]);
        final String name = reader.readString($responseFields[2]);
        final City city = reader.readObject($responseFields[3], new ResponseReader.ObjectReader<City>() {
          @Override
          public City read(ResponseReader reader) {
            return cityFieldMapper.map(reader);
          }
        });
        final Logo logo = reader.readObject($responseFields[4], new ResponseReader.ObjectReader<Logo>() {
          @Override
          public Logo read(ResponseReader reader) {
            return logoFieldMapper.map(reader);
          }
        });
        final Cover cover = reader.readObject($responseFields[5], new ResponseReader.ObjectReader<Cover>() {
          @Override
          public Cover read(ResponseReader reader) {
            return coverFieldMapper.map(reader);
          }
        });
        final Owner owner = reader.readObject($responseFields[6], new ResponseReader.ObjectReader<Owner>() {
          @Override
          public Owner read(ResponseReader reader) {
            return ownerFieldMapper.map(reader);
          }
        });
        return new Vendor(__typename, identifier, name, city, logo, cover, owner);
      }
    }
  }

  public static class City {
    static final ResponseField[] $responseFields = {
      ResponseField.forString("__typename", "__typename", null, false, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forString("title", "title", null, true, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forObject("parent", "parent", null, true, Collections.<ResponseField.Condition>emptyList())
    };

    final @NotNull String __typename;

    final @Nullable String title;

    final @Nullable Parent parent;

    private transient volatile String $toString;

    private transient volatile int $hashCode;

    private transient volatile boolean $hashCodeMemoized;

    public City(@NotNull String __typename, @Nullable String title, @Nullable Parent parent) {
      this.__typename = Utils.checkNotNull(__typename, "__typename == null");
      this.title = title;
      this.parent = parent;
    }

    public @NotNull String get__typename() {
      return this.__typename;
    }

    public @Nullable String getTitle() {
      return this.title;
    }

    public @Nullable Parent getParent() {
      return this.parent;
    }

    @SuppressWarnings("unchecked")
    public ResponseFieldMarshaller marshaller() {
      return new ResponseFieldMarshaller() {
        @Override
        public void marshal(ResponseWriter writer) {
          writer.writeString($responseFields[0], __typename);
          writer.writeString($responseFields[1], title);
          writer.writeObject($responseFields[2], parent != null ? parent.marshaller() : null);
        }
      };
    }

    @Override
    public String toString() {
      if ($toString == null) {
        $toString = "City{"
          + "__typename=" + __typename + ", "
          + "title=" + title + ", "
          + "parent=" + parent
          + "}";
      }
      return $toString;
    }

    @Override
    public boolean equals(Object o) {
      if (o == this) {
        return true;
      }
      if (o instanceof City) {
        City that = (City) o;
        return this.__typename.equals(that.__typename)
         && ((this.title == null) ? (that.title == null) : this.title.equals(that.title))
         && ((this.parent == null) ? (that.parent == null) : this.parent.equals(that.parent));
      }
      return false;
    }

    @Override
    public int hashCode() {
      if (!$hashCodeMemoized) {
        int h = 1;
        h *= 1000003;
        h ^= __typename.hashCode();
        h *= 1000003;
        h ^= (title == null) ? 0 : title.hashCode();
        h *= 1000003;
        h ^= (parent == null) ? 0 : parent.hashCode();
        $hashCode = h;
        $hashCodeMemoized = true;
      }
      return $hashCode;
    }

    public static final class Mapper implements ResponseFieldMapper<City> {
      final Parent.Mapper parentFieldMapper = new Parent.Mapper();

      @Override
      public City map(ResponseReader reader) {
        final String __typename = reader.readString($responseFields[0]);
        final String title = reader.readString($responseFields[1]);
        final Parent parent = reader.readObject($responseFields[2], new ResponseReader.ObjectReader<Parent>() {
          @Override
          public Parent read(ResponseReader reader) {
            return parentFieldMapper.map(reader);
          }
        });
        return new City(__typename, title, parent);
      }
    }
  }

  public static class Parent {
    static final ResponseField[] $responseFields = {
      ResponseField.forString("__typename", "__typename", null, false, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forString("title", "title", null, true, Collections.<ResponseField.Condition>emptyList())
    };

    final @NotNull String __typename;

    final @Nullable String title;

    private transient volatile String $toString;

    private transient volatile int $hashCode;

    private transient volatile boolean $hashCodeMemoized;

    public Parent(@NotNull String __typename, @Nullable String title) {
      this.__typename = Utils.checkNotNull(__typename, "__typename == null");
      this.title = title;
    }

    public @NotNull String get__typename() {
      return this.__typename;
    }

    public @Nullable String getTitle() {
      return this.title;
    }

    @SuppressWarnings("unchecked")
    public ResponseFieldMarshaller marshaller() {
      return new ResponseFieldMarshaller() {
        @Override
        public void marshal(ResponseWriter writer) {
          writer.writeString($responseFields[0], __typename);
          writer.writeString($responseFields[1], title);
        }
      };
    }

    @Override
    public String toString() {
      if ($toString == null) {
        $toString = "Parent{"
          + "__typename=" + __typename + ", "
          + "title=" + title
          + "}";
      }
      return $toString;
    }

    @Override
    public boolean equals(Object o) {
      if (o == this) {
        return true;
      }
      if (o instanceof Parent) {
        Parent that = (Parent) o;
        return this.__typename.equals(that.__typename)
         && ((this.title == null) ? (that.title == null) : this.title.equals(that.title));
      }
      return false;
    }

    @Override
    public int hashCode() {
      if (!$hashCodeMemoized) {
        int h = 1;
        h *= 1000003;
        h ^= __typename.hashCode();
        h *= 1000003;
        h ^= (title == null) ? 0 : title.hashCode();
        $hashCode = h;
        $hashCodeMemoized = true;
      }
      return $hashCode;
    }

    public static final class Mapper implements ResponseFieldMapper<Parent> {
      @Override
      public Parent map(ResponseReader reader) {
        final String __typename = reader.readString($responseFields[0]);
        final String title = reader.readString($responseFields[1]);
        return new Parent(__typename, title);
      }
    }
  }

  public static class Logo {
    static final ResponseField[] $responseFields = {
      ResponseField.forString("__typename", "__typename", null, false, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forString("url", "url", null, false, Collections.<ResponseField.Condition>emptyList())
    };

    final @NotNull String __typename;

    final @NotNull String url;

    private transient volatile String $toString;

    private transient volatile int $hashCode;

    private transient volatile boolean $hashCodeMemoized;

    public Logo(@NotNull String __typename, @NotNull String url) {
      this.__typename = Utils.checkNotNull(__typename, "__typename == null");
      this.url = Utils.checkNotNull(url, "url == null");
    }

    public @NotNull String get__typename() {
      return this.__typename;
    }

    public @NotNull String getUrl() {
      return this.url;
    }

    @SuppressWarnings("unchecked")
    public ResponseFieldMarshaller marshaller() {
      return new ResponseFieldMarshaller() {
        @Override
        public void marshal(ResponseWriter writer) {
          writer.writeString($responseFields[0], __typename);
          writer.writeString($responseFields[1], url);
        }
      };
    }

    @Override
    public String toString() {
      if ($toString == null) {
        $toString = "Logo{"
          + "__typename=" + __typename + ", "
          + "url=" + url
          + "}";
      }
      return $toString;
    }

    @Override
    public boolean equals(Object o) {
      if (o == this) {
        return true;
      }
      if (o instanceof Logo) {
        Logo that = (Logo) o;
        return this.__typename.equals(that.__typename)
         && this.url.equals(that.url);
      }
      return false;
    }

    @Override
    public int hashCode() {
      if (!$hashCodeMemoized) {
        int h = 1;
        h *= 1000003;
        h ^= __typename.hashCode();
        h *= 1000003;
        h ^= url.hashCode();
        $hashCode = h;
        $hashCodeMemoized = true;
      }
      return $hashCode;
    }

    public static final class Mapper implements ResponseFieldMapper<Logo> {
      @Override
      public Logo map(ResponseReader reader) {
        final String __typename = reader.readString($responseFields[0]);
        final String url = reader.readString($responseFields[1]);
        return new Logo(__typename, url);
      }
    }
  }

  public static class Cover {
    static final ResponseField[] $responseFields = {
      ResponseField.forString("__typename", "__typename", null, false, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forString("url", "url", null, false, Collections.<ResponseField.Condition>emptyList())
    };

    final @NotNull String __typename;

    final @NotNull String url;

    private transient volatile String $toString;

    private transient volatile int $hashCode;

    private transient volatile boolean $hashCodeMemoized;

    public Cover(@NotNull String __typename, @NotNull String url) {
      this.__typename = Utils.checkNotNull(__typename, "__typename == null");
      this.url = Utils.checkNotNull(url, "url == null");
    }

    public @NotNull String get__typename() {
      return this.__typename;
    }

    public @NotNull String getUrl() {
      return this.url;
    }

    @SuppressWarnings("unchecked")
    public ResponseFieldMarshaller marshaller() {
      return new ResponseFieldMarshaller() {
        @Override
        public void marshal(ResponseWriter writer) {
          writer.writeString($responseFields[0], __typename);
          writer.writeString($responseFields[1], url);
        }
      };
    }

    @Override
    public String toString() {
      if ($toString == null) {
        $toString = "Cover{"
          + "__typename=" + __typename + ", "
          + "url=" + url
          + "}";
      }
      return $toString;
    }

    @Override
    public boolean equals(Object o) {
      if (o == this) {
        return true;
      }
      if (o instanceof Cover) {
        Cover that = (Cover) o;
        return this.__typename.equals(that.__typename)
         && this.url.equals(that.url);
      }
      return false;
    }

    @Override
    public int hashCode() {
      if (!$hashCodeMemoized) {
        int h = 1;
        h *= 1000003;
        h ^= __typename.hashCode();
        h *= 1000003;
        h ^= url.hashCode();
        $hashCode = h;
        $hashCodeMemoized = true;
      }
      return $hashCode;
    }

    public static final class Mapper implements ResponseFieldMapper<Cover> {
      @Override
      public Cover map(ResponseReader reader) {
        final String __typename = reader.readString($responseFields[0]);
        final String url = reader.readString($responseFields[1]);
        return new Cover(__typename, url);
      }
    }
  }

  public static class Owner {
    static final ResponseField[] $responseFields = {
      ResponseField.forString("__typename", "__typename", null, false, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forString("hashId", "hashId", null, true, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forString("name", "name", null, true, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forBoolean("isFollowedByCurrentUser", "isFollowedByCurrentUser", null, true, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forObject("avatar", "avatar", new UnmodifiableMapBuilder<String, Object>(1)
      .put("size", "LARGE")
      .build(), true, Collections.<ResponseField.Condition>emptyList())
    };

    final @NotNull String __typename;

    final @Nullable String hashId;

    final @Nullable String name;

    final @Nullable Boolean isFollowedByCurrentUser;

    final @Nullable Avatar avatar;

    private transient volatile String $toString;

    private transient volatile int $hashCode;

    private transient volatile boolean $hashCodeMemoized;

    public Owner(@NotNull String __typename, @Nullable String hashId, @Nullable String name,
        @Nullable Boolean isFollowedByCurrentUser, @Nullable Avatar avatar) {
      this.__typename = Utils.checkNotNull(__typename, "__typename == null");
      this.hashId = hashId;
      this.name = name;
      this.isFollowedByCurrentUser = isFollowedByCurrentUser;
      this.avatar = avatar;
    }

    public @NotNull String get__typename() {
      return this.__typename;
    }

    public @Nullable String getHashId() {
      return this.hashId;
    }

    public @Nullable String getName() {
      return this.name;
    }

    public @Nullable Boolean getIsFollowedByCurrentUser() {
      return this.isFollowedByCurrentUser;
    }

    public @Nullable Avatar getAvatar() {
      return this.avatar;
    }

    @SuppressWarnings("unchecked")
    public ResponseFieldMarshaller marshaller() {
      return new ResponseFieldMarshaller() {
        @Override
        public void marshal(ResponseWriter writer) {
          writer.writeString($responseFields[0], __typename);
          writer.writeString($responseFields[1], hashId);
          writer.writeString($responseFields[2], name);
          writer.writeBoolean($responseFields[3], isFollowedByCurrentUser);
          writer.writeObject($responseFields[4], avatar != null ? avatar.marshaller() : null);
        }
      };
    }

    @Override
    public String toString() {
      if ($toString == null) {
        $toString = "Owner{"
          + "__typename=" + __typename + ", "
          + "hashId=" + hashId + ", "
          + "name=" + name + ", "
          + "isFollowedByCurrentUser=" + isFollowedByCurrentUser + ", "
          + "avatar=" + avatar
          + "}";
      }
      return $toString;
    }

    @Override
    public boolean equals(Object o) {
      if (o == this) {
        return true;
      }
      if (o instanceof Owner) {
        Owner that = (Owner) o;
        return this.__typename.equals(that.__typename)
         && ((this.hashId == null) ? (that.hashId == null) : this.hashId.equals(that.hashId))
         && ((this.name == null) ? (that.name == null) : this.name.equals(that.name))
         && ((this.isFollowedByCurrentUser == null) ? (that.isFollowedByCurrentUser == null) : this.isFollowedByCurrentUser.equals(that.isFollowedByCurrentUser))
         && ((this.avatar == null) ? (that.avatar == null) : this.avatar.equals(that.avatar));
      }
      return false;
    }

    @Override
    public int hashCode() {
      if (!$hashCodeMemoized) {
        int h = 1;
        h *= 1000003;
        h ^= __typename.hashCode();
        h *= 1000003;
        h ^= (hashId == null) ? 0 : hashId.hashCode();
        h *= 1000003;
        h ^= (name == null) ? 0 : name.hashCode();
        h *= 1000003;
        h ^= (isFollowedByCurrentUser == null) ? 0 : isFollowedByCurrentUser.hashCode();
        h *= 1000003;
        h ^= (avatar == null) ? 0 : avatar.hashCode();
        $hashCode = h;
        $hashCodeMemoized = true;
      }
      return $hashCode;
    }

    public static final class Mapper implements ResponseFieldMapper<Owner> {
      final Avatar.Mapper avatarFieldMapper = new Avatar.Mapper();

      @Override
      public Owner map(ResponseReader reader) {
        final String __typename = reader.readString($responseFields[0]);
        final String hashId = reader.readString($responseFields[1]);
        final String name = reader.readString($responseFields[2]);
        final Boolean isFollowedByCurrentUser = reader.readBoolean($responseFields[3]);
        final Avatar avatar = reader.readObject($responseFields[4], new ResponseReader.ObjectReader<Avatar>() {
          @Override
          public Avatar read(ResponseReader reader) {
            return avatarFieldMapper.map(reader);
          }
        });
        return new Owner(__typename, hashId, name, isFollowedByCurrentUser, avatar);
      }
    }
  }

  public static class Avatar {
    static final ResponseField[] $responseFields = {
      ResponseField.forString("__typename", "__typename", null, false, Collections.<ResponseField.Condition>emptyList()),
      ResponseField.forString("url", "url", null, false, Collections.<ResponseField.Condition>emptyList())
    };

    final @NotNull String __typename;

    final @NotNull String url;

    private transient volatile String $toString;

    private transient volatile int $hashCode;

    private transient volatile boolean $hashCodeMemoized;

    public Avatar(@NotNull String __typename, @NotNull String url) {
      this.__typename = Utils.checkNotNull(__typename, "__typename == null");
      this.url = Utils.checkNotNull(url, "url == null");
    }

    public @NotNull String get__typename() {
      return this.__typename;
    }

    public @NotNull String getUrl() {
      return this.url;
    }

    @SuppressWarnings("unchecked")
    public ResponseFieldMarshaller marshaller() {
      return new ResponseFieldMarshaller() {
        @Override
        public void marshal(ResponseWriter writer) {
          writer.writeString($responseFields[0], __typename);
          writer.writeString($responseFields[1], url);
        }
      };
    }

    @Override
    public String toString() {
      if ($toString == null) {
        $toString = "Avatar{"
          + "__typename=" + __typename + ", "
          + "url=" + url
          + "}";
      }
      return $toString;
    }

    @Override
    public boolean equals(Object o) {
      if (o == this) {
        return true;
      }
      if (o instanceof Avatar) {
        Avatar that = (Avatar) o;
        return this.__typename.equals(that.__typename)
         && this.url.equals(that.url);
      }
      return false;
    }

    @Override
    public int hashCode() {
      if (!$hashCodeMemoized) {
        int h = 1;
        h *= 1000003;
        h ^= __typename.hashCode();
        h *= 1000003;
        h ^= url.hashCode();
        $hashCode = h;
        $hashCodeMemoized = true;
      }
      return $hashCode;
    }

    public static final class Mapper implements ResponseFieldMapper<Avatar> {
      @Override
      public Avatar map(ResponseReader reader) {
        final String __typename = reader.readString($responseFields[0]);
        final String url = reader.readString($responseFields[1]);
        return new Avatar(__typename, url);
      }
    }
  }
}

@benjamn
@pcarrier
@glasser
@xrd
@sullis
@sav007

compiler Bug

Most helpful comment

Even this is an error and we will work on fix, but as to fix it on your end you have defined 2 times category in your query:

 + "      category {\n"
      + "        __typename\n"
      + "        title\n"
      + "      }\n"
      + "      photo(size: MEDIUM) {\n"
      + "        __typename\n"
      + "        url\n"
      + "      }\n"
      + "      category {\n"
      + "        __typename\n"
      + "        title\n"
      + "      }\n"

>All comments

Even this is an error and we will work on fix, but as to fix it on your end you have defined 2 times category in your query:

 + "      category {\n"
      + "        __typename\n"
      + "        title\n"
      + "      }\n"
      + "      photo(size: MEDIUM) {\n"
      + "        __typename\n"
      + "        url\n"
      + "      }\n"
      + "      category {\n"
      + "        __typename\n"
      + "        title\n"
      + "      }\n"
Was this page helpful?
0 / 5 - 0 ratings

Related issues

doums picture doums  ·  3Comments

romainpiel picture romainpiel  ·  4Comments

john-lanticse picture john-lanticse  ·  3Comments

tasomaniac picture tasomaniac  ·  4Comments

gmrandom picture gmrandom  ·  4Comments