Make ObjectCodecs.ClassKeyedBuilder more reasonable
Not sure why we passed in Class<T>, ObjectCodec<? extends T> - it should really
be the other way around, since ObjectCodec<T> should be able to serialize <?
extends T>....
RELNOTES: None
PiperOrigin-RevId: 169161061
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/ObjectCodecs.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/ObjectCodecs.java
index 5778cdb..3987332 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/ObjectCodecs.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/ObjectCodecs.java
@@ -31,8 +31,10 @@
* the configuration.
*
* <p>To use, create a {@link ObjectCodecs.Builder} and add custom classifier to {@link ObjectCodec}
- * mappings using {@link ObjectCodecs.Builder#add}. The provided mappings used to determine
- * serialization/deserialization logic. For example:
+ * mappings using {@link ObjectCodecs.Builder#add} directly or by using one of the convenience
+ * builders returned by {@link ObjectCodecs.Builder#asSkyFunctionNameKeyedBuilder()} or
+ * {@link ObjectCodecs.Builder#asClassKeyedBuilder()}. The provided mappings are then used to
+ * determine serialization/deserialization logic. For example:
*
* <pre>{@code
* // Create an instance for which anything identified as "foo" will use FooCodec.
@@ -197,8 +199,14 @@
private Builder() {}
- /** Add custom serialization strategy ({@code codec}) for {@code classifier}. */
- public Builder add(String classifier, ObjectCodec<?> codec) {
+ /**
+ * Add custom serialization strategy ({@code codec}) for {@code classifier}.
+ *
+ * <p>Intended for package-internal usage only. Consider using the specialized build types
+ * returned by {@link #asClassKeyedBuilder()} or {@link #asSkyFunctionNameKeyedBuilder()}
+ * before using this method.
+ */
+ Builder add(String classifier, ObjectCodec<?> codec) {
codecsBuilder.put(classifier, codec);
return this;
}
@@ -232,7 +240,7 @@
this.underlying = underlying;
}
- public <T> ClassKeyedBuilder add(Class<T> clazz, ObjectCodec<? extends T> codec) {
+ public <T> ClassKeyedBuilder add(Class<? extends T> clazz, ObjectCodec<T> codec) {
underlying.add(clazz.getName(), codec);
return this;
}