public TypeAdapter create()

in server/src/jetbrains/buildServer/sharedResources/server/report/UsedResourcesSerializer.java [58:87]


    public <T> TypeAdapter<T> create(final Gson gson, final TypeToken<T> type) {
      if (type.getRawType() != Resource.class) {
        return null;
      }

      final TypeAdapter<T> delegate = gson.getDelegateAdapter(this, type);

      return new TypeAdapter<T>() {
        @Override
        public void write(final JsonWriter jsonWriter, final T t) throws IOException {
          delegate.write(jsonWriter, t);
        }

        @SuppressWarnings("unchecked")
        @Override
        public T read(final JsonReader jsonReader) throws JsonParseException {
          JsonElement tree = Streams.parse(jsonReader);
          JsonObject object = tree.getAsJsonObject();
          if (object.has("type")) {
            ResourceType resourceType = ResourceType.fromString(object.get("type").getAsString());
            if (resourceType == ResourceType.QUOTED) {
              return (T)gson.getDelegateAdapter(CustomTypeAdapterFactory.this, TypeToken.get(QuotedResource.class)).fromJsonTree(tree);
            } else if (resourceType == ResourceType.CUSTOM) {
              return (T)gson.getDelegateAdapter(CustomTypeAdapterFactory.this, TypeToken.get(CustomResource.class)).fromJsonTree(tree);
            }
          }
          throw new JsonParseException("Cannot deserialize " + type + ". It is not a valid Resource JSON.");
        }
      };
    }