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.");
}
};
}