googleapis / googleapis/google-http-java-client

NULL_BOOLEAN is not compatible with Value Objects

Đang mở
#2,185 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Java
Star
1.4k
Fork
473
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

`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.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

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.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
java
Lĩnh vực
api
Loại issue
Lỗi
Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức độ hoạt động
Ít trao đổi
Độ rõ ràng
Cần làm rõ
Mức phù hợp với người mới
35/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.