code: protected T read(JsonReader in, TypeAdapter<JsonElement> elementAdapter, TypeAdapter<T> delegate) throws IOException {
          JsonElement tree = elementAdapter.read(in);
          afterRead(tree);
          return delegate.fromJsonTree(tree);
      }
docs: Override this to define how this is deserialized in {@code deserialize} to
  its type.