Skip to content

Commit 563742a

Browse files
committed
Only serialize null for Optional<String>
1 parent 7812204 commit 563742a

File tree

3 files changed

+21
-18
lines changed

3 files changed

+21
-18
lines changed

MODULE.bazel.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/main/java/com/google/devtools/build/lib/bazel/bzlmod/GsonTypeAdapterUtil.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -232,25 +232,34 @@ public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> typeToken) {
232232
if (elementTypeAdapter == null) {
233233
return null;
234234
}
235-
return (TypeAdapter<T>) new OptionalTypeAdapter<>(elementTypeAdapter);
235+
// Explicit nulls for Optional.empty are required for env variable tracking, but are too
236+
// noisy and unnecessary for other types.
237+
return (TypeAdapter<T>)
238+
new OptionalTypeAdapter<>(
239+
elementTypeAdapter, /* serializeNulls= */ elementType.equals(String.class));
236240
}
237241
};
238242

239243
private static final class OptionalTypeAdapter<T> extends TypeAdapter<Optional<T>> {
240244
private final TypeAdapter<T> elementTypeAdapter;
245+
private final boolean serializeNulls;
241246

242-
public OptionalTypeAdapter(TypeAdapter<T> elementTypeAdapter) {
247+
public OptionalTypeAdapter(TypeAdapter<T> elementTypeAdapter, boolean serializeNulls) {
243248
this.elementTypeAdapter = elementTypeAdapter;
249+
this.serializeNulls = serializeNulls;
244250
}
245251

246252
@Override
247253
public void write(JsonWriter jsonWriter, Optional<T> t) throws IOException {
248254
Preconditions.checkNotNull(t);
249255
if (t.isEmpty()) {
250256
boolean oldSerializeNulls = jsonWriter.getSerializeNulls();
251-
jsonWriter.setSerializeNulls(true);
252-
jsonWriter.nullValue();
253-
jsonWriter.setSerializeNulls(oldSerializeNulls);
257+
jsonWriter.setSerializeNulls(serializeNulls);
258+
try {
259+
jsonWriter.nullValue();
260+
} finally {
261+
jsonWriter.setSerializeNulls(oldSerializeNulls);
262+
}
254263
} else {
255264
elementTypeAdapter.write(jsonWriter, t.get());
256265
}

src/test/tools/bzlmod/MODULE.bazel.lock

Lines changed: 6 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)