googleapis / googleapis/google-http-java-client

NULL_BOOLEAN is not compatible with Value Objects

Offen
#2,185 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Java
Sterne
1.4k
Forks
473
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

`google-http-client` uses sentinel objects like `NULL_BOOLEAN` to distinguish between fields being absent and explicitly set to `null`:

https://github.com/googleapis/google-http-java-client/blame/95fac312dd743a94fb28532ef8a50d374e6481ad/google-http-client/src/main/java/com/google/api/client/util/Data.java#L48-L49

Those sentinel fields are using deprecated constructors like `new Boolean(true)` (the deprecation warnings were suppressed in https://github.com/googleapis/google-http-java-client/pull/1215).

JDK 28 introduces a preview of the value classes feature (https://openjdk.org/jeps/401). With JEP 401 boxed primitive classes like `Boolean` and `Integer` become value classes that don't have identity, so instance are compared by value:

* `new Boolean(true) == Boolean.TRUE` will evaluate to `true`
* `new Integer(0) == Integer.valueOf(0)` will evaluate to `true`

This causes `google-http-client`'s `Data.isNull(object)` to return true for legitimate values.

With JEP 401, assertions like these will start to fail:

```java
assertThat(Data.isNull(true)).isFalse();
assertThat(Data.isNull(0)).isFalse();
assertThat(Data.isNull(0L)).isFalse();
```

Possible fixes:

* Introduce a new API like `JsonNullable` to replace the use of `NULL_BOOLEAN`
* Maintain a set of explicitly set fields, that could be queried instead of relying on sentinel values.

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Start in google-http-client/src/main/java/com/google/api/client/util/Data.java, especially Data.isNull and NULL_BOOLEAN, and reproduce the assertions shown in the issue with the JDK 28 value-class preview. Compare the two proposed approaches; done means legitimate Boolean, Integer, and Long values no longer return true from Data.isNull while absent and explicit-null tracking remains correct.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
java
Bereich
api
Issue-Typ
Bug
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Ruhig
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.